On Thu, 09 Dec 2010 12:01:47 -0500, Bruno Medeiros
<brunodomedeiros+s...@com.gmail> wrote:
On 29/11/2010 21:13, Steven Schveighoffer wrote:
On Mon, 29 Nov 2010 15:55:10 -0500, Kagamin <s...@here.lot> wrote:
Steven Schveighoffer Wrote:
My favorite in recent times is:
@tail const(C) tailconst;
Tail const is a type constructor, but I don't think that annotations
should evolve that far.
What I liked about that is it is orthogonal to the constancy. That is,
with one annotation you get tail-const, tail-immutable, and tail-shared.
By saying that @tail is a type constructor, do you mean it can be
applied to any const/immutable, anywhere they appear? Like, how do you
declare a class var to be head-const and tail-immutable?
@tail immutable(const(T))
Or an array of tail-const classes?
@tail const(C)[]
The @tail only applies to the modifier, not to the rest of it. It
modifies const.
BTW, this idea was shown to be too complex for use because of two things:
1. the prospect of having to define both const and @tail const member
functions is way too complex for normal people, and 2. member functions
*always* pass the 'this' pointer by reference on a struct, so you couldn't
call for instance an immutable function on a tail-immutable type.
-Steve