new DIP5: Properties 2

Chad J chadjoan at __spam.is.bad__gmail.com
Tue Jul 28 17:50:01 PDT 2009


Andrei Alexandrescu wrote:
> Chad J wrote:
>> Andrei Alexandrescu wrote:
>>> My perception is that there are a few vocal people. The protests have
>>> been historically against the stupid "writeln = 42" which we must get
>>> rid of.
>>>
>>
>> Seems odd to me.  I thought the unpopular bit was the lack of
>> lvalue-ness and how "array.length++;" did not work.  No idiot would
>> write "writefln = 42;" in serious code.  It's easy to avoid since you
>> have be rather intentional about it.
> 
> Oh, yes. That needs fixing too!
> 
>>> I have a dream.
>>>
>>
>> I feel like ranting ;)
>>
>>> * Parameterless functions still can be called without "()". People will
>>> realize that it's a prejudice to believe that this impedes code
>>> understanding, and their eyes and wrists will thank them.
>>>
>>
>> Earlier I was thinking yeah ok w/e that's fine.  Now I'm thinking these
>> are just evil.  But only when the function returns a value-type.  void
>> functions are alright.  Ref returns may or may not be alright.
>>
>> It's not because of "writefln = 42;".
>>
>> It's because of this:
>>
>> // Library code
>> struct Rectangle
>> {
>>     float x,y,w,h;
>>     // etc blah blah
>> }
>>
>> class Widget
>> {
>>     Rectangle _rect; // eww no optional backing storage
>>     Rectangle rect() { return _rect; }
>>     //...
>> }
>>
>> // User code (probably test code in this case...)
>> auto widget = new Widget(...);
>> widget.rect.w = 200;
>> widget.rect.h = 100;
>>
>> // End
>> A few hours later this poor library developer takes a break from the
>> debugger and writes a small experiment.  The conclusion is
>> "AARRGGGHHH!".  He runs to the news group to bitch and moan, and someone
>> responds, "yeesh use ref return and RTFM already".  Bad day.
> 
> This serious problem has already been mentioned once. Incidentally I
> think it was Steve who mentioned it. It is big and relates to the fact
> that you could call member functions against rvalues. Could you please
> add it to bugzilla?
> 
>> This is only the example that pops to mind.  I am sure there are cases
>> where the library writer may intentionally NOT ref return, and the user
>> will miss this and get bitten.  When the library writer and user are the
>> same, things only goes downhill.
>>
>>> * The syntax "foo = bar" is rewritten into "foo(bar)" IF AND ONLY IF the
>>> expression "auto __x = foo, __x = bar" is compilable.
>>>
>>
>> I seem to know exactly what you said with great mathematical precision
>> and certainty.  I have no idea what this actually DOES though :/
>>
>> (In another post you mentioned this being a guarantee of a getter, but
>> there seems to be more to it, such as type equality between foo and bar.)
>>
>>> * The non-uniformity regarding parameterless functions returning
>>> parameterless functions is acknowledged but considered minor.
>>>
>>
>> O.O
>>
>> R-R-Really?!
>>
>> So you're just going to give up?
> 
> Well that kind of sucks. I agree.
> 
> 
> 
> Andrei

bindun.

http://d.puremagic.com/issues/show_bug.cgi?id=3008



More information about the Digitalmars-d mailing list