Extended Type Design.

Andrei Alexandrescu (See Website For Email) SeeWebsiteForEmail at erdani.org
Sun Mar 18 11:00:08 PDT 2007


Bill Baxter wrote:
> Andrei Alexandrescu (See Website For Email) wrote:
>> Alex Burton wrote:
>>> Andrei Alexandrescu (See Website For Email) Wrote:
>>>
>>>> Walter Bright wrote:
>>>>> Derek Parnell wrote:
>>>> [snip]
>>>>>>> invariant
>>>>>>  This is applied to declarations to prevent code in the same 
>>>>>> application as
>>>>>> the declaration from being able to modify the item being declared.
>>>>> Almost right. It isn't the declaration, but the *type* that is 
>>>>> invariant. Invariant applies to the type, not the name.
>>>> By the way, "invariant" is a lifesaver. Everybody and their sister 
>>>> in the coffee shop liked it at the first sight. The girl at the 
>>>> counter asked for kris' email :o).
>>>>
>>>> Yes, "invariant" is essentially a synonym to "constant", but here 
>>>> are two simple mnemonic devices to remember which is which:
>>>>
>>>> a) "const" is shorter because it's used more often;
>>>>
>>>> b) "const" is similar to C++'s homonym.
>>>>
>>>> Easier to remember than perl's $|.
>>>>
>>>>
>>>> Andrei
>>>
>>> Another option I'd like to have at least considered is the finding of 
>>> a character that can be used to denote const.
>>> Adding various constnesses to all the code could easily add a whole 
>>> lot of typing to the task of getting things done in D.
>>>
>>> Could we find a unicode character that wouldn't be too much trouble 
>>> for editors to insert ? Might mean that D starts to require unicode 
>>> source - but is that such a bad thing ?
>>>
>>> Are there any ascii characters that can be found that wont confuse 
>>> the parser ? - like how the use of ! works for templates
>>
>> Type inference will reduce the need for littering code with "const" a 
>> great deal (when compared to today's C++ code, at least). You just write:
>>
>> auto var = expression;
>>
>> and the const will propagate. Initial experience will show whether 
>> this is enough.
> 
> What about the ability to deduce only parts of a type?
> 
> Declaring types is also a kind of documentation / assertion that can 
> help maintainers of the code later.   I might want to specify const and 
> let the type be deduced, or I might want to specify the type I'm 
> expecting and let const be deduced.
> 
> Maybe declaration followed by is-test will be necessary for those cases. 
>  If they aren't too common I guess that's ok.  But I would hate to see
>    auto var = expression;
>    assert(is(non_const_typeof(var)==Something));
> become a standard idiom.
> 
> ... how will one do that is() check for base type sans type constructors?

assert(is(const typeof(var) == typeof(var)));

Only time will show whether this will be needed frequently. I don't 
think so: in general var will engender an error upon first mutation, 
which is close to its definition.

Andrei



More information about the Digitalmars-d mailing list