答案 0 :(得分:28)
实际上有两个以上的工具,但Scala.js和JScala确实是仍在积极开发中的两个工具。
区别在于:Scala.js是从Scala到JavaScript的编译器,而JScala是一个基于宏的DSL,用于生成JavaScript代码片段。
正如@Gaurav在他的回答中解释的那样,Scala.js是常规的Scala编译器,但它会发出JavaScript代码而不是JVM字节码。您编写的Scala代码永远不会由JVM运行。您的所有Scala代码都已转换为JavaScript。因此,它支持整个Scala语言,包括例如集合库。这对于将整个客户端编写为Scala应用程序非常有用。
另一方面,使用JScala,大多数应用程序(至少调用javascript
宏之外的所有内容)仍然在JVM上运行。宏将其中的Scala代码重写为相应的JavaScript AST(或直接作为代码字符串)。这意味着当JVM在那里执行代码时,程序会生成(在运行时)JavaScript AST /字符串。这对于生成要动态发送到客户端的代码片段非常有用。
因此,主要的决定标准是:
答案 1 :(得分:8)
js-scala是用于生成JavaScript代码的Scala库,而scala.js是Scala编译器的JavaScript后端。
scala.js将您的Scala代码编译为JavaScript代码。它只是通常的Scala编译器,它可以获取Scala源文件并生成JavaScript代码而不是JVM字节码。
<强> .scala | === scalac ===&gt; |的.js 强>
另一方面,js-scala是一个Scala库,提供可组合的JavaScript代码生成器。您可以在通常的Scala程序中使用它们来编写JavaScript程序生成器。使用通常的Scala编译器将Scala程序编译为JVM字节码,并执行该程序生成JavaScript程序。
<强> .scala | === scalac ===&gt; | .class | === java ===&gt; |的.js 强>
有关详细信息,我推荐js-scala http://julien.richard-foy.fr/blog/2013/12/19/js-scala-and-scala-js/的作者之一的readint博客