Short list with things to finish for D2

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Thu Nov 19 01:23:04 PST 2009


Andrei Alexandrescu wrote:
> We're entering the finale of D2 and I want to keep a short list of 
> things that must be done and integrated in the release. It is clearly 
> understood by all of us that there are many things that could and 
> probably should be done.
> 
> 1. Currently Walter and Don are diligently fixing the problems marked on 
> the current manuscript.
> 
> 2. User-defined operators must be revamped. Fortunately Don already put 
> in an important piece of functionality (opDollar). What we're looking at 
> is a two-pronged attack motivated by Don's proposal:
> 
> http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP7
> 
> The two prongs are:
> 
> * Encode operators by compile-time strings. For example, instead of the 
> plethora of opAdd, opMul, ..., we'd have this:
> 
> T opBinary(string op)(T rhs) { ... }
> 
> The string is "+", "*", etc. We need to design what happens with 
> read-modify-write operators like "+=" (should they be dispatch to a 
> different function? etc.) and also what happens with index-and-modify 
> operators like "[]=", "[]+=" etc. Should we go with proxies? Absorb them 
> in opBinary? Define another dedicated method? etc.
> 
> * Loop fusion that generalizes array-wise operations. This idea of 
> Walter is, I think, very good because it generalizes and democratizes 
> "magic". The idea is that, if you do
> 
> a = b + c;
> 
> and b + c does not make sense but b and c are ranges for which a.front = 
> b.front + c.front does make sense, to automatically add the iteration 
> paraphernalia.
> 
> 3. It was mentioned in this group that if getopt() does not work in 
> SafeD, then SafeD may as well pack and go home. I agree. We need to make 
> it work. Three ideas discussed with Walter:
> 
> * Allow taking addresses of locals, but in that case switch allocation 
> from stack to heap, just like with delegates. If we only do that in 
> SafeD, behavior will be different than with regular D. In any case, it's 
> an inefficient proposition, particularly for getopt() which actually 
> does not need to escape the addresses - just fills them up.
> 
> * Allow @trusted (and maybe even @safe) functions to receive addresses 
> of locals. Statically check that they never escape an address of a 
> parameter. I think this is very interesting because it enlarges the 
> common ground of D and SafeD.
> 
> * Figure out a way to reconcile "ref" with variadics. This is the actual 
> reason why getopt chose to traffic in addresses, and fixing it is the 
> logical choice and my personal favorite.
> 
> 4. Allow private members inside a template using the eponymous trick:
> 
> template wyda(int x) {
>    private enum geeba = x / 2;
>    alias geeba wyda;
> }
> 
> The names inside an eponymous template are only accessible to the 
> current instantiation. For example, wyda!5 cannot access wyda!(4).geeba, 
> only its own geeba. That we we elegantly avoid the issue "where is this 
> symbol looked up?"
> 
> 5. Chain exceptions instead of having a recurrent exception terminate 
> the program. I'll dedicate a separate post to this.
> 
> 6. There must be many things I forgot to mention, or that cause grief to 
> many of us. Please add to/comment on this list.


7. opPow()

8. The magic "meta" namespace, aka. getting rid of is(typeof({...})) and 
__traits(...).


-Lars



More information about the Digitalmars-d mailing list