Hello community, that is my first post here. My background is more than 10 years of C++ and to be positive I would like to say that there are a lot of things I love in D ( perhaps the object of a new thread :O) ).
> Speaking about D mistakes Steve spoke about missing tail const. > I was thinking about this, and I fully agree that it is a hole. I fully agree with that and IMHO I think D must supports this natively. At least one facet of the problem is a "syntax" problem. Doing a parallel with C++ and concerning pointers there are 4 possible variants: // C++ 1/ int *p; 2/ int *const p; 3/ const int * p; 4/ const int *const p; In D, if I try the summarize the situation, we have : 1/ int *p; 2/ const(int)* p; 3/ forbiden due to the "const transitivity" philosophy 4/ const(int*) p; Now concerning D objects, there are some kind of "implicit pointers" (with reference counting) with no direct equivalent in C++ (and hence this problem does not occur in C++). IMHO the syntaxic problem is the consequence of a missing "place holder" for the two "const" attributes (because there is no more "*" to play with in the declaration). Perhaps one idea is to make "_" plays the role of this missing place holder. To make things clear, for a class A the D syntax would be: 1/ __ = nothing: A p ( no change ) 2/ _const(A) p; (mimic "int *const p;") 3/ const_(A) p; (mimic "const int *p;" but anyway forbiden in D due to const transitivity) 4/ const(A) p; (no change) To summarize there would be just one keyword to add in D : "_const". This attribute would have sense only for Objects (the same logic would also hold for "_immutable"). To my IMHO the syntax _const is easy to unerstand, because "_" clearly shows the place holder position and its missing "const" I hope this suggestion is not too naive and can help the debate...
