Revised RFC on range design for D2
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Oct 2 12:13:16 PDT 2008
Sean Kelly wrote:
> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>> Bruno Medeiros wrote:
>>> I don't understand that. You stated "It violates economy of syntax.", so
>>> it violates your Principle 1 of language design. So how can you be
>>> happy with that (apart from the assignment issue)? Does fixing this
>>> problem violate some other principle or concern of yours?
>> I think keeping the language simple is also a good goal.
>
> I apologize if this has been brought up before, but I'm not sure that simplicity
> is a good thing if it can result in unpredictable behavior. For example:
>
> import std.stdio;
>
> class C
> {
> this( bool delegate() p )
> {
> version( a )
> cond = p;
> version( b )
> ptr = p;
> }
> version( a )
> {
> bool delegate() cond;
> }
> version( b )
> {
> bool delegate() ptr;
> bool delegate() cond() { return ptr; }
> }
> }
>
> void main()
> {
> bool test() { writefln( "hi" ); return false; }
> auto c = new C( &test );
> if( c.cond() )
> writefln( "true" );
> }
>
> Running version=a prints "hi" while version=b prints "true." If there were
> some way in the language to say "cond() is a property" then this issue would
> not be silently introduced when changing cond from a variable to a method.
Oh how I am with you on this. I've always thought mentioning a delegate
name should NOT EVER evaluate the delegate. Walter definitely took the
wrong turn down that alley there. And guess what. He got ambushed by the
"lazy" keyword right there. I told Walter to not do that "lazy" keyword,
he disregarded, but the time will come when that stone will be turned.
Andrei
More information about the Digitalmars-d-announce
mailing list