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

ClojureScript编译器如何将cljs转换为Javascript,java,javascript,clojure,clojurescript,clojure-contrib,Java,Javascript,Clojure,Clojurescript,Clojure Contrib,我很难看出这是怎么做到的。它如何能够在不编写任何JS的情况下将其转换为JS(一切都在Clojure或CS中) 有人能举个简单的例子说明编译器如何将简单的东西转换成javascript吗。可能是(def x“foo”)或(defn[x](+x))?发出JavaScript的代码由名称空间处理。(链接指向主分支上的源代码。)如您所见,它归结为将字符串打印到文件 当然,哪些字符串完全取决于ClojureScript源代码,但不是直接的:原始源代码首先转换为在编译过程中更有用的不同表示形式。这在名称空间

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


有人能举个简单的例子说明编译器如何将简单的东西转换成javascript吗。可能是(def x“foo”)或(defn[x](+x))?

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

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


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

您不需要Javascript来生成Javascript源代码;你所需要的就是字符串连接,这可以在任何编程语言中完成。所以本质上就是字符串连接。当然,是的。(分析完成后。)只想提供指向源代码的指针,包括在哪里准确查找
(def x“foo”)