Scala.js和JScala有什么区别?

20

有两个工具可以在 JavaScript 中编译 Scala 代码:Scala.jsJScala。这两个工具都非常出色,可以处理不太简单的 Scala 代码。

它们之间的技术差异是什么?

2个回答

29

实际上,除了Scala.js和JScala之外还有更多工具,但Scala.js和JScala确实是两个仍在积极开发中的工具。

它们之间的区别是根本性的:Scala.js是从Scala到JavaScript的编译器,而JScala是用于生成JavaScript代码片段的基于宏的DSL。

正如@Gaurav在他的答案中解释的那样,Scala.js是常规Scala编译器,但它将其输出为JavaScript代码而不是JVM字节码。您编写的Scala代码永远不会由JVM运行。所有您的Scala代码都被翻译成JavaScript。因此,它支持整个Scala语言,包括例如集合库。这对于将整个客户端作为Scala应用程序编写非常有用。

另一方面,使用JScala,至少在调用javascript宏之外的大部分应用程序仍在JVM上运行。该宏将其中的Scala-looking代码重写为相应的JavaScript AST(或直接作为代码字符串)。这意味着当JVM执行代码时,该程序会动态生成一个JavaScript AST/字符串。这对于生成要动态发送到客户端的代码片段非常有用。

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

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

有关这两个工具的更详细比较可在http://www.sebnozzi.com/84/scala-to-javascript-comparison/上找到。


8

js-scala是一个Scala库,用于生成JavaScript代码,而scala.js是Scala编译器的JavaScript后端。

scala.js将您的Scala代码编译为JavaScript代码。它只是通常的Scala编译器,它接受您的Scala源文件并生成JavaScript代码,而不是JVM字节码。

.scala| === scalac ===> | .js

另一方面,js-scala是一个Scala库,提供可组合的JavaScript代码生成器。您可以在通常的Scala程序中使用它们来编写JavaScript程序生成器。使用通常的Scala编译器将您的Scala程序编译为JVM字节码,并执行此程序会生成JavaScript程序。

.scala| === scalac ===> |.class | === java ===> | .js

如需更多详细信息,建议阅读js-scala作者之一的博客http://julien.richard-foy.fr/blog/2013/12/19/js-scala-and-scala-js/


1
我认为OP指的是http://jscala.org/。您能否也介绍一下这个库?无论如何,感谢您提供的信息 - 很有趣了解另一个类似的库! - Eugene Burmako
@EugeneBurmako 我也是这么认为的。请看我的回答,与 JScala 进行比较。 - sjrd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接