shebang_Shebang来Java了吗?
shebang
盡管添加對(duì)Unix風(fēng)格的shebang ( #! )的支持從來不是 JEP 330 [“啟動(dòng)單文件源代碼程序”]的主要目標(biāo),但圍繞JEP 330“單個(gè)文件源程序”的潛在功能存在一些問題。為了支持Unix風(fēng)格的shebang ,在OpenJDK jdk-dev郵件列表上引起了廣泛的討論。 這場(chǎng)“激烈的討論”導(dǎo)致Mark Reinhold在JEP 330 的審查期 (現(xiàn)在是5月31日結(jié)束)上增加了一周時(shí)間 ,以便就JDK 330的目標(biāo)JEP 330進(jìn)行進(jìn)一步的討論。
盡管對(duì)于是否應(yīng)該添加shebang支持仍然存在一些分歧 ,但似乎共識(shí)已轉(zhuǎn)移到一個(gè)提案,以明確區(qū)分常規(guī)的獨(dú)立于平臺(tái)的Java源代碼文件(以擴(kuò)展名.java結(jié)尾)和新的。 JEP 330“可執(zhí)行”的平臺(tái)特定的“單文件源代碼程序”。 明顯的區(qū)別是值得注意的,因?yàn)樗试S將Shebang表示在后者中(JEP 330可執(zhí)行平臺(tái)特定的單文件源代碼程序),而不能在前者中使用(我們所使用的傳統(tǒng)Java平臺(tái)無關(guān)的源代碼)。都習(xí)慣了)。
在此討論中, 喬納森·吉爾斯 ( Jonathan Giles)的一條消息指出“不想更改JLS或javac的各種原因”,并指出“ shebang腳本是在某些(但不是全部)平臺(tái)上定義的可執(zhí)行格式,”指出“創(chuàng)建一個(gè)shebang腳本通常不只是在文件中添加第一行。”還闡明了在傳統(tǒng)Java源代碼和JEP 330可執(zhí)行Java腳本之間進(jìn)行顯式區(qū)分的概念:
雖然將文件重命名為命令友好名稱是可選的,但也希望將其重命名。 例如,名為“ HelloWorld.java”的源文件可能被安裝為“ helloworld”。 而且,盡管JEP描述了使用`java HelloWorld.java`執(zhí)行小型單文件程序或僅使用`helloworld`作為特定??于平臺(tái)的shebang腳本執(zhí)行的用例,但似乎并沒有常見的用例執(zhí)行`HelloWorld.java`。 因此,如果通常將shebang腳本重命名為命令友好名稱,則將無法使用“ javac helloworld”直接對(duì)其進(jìn)行編譯,因?yàn)檫@對(duì)于Javac而言不是有效的命令行。 這降低了使javac忽略shebang行的任何潛在便利。
由于Java源文件與特定于平臺(tái)的可執(zhí)行腳本是不同的工件,因此有區(qū)別地對(duì)待它們是有道理的,并且由于我們不想更改Java語言以支持shebang行,因此建議修改JEP和實(shí)現(xiàn),以便shebang絕不會(huì)從Java源文件(即以`.java`結(jié)尾的文件)中刪除行。 這就避免了處理Java源文件的工具生態(tài)系統(tǒng)必須處理諸如shebang行之類的任意工件的問題。 所做的更改仍將允許直接執(zhí)行Java源文件(如java HelloWorld.java)和執(zhí)行shebang腳本(如helloworld)。
下表總結(jié)了與每種“ Java”文件樣式相關(guān)的特征和優(yōu)點(diǎn)。
| 內(nèi)容描述 /名稱 | “ Java源文件(以.java擴(kuò)展名結(jié)尾) ” | “ 可執(zhí)行腳本(不使用[ .java ]擴(kuò)展名。) “ |
| “ Java源文件 ” | “ shebang腳本 “ | |
| “ Java源文件 ” | “ 包含Java代碼的腳本 ”或“ 特定于平臺(tái)的可執(zhí)行腳本 ” | |
| “ Java源文件,由以'.java'結(jié)尾的文件名標(biāo)識(shí) ” | ||
| 舍邦 | 不支持 | 支持的 |
| 平臺(tái) | 獨(dú)立 | 依附 |
| 顯式編譯 | 是 | 沒有 |
喬納森·吉本斯(Jonathan Gibbons)總結(jié)了JEP 330的意圖 :“這里的總主題不是將Java演變?yōu)槟_本語言,而是使諸如Java啟動(dòng)器之類的工具更友好,以便支持在可執(zhí)行文本文件中使用Java源代碼。以減少運(yùn)行簡單程序的儀式。”
討論還涵蓋了其他方法,例如binfmt_misc (另請(qǐng)參見此處 ),Unix風(fēng)格的“ here文檔 ”( 此處定義文檔 ),“ 在Java啟動(dòng)器中支持'-'STDIN源 ”以及將Linux更改為支持“ la”。 -la-bang: //! 。
討論中另一個(gè)有趣的旁注是Brian Goetz 對(duì)JEP 330如何達(dá)到其當(dāng)前狀態(tài)的“追溯” 。 他談到了導(dǎo)致人們意識(shí)到的“無數(shù)小時(shí)的傾聽人們對(duì)Java的關(guān)注”,“人們表達(dá)關(guān)注的一個(gè)普遍主題是'激活能量'; 用Java做簡單的事情需要太多的固定工作。” Goetz指出,JShell和JEP 330是解決此問題的許多可能方法中的兩種,并且這兩種方法是在考慮“成本(在多個(gè)維度上)”后做出“關(guān)于哪種方法影響最大的主觀選擇”之后,從眾多方法中選擇的。做出這些選擇時(shí)的收益和利益(或我們對(duì)收益的主觀估計(jì))。”
因此,“常規(guī)Java”源代碼文件將不會(huì)得到shebang的支持,但這并不是什么大問題,因?yàn)樗鼈兇_實(shí)不需要它們。 但是,用Java編寫的基于JEP 330的基于平臺(tái)的可執(zhí)行單文件腳本似乎將在第一行中支持可選的shebang。 我們可能會(huì)在本周四之前知道JEP 330是否將針對(duì)JDK 11。
翻譯自: https://www.javacodegeeks.com/2018/05/shebang-coming-java.html
shebang
總結(jié)
以上是生活随笔為你收集整理的shebang_Shebang来Java了吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深耕海外!传音TECNO成非洲杯独家手机
- 下一篇: Redmi K70系列细节曝光:最早11