[External] : Re: Making Object abstract
Brian Goetz
brian.goetz at oracle.com
Sat May 8 17:02:53 UTC 2021
> We're in complete agreement on needing to support it at the bytecode
> level. The part I'm unclear on is why that requires continuing to
> allow `new Object()` at the source level. Removing it is, of course,
> a source incompatible change with all its attendant pain, but it
> results in the simpler model as suggested by Dan Smith and allows
> making Object abstract.
I agree that if we were starting from scratch, making Object abstract
would be the sensible choice. But there's just sooooooo much code that
does at least one `new Object()` at the source level, and this seems a
questionable place to spend our incompatibility budget. We don't want
people's first experience of Valhalla -- before they even know what it
is -- to be "nothing compiles anymore." That's a way to get started on
the wrong foot.
We can certainly discourage it by warning ("please use
Object.newInstance() instead"), and start the migration early (we can
start by adding Object::newInstance now, and add to the set of
pre-valhalla optional warnings), but it seems like too big a leap to
start erroring on `new Object()` immediately.
> Continuing to allow `new Object()` at the source level will encourage
> puzzlers and confusion as expressions like this will be false only for
> Object:
> ```
> new Object().getClass() == Object.class
> ```
> Isn't it better to make this illegal at the source level so the code
> says what it means?
>
> My (non-exhaustive) examination of uses of `new Object()` in code
> bases I've looked at (which is a small, jvm-centric set of uses) tend
> to fall into two buckets:
> * tests generating objects to validate GCs occur, metrics report
> additional allocations or free space correctly. None of these cases
> care about the Object itself. It's just something to occupy heap
> space.
> * allocating a unique object to use as a lock
>
> Is there some other pattern that suggests keeping `new Object()` at
> the source level is worth the special cases in the model?
>
> --Dan
Most cases are the lock. And while Joe Java doesn't write this that
often, nearly every library has this once or twice.
So, I agree on the goal, I guess I don't think we can get there in one
go without avoidably burning some goodwill.
More information about the valhalla-spec-observers
mailing list