[just talk] what if implicitly typed literals were disallowed
Adam D. Ruppe
destructionator at gmail.com
Wed Oct 24 16:06:16 PDT 2012
On Wednesday, 24 October 2012 at 19:04:59 UTC, H. S. Teoh wrote:
> literals should NOT be assigned a type beforehand; the
> compiler should always look for the best fit in the given
> context first, and THEN if nothing else says anything more
> about the type, fall back to the default type.
Yup. I actually thought D was already doing some of this tbh.
Heck maybe it is.
I was just focusing on complete customization there. But another
thing I'd like is for literals to be infinitely sized until
context forces it down.
So if you were to write some enormous literal like 2^70 that
should work, then range checks say "hey too big" if you try to
assign it to a long or otherwise work on it.
But if we had the illusion of infinite size at compile time we
could do magic like bigint literals by breaking up a huge number
in CTFE (which should prolly have well defined endianness so your
ctfe bitops can make sense).
> Anyway, on a related topic: another thing that irks me about D
> literals is that there is sometimes unexpected implicit copying.
Aye. Don has talked about this before. I disagree that [] should
be disallowed on non-static data (something IIRC he wants to make
it a clear literal, removing the need for any runtime stuff at
all), but if it is static, it certainly should act that way too.
I guess one benefit of [] being defined to be compile time is it
could be an implicit CTFE force:
auto a = [foo(), 10]; // eval foo as if this was an enum, failing
to compile if it can't do it
But I really like the convenient syntax of [] on runtime
variables. We could say array() instead or whatever but meh, it'd
still be annoying when the code breaks.
More information about the Digitalmars-d
mailing list