Suggestion: object const'ness
Hasan Aljudy
hasan.aljudy at gmail.com
Sun May 21 08:57:03 PDT 2006
Tom wrote:
> Derek Parnell escribió:
>
>> .
>>
>>>
>>> If you see a signature like this:
>>>
>>> void doSomething(in SomeObj obj1, inout SomeObj obj2);
>>>
>>> You'll instantly expect that function "doSomething" doesn't modify obj1
>>
>>
>> But it doesn't modify 'obj1'. Remembering that 'obj1' is the reference
>> to the object and not the object itself.
>
>
> If you read just below you'll notice I was referring to obj1 as the
> object and not as it's reference.
> |
> V
>
>>> and do possibly modify obj2 (the object and not it's reference).
>>> Why would you want (in the most of the cases) to make "in" the
>>> reference itself?
>>
>>
>> Don't know. Simplier I guess.
>
>
> Exactly, no one knows why, it's simply useless. At present, in D is
> perfectly pointless (merely informative) to use 'in' with reference
> parameters, at least for the 99% of the cases.
>
>>> Currently D 'in Obj p' "behaves as" the rarely-used 'Obj *const p'
>>> and not as the widely and common 'const Obj *p' of C++ ("behave as"
>>> because I use pointers instead of references to illustrate the
>>> underlying behavior and C++ references are always const).
>>>
>>> Const is another level of protection against unintended behavior
>>> (i.e. bugs). In C++, const *can* be circumvented but one has to be
>>> horribly explicit to do that. No way you would unintentionally do that.
>>
>>
>> So everyone repeat after me ... D is not C++, D is not C++, D is not
>> C++, ... ;-)
>
>
> I know that Derek. Just that *many* of the users that come to D, don't
> know if you realize it, comes from the C++ world. It's understandable,
> we like the features of C++ but hate the syntax (and other stuff) and we
> see D as a better C++. It's perfectly natural to try to achieve the same
> things in D that we've achieved in C++. Don't be afraid, I'd hate to see
> D become another C++ (and that's not gonna happen for sure).
>
> For C++ users, 'in' parameters (for references) are 'const Obj &o',
> inout/out parameters are 'Obj &o'. When you see that on a signature you
> can be "sure" (there's always some reasonable trust in the middle) the
> function will not modify the object (you don't care about the object
> reference). In D in/out/inout are just a disappointment (for C++ users).
> I've dreamed to see that keywords used with the same meaning as what
> I've mentioned above.
>
>> --Derek Parnell
>> Melbourne, Australia
"D is not C++" implies the following:
Don't try to achieve things the same way as in C++!!
It's not just the syntax that's different, it's a lot of features too.
For example: objects are always by reference, never by value.
This make for a huge difference; it results in a completely different
behaviour in many situations. (for the better).
I would advice you to try Java for a while, maybe it can help you get
rid of useless C++ idioms. :)
More information about the Digitalmars-d
mailing list