InfoQ專訪Oracle Java語言架構師Goetz:在Java中引入連字符關鍵字

Brian Goetz是Oracle的Java語言架構師,他一直在追求Java語言的生產率和性能。Alex Buckley是Oracle的Java語言和Java虛擬機的規範主管。他們兩個提出了一組帶連字符的關鍵字

正如在JDK-8223002中規定的,實現連字符關鍵字的目標是:

  • 面向Java編程人員的新功能語法。
  • 解決關鍵字變得非常稀缺的永恆問題。
  • 給Java語言設計人員提供不同類型的關鍵字樣式建議。

近幾年來,有些技術已被用於發展Java語言的關鍵詞演化:

[a] 支配權 (eminent domain)—— 把標識符重新分類爲關鍵字(比如Java 1.4中的assert和Java 1.5中的enum);
[b] 重載 —— 把已有的關鍵字重新用於新功能;
[c] 變體(distort) —— 使用現有關鍵字創建語法(如@interface);
[d] smoke and mirrors —— 在不同上下文中使用新關鍵字創建一個語法糖 (如var限於局部變量)。

在某種程度上,這些關鍵詞技術都有一些問題。比如,添加assert作爲關鍵字幾乎破壞了所有測試框架,因爲導致了關鍵字、標識符衝突。

所以,採用帶連字符的關鍵字將彌補現有的關鍵詞技術,並將使用現有的類和/或上下文關鍵字的組合。類關鍵字是“一串字母,這些字母總是被標記爲關鍵字,而不是標識符。”上下文關鍵字是“一串字母,這些字母只有在特定上下文中才被標記爲關鍵字,但是在其他上下文中被標記爲標識符。”潛在的帶連字符的類關鍵字的將包括:non-final、break-with和value-class。潛在的帶連字符的上下文關鍵字包括:non-null、read-only和eventually-true。

實現帶連字符的關鍵字的挑戰之一是詞法分析器如何把a-b類的表達式解析成3個令牌(標識符、操作符、標識符)或解析爲帶連字符的關鍵字。

今年早些時候的一場OpenJDK電子郵件討論建議,爲JKD 13(計劃於2019年9月發佈)引入 break-with連字符關鍵字。但是,最終決定放棄break-with關鍵字,改用新的關鍵字yield,並重新預覽switch表達式。新的switch表達式結構的最終定稿爲引入模式匹配概念掃清道路,而這個概念已經討論了近兩年時間,終於落地了。

Goetz和Buckley對帶連字符的關鍵字的優缺點進行了評論:

出於簡單的緣故而不使用Java的新功能是沒有問題的;新的關鍵詞是Java語言發展過程中經常遇到的問題和學習成本。

不再產生新的關鍵字也是一個方法,即完全停止Java語言的演進。儘管有些人認爲這個主意不錯,但是,因爲缺乏可用關鍵詞而這麼做是愚蠢的。Java還有很長的路要走,Java開發人員對新的功能感到很興奮,這些新功能使他們能夠編寫更富表現力和更可靠的代碼。

Goetz向InfoQ介紹了這些帶連字符的關鍵字的提議:

InfoQ:對於Java語言中的帶連字符的關鍵字,社區有什麼反應?

Brian Goetz:正如你所預料的,已經影響了整個社區。有些人很高興地看到,在如何最好地發展Java成爲一種成熟語言方面,我們所付出的心血;其他人則抱怨道,我們把糾纏於研究細小的但沒有多大實用意義的關鍵詞問題,寧願我們花時間去研究他們感興趣的功能。

InfoQ:如果帶連字符的關鍵字提案不被接受,那麼,現有的這些關鍵詞技術,“支配權”、“重載”、“變體”和“僞關鍵字 有多大可能會再用於擴展Java語言中的關鍵字集?

Goetz:我把它看作是個可選項,在裏面添加了一個有趣且靈活的新選項。但是,在任何給定的情況下,其他選項可能仍然是更好的。我們不排除任何可能性,如提案不被接受。

InfoQ : 根據JEP 354,提議的break-with帶連字符的關鍵字被放棄了,改用JDK 13的新關鍵字yield。是什麼導致決定不使用Java語言break-with關鍵字呢?

Goetz:break-with關鍵詞提出很早,但是,人們仍然覺得很麻煩且不明確。可選項上有帶連字符的關鍵字,但是,這並不意味着我們必須都使用它。總的來說,人們發現yield更自然(當然,有些人不喜歡它,因爲它提醒他們要從協程返回一個值)。結果表明,yield是這個上下文的合理關鍵字。

InfoQ : Java按照6個月的發佈週期發展地越來越快了,那麼,帶連字符的關鍵字最終引入Java語言的可能性有多大?

Goetz:當我們需要的時候,它就會出現在可選項上。

InfoQ:關於帶連字符的關鍵字,您希望我們的讀者知道的最重要的信息是什麼?

Goetz:我們非常重視Java語言兼容性,同時,我們努力保持Java代碼的可讀性,並在兩者之間進行平衡。

資料來源:

InfoQ就Java的模式匹配對Brian Goetz的採訪錄(InfoQ,2017年9月17日)

Brian Goetz發佈的《break-with》(2019年1月17日)

Alex Buckley發佈的《Java語言關鍵字管理》(2019年4月25日)

原文鏈接:

Brian Goetz Speaks to InfoQ about Proposed Hyphenated Keywords in Java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章