Suggestion: object const'ness
Hasan Aljudy
hasan.aljudy at gmail.com
Sat May 20 20:36:33 PDT 2006
Regan Heath wrote:
> On Sat, 20 May 2006 20:44:52 -0400, Jarrett Billingsley
> <kb3ctd2 at yahoo.com> wrote:
>
>> "Tom" <ihate at spam.com> wrote in message
>> news:e4ll86$q0e$1 at digitaldaemon.com...
>>
>>> One of the flaws of the language IMHO. Also in/out/inout is flawed and
>>> seems merely informative instead of being strict in allowing/disallowing
>>> parameter modification. I'm on the side of const-like solution and
>>> *TRUE*
>>> in/out/inout param attributes. When I first read about D and all these
>>> promising features I was really amazed till I try some of them (like
>>> in/out/etc). I felt disappointed though I still love the language
>>> and it's
>>> a shame this little stuff doesn't work as one expect.
>>
>>
>> Just curious; what do you mean by "true" in/out/inout? Do you mean that
>> "in" parameters should not be modifiable (kind of like const)?
>
>
> I believe that's exactly what he means. I proposed the same thing in
> one of the many past const debates. It just makes sense to me that if
> a parameter is passed as 'in' you will not be modifying it, if you
> were modifying it you'd clearly be passing it as 'inout'.
>
> 'in' is the default parameter type, so this would mean that by default
> parameters are not modifyable. Which in turn means you have to actually
> think about and indicate the parameters you are going to modify.
>
> There remains a problem that passing say an object reference by 'in'
> only really says "I will not modify this object reference", and gives
> no guarantee about the data to which it refers (same goes for array
> references, or any kind of reference). So there is actually several
> layers of immutability to handle, somehow.
>
> I'm very much in favour of some sort of "const" solution which involves
> 'in', 'out', etc.
>
>> If so, what about out/inout?
>
>
> 'out' - initialized to type.init and expects to be modified (not const)
> 'inout' - expects to be modified (not const)
>
> Regan
huh? if you pass an object reference as in you shouldn't be able to
manipulate the object?!!
In what sense is that a "true" in?
That's just an arbitrary restriction.
More information about the Digitalmars-d
mailing list