In the recent posts titled "We need more keywords, captain!" on the OpenJDK amber-spec-experts mailing list, Brian Goetz "proposes a possible move that will buy us some breathing room in the perpetual problem where the keyword-management tail wags the programming-model dog." His proposal is to "allow _hyphenated_ keywords where one or more of the terms are already keywords or reserved identifiers."
Goetz points out in the original post that Section 3.9 ("Keywords") of the Java Language Specification spells out the current keywords in Java and that these chosen keywords have been stable since Java's inception with the only changes being the addition of the highlighted keywords shown below (assert
in JDK 1.4, enum
in JDK 1.5, and _
in JDK 1.9):
abstract continue for new switch assert default if package synchronized boolean do goto private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while _ (underscore)
Goetz's post writes about "several tools at our disposal" that have been or could be used when the set of pre-established keywords are not "suitable for expressing all the things we might ever want our language to express." Goetz emphasizes this point, "The lack of reasonable options for extending the syntax of the language threatens to become a significant impediment to language evolution."
Goetz provides significant background explanation regarding the downsides of the "several tools" he had mentioned earlier in the post and states, "We need a new source of keyword candidates." Goetz then proposes to "allow _hyphenated_ keywords where one or more of the terms are already keywords or reserved identifiers."
The Goetz post provides several examples to illustrate hyphenated keywords and how they might be used. Goetz emphasizes that this list is not in any way proposing these specific keywords for now, but is only providing them as illustrative examples. See the original post for brief descriptions of how some of these illustrative examples might be used.
non-null
non-final
package-private
public-read
null-checked
type-static
default-value
eventually-final
semi-final
exhaustive-switch
enum-class
annotation-class
record-class
this-class
this-return
Two other posts on the mailing list have already built on this original message. In a reply to his own message, Goetz writes that the expression switch could have (or still might be able to because switch expressions are currently a Preview Feature) support a keyword such as break-with
rather than requiring developers to "disambiguate whether [a given break
is a] labeled break
or a value break
." Guy Steele replied that he prefers break-return
to break-with
and that this particular single illustrative example "has [maybe] won me over to the idea of hyphenated keywords."
The Goetz post "We need more keywords, captain!" has seen some attention on Twitter as well. Sander Mak tweeted, "Another example of real-world programming language design by @BrianGoetz: http://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-January/000945.html ... Love the diligence and forward-looking nature of these #Java language design discussions." Bruno Borges tweeted a quote from that same post: "We are convinced that @Java has a long life ahead of it, and developers are excited about new features that enable to them to write more expressive and reliable code."
The hyphenated keyword approach seems promising. Regardless of what happens, the Goetz post makes for an interesting read regarding the difficulty of adding or reapplying keywords to a long-lived programming language concerned about backwards compatibility. The post is also offers a peek into the types of issues, constraints, and trade-offs language designers must make.
5 comments:
The keyword short-circuit has been proposed since the original message.
Potential new keywords break-with (for lambda expressions), break-to (for breaking to label), and break-from (breaking from innermost for, while, or do) have also been proposed to stimulate discussion.
Alex Buckley has introduced a "Draft JEP: Keyword Management for the Java Language" on the OpenJDK jdk-dev mailing list and stated in that post: "Evolving the Java language often means new keywords for new features, but new keywords risk breaking existing programs. In the Project Amber expert group, Brian Goetz suggested a technique for generating new keywords that balances compatibility and readability -- _hyphenated keywords_." The post includes a link to the draft JEP JDK-8223002.
"Brian Goetz Speaks to InfoQ on Proposed Hyphenated Keywords in Java" was posted today.
A Brian Goetz post on the amber-spec-experts mailing list discusses the potential addition (theoretical at this point) of keyword only-if for use with patterns in switch.
Post a Comment