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