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

Jon*_*ono 4 javascript java clojure clojure-contrib clojurescript

看到这是怎么回事,我有点困难.如何在不编写任何JS的情况下将其转换为JS(一切都在Clojure或CS中).

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

Mic*_*zyk 5

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

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

分析器比编译器更复杂.对于您的(def x "foo")示例,它将生成一个相当简单的映射,该映射将由编译器:defemit多方法的方法处理; 寻找defmethod emit :def.需要注意的事情是调用munge(转化ClojureScript识别成有效的JavaScript标识符;例如foo-bar- > foo_bar)和emits与呼叫init的论据之一,这里的表示init将会以递归生成.(在这种情况下,它只是"foo".)