【问题标题】:How does the ClojureScript compiler transform cljs to JavascriptClojureScript 编译器如何将 cljs 转换为 Javascript
【发布时间】:2013-07-12 22:04:28
【问题描述】:

我很难看到这是如何完成的。它如何能够在不编写任何 JS 的情况下将其转换为 JS(一切都在 Clojure 或 CS 中)。

有人可以举一个简单的例子来说明编译器如何将简单的东西转换为 javascript。也许是 (def x "foo") 或 (defn [x] (+ x x))?

【问题讨论】:

  • 你不需要Javascript来生成Javascript源代码;您所需要的只是字符串连接,这可以用任何编程语言完成。

标签: java javascript clojure clojurescript clojure-contrib


【解决方案1】:

发出 JavaScript 由 cljs.compiler 命名空间处理。 (该链接指向 master 分支上的源代码。)如您所见,它归结为将字符串打印到文件中。

当然,哪些字符串完全取决于 ClojureScript 源代码,但不直接取决于:原始源代码首先被转换为在编译过程中更有用的不同表示形式。这发生在 cljs.analyzer 命名空间中。

分析器比编译器更复杂。对于您的(def x "foo") 示例,它将生成一个相当简单的映射,该映射将由编译器的emit 多方法的:def 方法处理;搜索defmethod emit :def。需要注意的是对 munge 的调用(将 ClojureScript 标识符转换为有效的 JavaScript 标识符;例如 foo-bar -> foo_bar)和以 init 作为参数之一的 emits 调用,其中的表示init 将递归生成。 (在这种情况下,它只是"foo"。)

【讨论】:

  • 所以它是字符串连接,本质上。
  • 嗯,是的,当然。 (一旦分析完成。)只是想提供指向源的指针,包括具体在哪里查找最终发生在 (def x "foo") 上的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2022-05-26
相关资源
最近更新 更多