任何人都可以告訴我(或指示某種來源)的編譯方式斯卡拉發生。編譯斯卡拉
我有一些疑惑,例如,
- 在編譯步驟,如何斯卡拉編譯Java相關的東西?它是否單獨使用Java編譯器?
.scala
的最終字節碼是否與Java的.class
文件相同?- 由於Sun收購Oracle,JVM是否也屬於Oracle?
- 如果有一天JVM獲得了專有軟件,那麼是否也會影響到Scala?
任何人都可以告訴我(或指示某種來源)的編譯方式斯卡拉發生。編譯斯卡拉
我有一些疑惑,例如,
.scala
的最終字節碼是否與Java的.class
文件相同?如果您願意,您可以查看compiler source code,但如果您想查看Martin Odersky's presentations on the compiler internals,則可能會提供更多信息。
在回答您的具體問題:
scalac
的早期版本不會這樣做,並且需要您先運行javac
;但scalac可以compile Java files using javac where needed since 2.7.2。Scala不編譯Java。它足夠了解Java,找出這些類的API是什麼,但僅此而已。
它期望你用java編譯器編譯你的java文件。
是的。 Scala生成有效的.class文件。但是,將該文件轉換爲Java代碼是不可能的,因爲有效的類文件允許Java不允許或不能代表的東西。
沒有「the」JVM。現有的JVM有很多,實際上,Oracle有自己的專有JVM。當然,Sun的JVM現在是Oracle的。
一直存在着許多專有的JVM,從甲骨文就是其中之一。
讓我們考慮一個假設的「最壞情況」情形:世界上的所有JVM都變成許可(付費)產品或不復存在。當然,斯卡拉仍然可以在Dalvik虛擬機上運行,但是讓我們假設它也會被支付或不復存在。
在這種情況下,斯卡拉仍然可以仍然繼續存在,但你必須支付能夠運行用Scala編譯的程序。事實上,由於Scala是一個JVM程序,你甚至不得不付出代價才能使用編譯器!
或者,斯卡拉可以分支到一些其他目標平臺。斯卡拉現在有這樣的努力,但絕對沒有壓力讓他們生產級。如果有必要,它會完成。
嗨,丹尼爾!非常感謝您的好回饋。玩得開心! – Channa
「屬性」是什麼意思?您的意思是「獲得屬性」,如「對bean屬性的第一級支持」一樣? –
他的意思是「成爲專有軟件」,例如,需要付費許可證。 – pcalcao