On Feb 28, 2019, at 4:54 PM, Brian Goetz <brian.go...@oracle.com> wrote:
> 
> 
>> The limitation against T.default can be spun, to many users, as a common 
>> sense
>> error check, against uninitialized variables.  To more curious users, it can 
>> be spun
>> as a conscious reservation for efficient implementations.
> 
> This is justifiable for (most) ref types, but what about numeric types?   I 
> can imagine many potentially-expensive computations that could reasonably sum 
> to zero.  (And as you point out, the smaller the range, the more silly this 
> gets, ending with boolean.)  So if we're going to have this restriction, it 
> should be restricted to class types, and the recommended workaround be some 
> sort of Optional or box.  And given that not all values will be null-default, 
> it rules out any value types for which the zero answer is a reasonable 
> answer.  I think this edge is sharper than it looks.

What I want here can be obtained by forbidding nulls, specifically, for
nullable types, and then doing something different for non-nullable types.

A translation strategy could deal with non-nullable types (like boolean)
by using condy for statics and some other mechanism for non-statics,
such as desugaring the type of the field to a reified Optional<int>.

Would that have fewer sharp edges?

Wrapping an Optional around every nullable non-static reference is
conceivable but that seems to be add a disruptive number of indirections,
and also Optional itself excludes nulls.  We've made the no-null
policy decisions for Optional; let's benefit from it for lazies.

— John

Reply via email to