valhalla-dev Digest, Vol 6, Issue 3

Peter Levart peter.levart at
Mon Dec 22 01:08:09 UTC 2014

On 12/21/2014 05:47 PM, Brian Goetz wrote:
>> 4) Map<int>.get() and "sentinel values"
>> --------------------------------------------------------
>> - null is a moderately good "sentinel value" for objects, but zero is 
>> not
>> so good for numbers;
>> - similar to the 'T.empty' syntax proposed above,  I propose a 
>> 'T.sentinel'
>> syntax for "no element".
>> eg, int.sentinel references -1, Object.sentinel references null.
> The reason int can't be null is that we have no natural and efficient 
> hardware representation for it; all 2^32 values in an 32-bit integer 
> are used for integers.  So changing the syntax from "null" to 
> "sentinel" doesn't help -- the real problem is, how do we represent 
> it?  Ballooning all integers to 64 bits just to accommodate a special 
> value is not going to fly.  And stealing "-1" as the "not to be used 
> as an int" value similarly doesn't fly; -1 is also an important integer.
> Applications and APIs are free to cut corners like "let's let -1 mean 
> 'no value'", but languages and VMs are not free to do this. 


What happened to Optional?

If Optional could be morphed into a value type AND be specialized at the 
same time, then returning Optional<int> from Map<K, int>.getOptionaly(k) 
would be the right thing to do.


More information about the valhalla-dev mailing list