On 06/10/2015 10:00 AM, Dennis Ritchie wrote:

Is it possible somehow
to create a more complex compilation process, which can reassign
variables more than once?

I am not a compiler writer but I assume if a variable is not a compile-time expression, then the compiler generates code that makes it possible to initialize it at run time and modify it if mutable:

  int i = argc;
  // ...
  ++i;

On the other hand, if it's a manifest constant (enum, const static, etc.) then by definition it cannot be mutated. If we allowed mutation of compile-time expressions, then we would have a complicated language.

enum i = 42;
enum j = foo(i);    // Did foo() use 42 or 43?
i = 43;
enum k = foo(i);    // Did foo() use 42 or 43?

How can an enum value be changed? I find the above confusing.

The great thing about D's CTFE is that we can use arbitrarily complex expressions as long as they are available at compile time. For example, it is possible to make 'i' above a foreach loop variable and call foo() with different values.

What is your use case? I feel like it can be solved by other means.

Ali

Reply via email to