const again
Denton Cockburn
diboss at hotmail.com
Fri Dec 7 00:07:01 PST 2007
On Thu, 06 Dec 2007 21:44:09 -0500, sambeau wrote:
> Bill Baxter Wrote:
>
>> Paul Anderson wrote:
>> > Walter Bright Wrote:
>> >
>> >> That leaves what to do about manifest constants. It occurs that we
>> >> already have a mechanism for them - enums. So why not:
>> >> enum x = 3;
>> >> enum long y = 4;
>> >> ? I think that solves our problem.
>> >>
>> >> There's one last problem:
>> >> class C { }
>> >> const(C)[] a;
>> >> a[3] = new C(); // error, x[3] is const
>> >> does not work with this new regime. Every twist we tried to make it
>> >> work caused other problems. Eventually, it just became clear that
>> >> this just is not going to work. But, the following does work:
>> >> a ~= new C();
>> >> a = a[1..3];
>> >> a = b;
>> >> just like for strings. One can copy, concatenate, and slice such
>> >> arrays (just like for strings). It's not so bad. Andrei also
>> >> mentioned the possibility of using a template:
>> >> TailConst!(C)[] a;
>> >> which would do whatever was necessary under the hood to allow the
>> >> elements of a to be rebound while still keeping the contents of the
>> >> C objects const.
>> >
>> > I don't care for 'enum' used in this way. It distracts from
>> > (dilutes?) the meaning as an enumerated type.
>> >
>> > How about final?
>> >
>> > final x = 3;
>> > final real y = 7.5;
>> >
>> > 'final' is already a keyword and it's already used to declare one
>> > flavor of const in Java.
>> >
>> > Paul
>> >
>> >
>> That's not bad either. final, alias, macro -- they all make more sense
>> than reusing 'enum' for manifest constants that aren't really
>> enumerating anything.
>>
>> --bb
>
> how about replacing 'enum' with 'def'
>
> def X { A, B, C }
> def { A, B = 5+7, C, D = 8, E }
>
> def int A = 0;
> def int B = 1;
> def int C = 2;
>
> def x = 3;
> def long y = 4;
>
> Then we aren't changing the implementation, just the semantics so that
> they fit the implementation better.
>
> ... thoughts?
You've mentioned this already, but D's already got too many keywords. I
think enum/macro is fine if it's explained in the docs.
Let's not add more keywords, esp. for minimal net benefit.
More information about the Digitalmars-d
mailing list