Thoughts on unified integer literal improvements
Bruce Chapman
brucechapman at paradise.net.nz
Thu May 28 03:42:33 PDT 2009
Joe Darcy wrote:
> Hello.
>
> On the set of improved integer literal features, I think combining the
> underscores as separators and binary literals is straightforward given
> separately correct grammars for each change.
>
> As an alternate to "y" and "s" suffices, I suggesting considering a
> "u" suffix to mean unsigned. Literals with a trailing "u" would have
> type int; widening conversions of such literals would 0 extend and
> narrowing conversions would range check on the width of set bits. For
> example,
>
Doesn't that idea has some problems introducing it into the language and
type system?
if it is "Literals with a trailing "u" would have type int;" then the
type is int, and the value just the same as for when there was no
suffix. If the widening and narrowing changes behaviour for these
literals only, how can this be done unless these literals are of some
new type, or the type system knows about the notation used to declare
the value? And if we can have unsigned ints surreptitiously like this,
then lets have unsigned byte as well, and unsigned byte arrays. Yeeha -
now I'm really happy. :)
But taking that idea, and combining it with the autosizing integer
literal proposal such that we use the "u" suffix to denote autosizing
(rather than only having it work for hex literals with the 0h prefix),
now that might fly, and could work for decimal and octal and binary as well.
I'll have to do some more thinking thru on this, and now is not an ideal
time for me.
> byte b = 0xABu // equivalent to (0xAB & 0xFF)
do you mean // equivalent to (byte) 0xAB ? (because (0xAB & 0xFF) is
already equivalent to 0xAB)
>
> long ell = 0xFFFFFFFFu; // A positive long value
but
int hell = 0xFFFFFFFFu; // -1 ???
>
> I think this approach has some advantages over the "y" suffix; in
> particular I think it gives more desirable behavior in cases like this:
>
> byte b = 0xFFy // a negative byte value
> byte b = 0xFFu // also a negative byte value
>
>
> short s = 0xFFy // a negative short value, -128;
> // byte value is signed extended
> short s = 0xFFu // a positive short value, +127
do you mean // a positive short value, +255?
>
> int i = 0xFFy // -128
> int i = 0xFFu // 127
>
> -Joe
>
Bruce
More information about the coin-dev
mailing list