Revised RFC on range design for D2

Chris R. Miller lordsauronthegreat at gmail.com
Sun Sep 28 17:24:47 PDT 2008


Andrei Alexandrescu wrote:
> Denis Koroskin wrote:
>> On Sun, 28 Sep 2008 05:45:58 +0400, Andrei Alexandrescu 
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> Sergey Gromov wrote:
>>>> Sat, 27 Sep 2008 15:19:01 -0500,
>>>> Andrei Alexandrescu wrote:
>>>>> My point is that I agree with all concerns you are raising but I am 
>>>>> not
>>>>> sure they warrant adding a language feature.
>>>>  I hoped for some reason that these features could simplify the 
>>>> compiler.  Now when I think about it I conclude that I was probably 
>>>> wrong.  Explicit properties is definitely a feature, even though it 
>>>> seems easy to implement. Injectons could help if Walter were forced 
>>>> into supporting different scoping rules for unified call syntax, but 
>>>> if a.f(b) stays strictly a sugar for f(a,b) this feature helps 
>>>> nothing from a compiler standpoint.
>>>>  So I'll probably agree that these features don't add much to the 
>>>> language, as D doesn't add much to C except safety, productivity, 
>>>> maintainability and claritiy.  The clarity/maintainability vs 
>>>> genericity is a tradeoff which is completely in Walter's hands.
>>>
>>> Very wise words.
>>>
>>> I think we all agree that there are some annoyances related to the 
>>> whole property business, among which the main one is:
>>>
>>> writeln = 4;
>>>
>>> That is quite indefensible :o|. I consider the others rather minor, 
>>> but that's just a personal opinion.
>>>
>>> How about this. Maybe if we attacked this annoyance in particular, 
>>> that would be a large bang for the buck without a landslide change in 
>>> the compiler. We only need some way to inform the compiler, "yes, 
>>> it's ok to call a.b(c) as a.b = c". Ideas?
>>>
>>>
>>> Andrei
>>
>> I think property syntax should be disallowed by default. Most of the 
>> functions aren't expected to be used as a property, anyway.
> 
> By whom aren't they expected?
> 
>> It would break the code, yes, but it is very easy to fix.
>>
>> Solution of my preference:
>>
>> class Foo
>> {
>>     // allow property syntax:
>>     property void bar(int baz); // allows "foo.bar = 42;"
>>
>>     // allow omitting parens
>>     property int bar();         // allows writing "int x = foo.bar;"
>> }
>>
>> Think long term, don't be afraid to break existing code and introduce 
>> new features if they improve the language signaficantly. Wrong 
>> decision made today may make huge negative impact over time.
> 
> Without solid argument, all this is just talk. What is the negative 
> impact over time?

Improper use of properties make code that looks ambiguous.  Is that a 
public member or a method?  It reduces codebase coherency, which is 
normally not a huge problem except when new programmers are reading 
through the code to see how it works.  If someone mistook that method 
call via property as a member, then they might use it as such in code 
they write.  Because it's actually a method, it has the potential to 
rope in serious amounts of processor work.

It's the same reason you don't want to overload simple operators in C++ 
with potentially large algorithms, since it creates an illusion that the 
operator is really a simple operation when in fact it could be quite 
tedious.  This is - of course - a matter of practice with C++, and isn't 
a language requirement, but it does illustrate that it's something to be 
conscious of.  Similarly, you wouldn't want to load up a D invariant 
with a lot of hard processor work, since that would incur a lot of 
overhead following each public function call.  There's nothing 
explicitly wrong about doing it, it's just bad practice (according to some).

I hope that was coherent.  I believe I read about it in /Code Complete/, 
if you want a source.


More information about the Digitalmars-d-announce mailing list