scala.js和jscala有什么区别?

时间:2014-03-03 04:19:09

标签: javascript scala scala.js

有两种工具可以直接在JavaScript中编译Scala代码:Scala.jsJScala。 它们看起来都很棒,并且可以使用非平凡的Scala代码。

它们之间有什么技术差异?

2 个答案:

答案 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 /字符串。这对于生成要动态发送到客户端的代码片段非常有用。

因此,主要的决定标准是:

  • 如果要将Web应用程序的客户端编写为Scala应用程序,请使用Scala.js
  • 如果要从Scala编写的服务器端生成JavaScript代码片段,请使用JScala

http://www.sebnozzi.com/84/scala-to-javascript-comparison/

可以对这两种工具进行更详细的比较

答案 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博客