有兩種工具可以在JavaScript中正確編譯Scala代碼:Scala.js和JScala。 它們都很好看,可以使用非平凡的Scala代碼。scala.js vs jscala和有什麼不一樣?
他們之間有什麼技術區別?
有兩種工具可以在JavaScript中正確編譯Scala代碼:Scala.js和JScala。 它們都很好看,可以使用非平凡的Scala代碼。scala.js vs jscala和有什麼不一樣?
他們之間有什麼技術區別?
其實有兩個以上的工具,但Scala.js和JScala確實是2個工具仍在積極發展。
區別在於:Scala.js是從Scala到JavaScript的編譯器,而JScala是用於生成JavaScript代碼片段的基於宏的DSL。
正如@Gaurav在他的回答中解釋的,Scala.js是常規的Scala編譯器,但它發出JavaScript代碼而不是JVM字節碼。您編寫的Scala代碼永遠不會被JVM運行。所有的Scala代碼都被翻譯成JavaScript。出於這個原因,它支持整個Scala語言,包括例如集合庫。將整個客戶端編寫爲Scala應用程序非常有用。
另一方面,使用JScala,大部分應用程序(至少除了調用javascript
宏之外的所有內容)仍然在JVM上運行。宏將其內部的Scala外觀代碼重寫爲相應的JavaScript AST(或直接作爲代碼字符串)。這意味着當JVM在那裏執行代碼時,程序會生成(在運行時)JavaScript AST /字符串。這對生成代碼片段以動態發送到客戶端非常有用。
主要決定繞圈是這樣的:
A的這兩個工具更詳細的比較,請http://www.sebnozzi.com/84/scala-to-javascript-comparison/
js-scala是一個用於生成JavaScript代碼的Scala庫,而scala.js是Scala編譯器的JavaScript後端。
scala.js將您的Scala代碼編譯爲JavaScript代碼。它只是通常的Scala編譯器,它會接收您的Scala源文件並生成JavaScript代碼而不是JVM字節碼。
.scala | === scalac ===> | .js
另一方面,js-scala是一個提供可組合JavaScript代碼生成器的Scala庫。您可以在通常的Scala程序中使用它們來編寫JavaScript程序生成器。您的Scala程序使用通常的Scala編譯器編譯爲JVM字節碼,並執行此程序生成JavaScript程序。
.scala | === scalac ===> | .class | === java ===> | .js文件
進一步的細節,我建議博客的readInt通過JS-斯卡拉的作者之一http://julien.richard-foy.fr/blog/2013/12/19/js-scala-and-scala-js/
我覺得OP我螞蟻http://jscala.org/。你也可以覆蓋那個嗎?無論如何感謝信息 - 瞭解另一個類似的圖書館是非常有趣的! –
@EugeneBurmako我也這麼認爲。看到我的答案與JScala進行比較。 – sjrd