2017-10-20 49 views
-2

如果我們想要確保我們的代碼在所有瀏覽器版本中運行,我們可以使用Babel。有沒有像Java這樣的東西,我們可以在Java 9中編寫我們的代碼,但它會運行在Java 6運行時?是否存在類似Java的Babel編譯器?

例如,Kotlin可以針對多個JVM運行時版本嗎?

+0

根據我們[在話題](https://stackoverflow.com/help/on-topic)的指導意見「 **有些問題仍然存在問題,即使它們符合上面列出的某個類別:** ...問題要求我們*推薦或找到書籍,工具,軟件庫,教程或其他非現場資源*無題...「 –

+0

不知道爲什麼所有的downvotes,這是@羅伯特哥倫比亞指出的經驗法則的合法例外:由於Java(不像Javascript)是靜態類型,你想檢查的是,你的代碼*編譯*既適用於Java 6也適用於Java 9.嗯,幸運的是你:) Java 9的編譯器具有標誌,允許您根據兼容性獲取警告或中斷。有關詳細信息,請參閱:https://docs.oracle.com/javase/9​​/migrate/toc.htm#JSMIG-GUID-6FB24439-342C-496E-9D99-5F752528C7B1 – alfasin

+0

@alfasin即使您的代碼在兩個版本中編譯,你怎麼知道它做同樣的事情? –

回答

3

我一直希望像Kotlin那樣瞄準多個JVM運行時 - 我想我們現在只需要做夢。

您可以將Kotlin代碼編譯爲JDK6,JDK7,JDK8,JDK9或JDK6以上的任何JDK。這就是支持Java 1.6級別字節碼的含義。除了需要不同JDK版本的庫之外,Kotlin的所有功能都將保持不變。

Kotlin生成的字節碼通常會保持不變,而與目標JVM版本無關。例外情況是,如果您設置編譯器選項jvmTarget = "1.8",那麼編譯器可能(或不可能)使用JDK8的某些功能作爲優化。

恕我直言,這個問題得到了所有的缺點,因爲它有多麼意外。像Babel這樣的工具對於JavaScript來說是獨一無二的,因爲在所有其他語言中它們被稱爲編譯器由於JS認爲它可以在沒有編譯器的情況下完成,我在部署時遇到了這樣的問題。 Java的後端移植工具(非常有限),但它們只是編譯器的插件。 Kotlin沒有任何功能,因爲它的開發獨立於JDK,並且必須支持1.6以上的所有以前的JDK版本。綜上所述,如果您使用Kotlin進行JVM或JS開發,您的夢想就會實現 - 您可以使用任何版本的Kotlin,任何JVM庫,可能位於ES5.1之上的任何JS庫,並獲得一致運行時表示。