【问题标题】:What is the difference between scala.js vs jscala?scala.js 与 jscala 有什么区别?
【发布时间】:2014-04-04 00:27:53
【问题描述】:

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

它们之间的技术区别是什么?

【问题讨论】:

    标签: javascript scala scala.js


    【解决方案1】:

    其实不止两个工具,但 Scala.js 和 JScala 确实是两个仍在积极开发中的工具。

    根本区别在于:Scala.js 是从 Scala 到 JavaScript 的编译器,而 JScala 是基于宏的 DSL,用于生成 JavaScript 代码的 sn-ps。

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

    另一方面,使用 JScala,您的大部分应用程序(至少在调用 javascript 宏之外的所有内容)仍然在 JVM 上运行。该宏将其内部看起来像 Scala 的代码重写为相应的 JavaScript AST(或直接作为代码字符串)。这意味着当 JVM 在那里执行代码时,程序会(在运行时)生成一个 JavaScript AST/字符串。这对于生成要动态发送到客户端的代码的 sn-ps 很有用。

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

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

    http://www.sebnozzi.com/84/scala-to-javascript-comparison/ 上提供了这两种工具的更详细的比较

    【讨论】:

      【解决方案2】:

      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

      更多详情,我推荐阅读 js-scala 的作者之一的博客 http://julien.richard-foy.fr/blog/2013/12/19/js-scala-and-scala-js/

      【讨论】:

      • 我认为 OP 的意思是 jscala.org。你能把那个也包括进去吗?无论如何,感谢您提供的信息 - 了解另一个类似的库非常有趣!
      • @EugeneBurmako 我也这么认为。请参阅我的答案以与 JScala 进行比较。
      猜你喜欢
      • 1970-01-01
      • 2011-02-19
      • 2013-03-14
      • 2018-09-14
      • 2014-01-03
      • 2021-12-22
      • 2017-10-25
      • 2011-06-09
      • 2021-05-11
      相关资源
      最近更新 更多