Draft JEP: Incubating Language and VM Features
Joseph D. Darcy
joe.darcy at oracle.com
Mon Jan 22 22:55:42 UTC 2018
On 1/19/2018 5:04 PM, Alex Buckley wrote:
> "Incubation is not a mechanism for experimentation and risk-taking."
> An incubating feature has evolved beyond a successful experiment.
> We're sure enough of its scope and quality to commit it to the Java SE
> Platform. Any number of the mature language features in recent years
> could have been incubated to get that last ounce of feedback from
> developers. Yes, we have to admit the possibility that an incubating
> feature might be dropped -- "Sounds like a failed experiment!", I hear
> you cry -- but there is no sense with an incubating feature of
> tinkering, rough edges, version 0.1 quality, unsupported status, etc.
I'd like to illustrate the benefits of an incubator for language
features using the development of one of the Project Coin features,
The try-with-resources statement was the largest of the Coin features.
In August of 2010, early access builds JDK 7 had a full implementation
of the try-with-resources feature, with a detailed specification,
compiler implementation, and library support. Feedback on using the
feature was solicited on various channels. 
The most substantial feedback came five months later about null handling
of the statement.  (HT Rémi) The following month, after due
consideration the expert group for JSR 334 decided to change the null
handling semantics as suggested. 
JDK 7 was a multi-year release and could accomodate and act on feedback
provided several months after a production-quality implementation of the
feature was available for use. However, the timeline of feedback above
would of course be problematic to act on within a six-month release cycle.
Without an incubation facility, with a six-month release cycle it is
unlikely feedback received at that relative time could be reflected in
the GA build. That would leave two general options: live with the
suboptimal original semantics of the feature or, in a future release,
make an incompatible change to the language feature, one of the kinds of
changes the platform has generally avoided.
An incubation facility provides a helpful path to offer solid features
for feedback before all the details need be written in stone.
More information about the jdk-dev