Make a variable single-assignment?

Stewart Gordon smjg_1998 at yahoo.com
Wed Nov 30 15:08:14 PST 2011


On 21/11/2011 20:06, Jesse Phillips wrote:
> What you are describing is Head Const, and is not available.
>
> http://www.d-programming-language.org/const-faq.html#head-const
>
> It will not be added as it doesn't provide any guarantees about the code that is useful
> to the compiler. It can't be added to the existing system without complicating the type
> system even more, which outweighs the benefits.
<snip>

Guarantees about the code don't need to be useful to the compiler - they can be just 
useful to the programmer.  After all, this is the main point of DbC.

And it doesn't need to be a full-fledged head const.  At the simplest, a single-assignment 
variable could just be an rvalue - something of which the address cannot be taken and so 
the absence of head const becomes irrelevant.

That said, it isn't much complexity to allow the address to be taken of such a thing

     final T data;
     auto ptr = &data;

with the following rules:
- if T is a value type, immutable(something)[] or immutable(something)*, then &data is an 
immutable(T)*
- otherwise, &data is a const(T)*.

Once upon a time there was const/final/invariant.  What exactly did final do back then?

Stewart.


More information about the Digitalmars-d-learn mailing list