Revised RFC on range design for D2

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Sep 28 18:06:36 PDT 2008


Chris R. Miller wrote:
> 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.

Oh, besides - if computed properties are allowed, they also can perform 
arbitrary amounts of work. No?

Andrei


More information about the Digitalmars-d-announce mailing list