ClojureScript编译器如何将cljs转换为Javascript

时间:2013-07-12 22:04:29

标签: java javascript clojure clojurescript clojure-contrib

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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