Configurable syntax

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri May 22 06:53:24 PDT 2009


Georg Wrede wrote:
> Jason House wrote:
>> Georg Wrede Wrote:
>>
>>> --- Disclaimer: this is a bit long. Read it later. ---
>>
> 
>> Wow, you're right. Sadly, I stopped reading about 80% through
>> (discussion on D4)
> 
> Yeah, one should not write opinion pieces when inspired...
> 
>> At a high level, I agree with your assessment about an easy growth
>> path for newbors to gurus. I should also add that a language must
>> make the code of gurus remain understandable for all but the newest
>> of newbies. (Ever try to read through STL or a boost library?)
> 
> (Yeah, reading that kind of code makes one feel inferior to the gurus. 
> And so very sad that the language makes even mid-level stuff entirely 
> uncomprehensible. Not to speak of the amounts of time it has to take 
> coding it.)
> 
> Strictly speaking, there's no way for a language to make guru code 
> understandable to "anti-gurus". However (and what I guess you were 
> thinkng of), when somebody uses the most advanced features in a 
> language, then his stuff should not become incomprehensible to 
> "anti-gurus" just because of the language itself.

Two possible language features should make complicated template code 
significantly simpler:

1. Allow inner name promotion even if the template defines other 
members, as long as they are all private:

now:

template WidgetImpl(A, B) {
     ...
     alias ... Result;
}

template Widget(A, B) {
     alias WidgetImpl!(A, B) Widget;
}

proposed:

template Widget(A, B) {
private:
     ...
     alias ... Result;
public:
     alias Widget Result;
}

It's needed very frequently, puts sand in the eye, and almost sure to 
throw off the casual reader.

2. Handle qualifiers and ref properly. Right now I use an abomination:

enum bool byRef = is(typeof(&(R.init.front())));
/// @@@UGLY@@@
/**
Forwards to $(D _input.back).
  */
     mixin(
         (byRef ? "ref " : "")~
         q{ElementType!(R) front()
             {
                 return _input.back;
             }
         });


Andrei




More information about the Digitalmars-d mailing list