?

Log in

No account? Create an account

Эмуляция ключевого слова static из D на макросах - Excelsior

Aug. 28th, 2013

02:10 pm - Эмуляция ключевого слова static из D на макросах

Previous Entry Share Next Entry

Comments:

From:Valentin Budaev
Date:August 28th, 2013 12:58 pm (UTC)
(Link)
А что происходит в D, если euler1 меняет глобальный стейт?
(Reply) (Thread)
[User Picture]
From:thedeemon
Date:August 28th, 2013 02:16 pm (UTC)
(Link)
Такую конпелятор не разрешит в компайл-тайме использовать.
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:August 28th, 2013 02:18 pm (UTC)
(Link)
Как он это определит? Есть ли какой-то список правил того, что можно и что нельзя делать в разрешенных функциях?
(Reply) (Parent) (Thread)
From:v_l_a_d
Date:August 28th, 2013 04:06 pm (UTC)
(Link)
http://dlang.org/function.html , см. раздел "Compile Time Function Execution (CTFE)"
(Reply) (Parent) (Thread)
From:Valentin Budaev
Date:August 28th, 2013 07:13 pm (UTC)
(Link)
Я как понял, оно функцию на самом деле не проверяет, а просто начинает ее выполнять до тех пор, пока не встретится запрещенная инструкция, если не встретилась - все ок, если встретилась - бросим ошибку, верно?
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:August 28th, 2013 07:14 pm (UTC)
(Link)
Я тоже так понял.
(Reply) (Parent) (Thread)
[User Picture]
From:thedeemon
Date:August 29th, 2013 06:40 am (UTC)
(Link)
Не должно. В D есть вывод и проверка чистоты функции. Можно пометить функцию как pure, и компилятор ее проверит, выдав ошибку, если она не.
(Reply) (Parent) (Thread)
From:Valentin Budaev
Date:August 29th, 2013 09:33 am (UTC)
(Link)
Я вот из этого исходил:

> Note that the above restrictions apply only to expressions which are actually executed.

То есть с одним аргументом она pure (и можно подставлять), а с другим - non-pure, уже нельзя.

Но это не плохо, хорошо даже - корректность гарантируется все равно, проверится все один фиг в компайлтайме, зато гибкость выше.
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:August 29th, 2013 09:35 am (UTC)
(Link)
:)
(Reply) (Parent) (Thread)
[User Picture]
From:thedeemon
Date:August 29th, 2013 10:25 am (UTC)
(Link)
А, и правда, судя по приведенному там примеру. Удивительно.
(Reply) (Parent) (Thread)