2014-03-03 46 views

回答

26

其實有兩個以上的工具,但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 /字符串。這對生成代碼片段以動態發送到客戶端非常有用。

主要決定繞圈是這樣的:

  • 如果你想要寫你的Web應用程序的應用斯卡拉的客戶端,如果你想生成JavaScript代碼段使用Scala.js
  • 從用Scala編寫服務器端代碼,使用JScala

A的這兩個工具更詳細的比較,請http://www.sebnozzi.com/84/scala-to-javascript-comparison/

8

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/

+1

我覺得OP我螞蟻http://jscala.org/。你也可以覆蓋那個嗎?無論如何感謝信息 - 瞭解另一個類似的圖書館是非常有趣的! –

+0

@EugeneBurmako我也這麼認爲。看到我的答案與JScala進行比較。 – sjrd

相關問題