我认为这是一种未知(或者至少是不太被记录在案)的领域。没有书籍、文档等。有一些来自现有项目的实际经验报告(CLJS,Clojure JVM/CLR,clojerl,joker,也许还有其他)。一些其他库利用了cljs编译器以针对gambit scheme、在一个案例中是C。
基本策略似乎是针对CLJS实现,因为它基于协议设计,而不是Clojure JVM/CLR与宿主的更紧密集成,这使得它非常适合自举。这正是clojerl开发者所做的事情。这其中的好处是,现在您可以访问Clojure测试套件。由于没有官方规范,符合测试规范是最好的方式。核心文档中有一些建议关于实现特定平台读取条件(例如,为您的实现使用完全限定键,为官方实现保留未限定键)。
有完全用Clojure编写的读取器、分析器和发射器(不是cljc)。可以针对启动这些功能所需的Clojure的子集进行定位,一旦它们运行起来,再加载Clojure的其余部分(例如,cljs.core)。唯一棘手的部分是,读取器、分析器和发射器本身使用了更多高级的Clojure惯用语,这意味着您必须首先实现这些惯用语(例如,多态方法和协议以及持久结构)才能如同现在一样使用现有的工具链。可能有必要将现有工具简化为更简单的实现,这样才能在更少的架构上运行,使宿主实现更简单、更快。可能存在一个简单的clojure0,它提供了一个简单的自举层,以便在之上定义更高级的功能。我认为这些是目前开放的研究课题(社区似乎已经接受现有的实现为目前足够)。
虽然没有具体的“Clojure”引用,但有许多关于实现各种Lisp的通用Lisp引用。《Lisp In Small Pieces》、《Lisp System Implementation》、来自Norvig的PAIP的一些摘录、《Make A Lisp》、《Scheme 48》、《PicoLisp》、《FemtoLisp》以及更广泛的研究可能为这类工作提供了很好的洞见。我敢肯定还有更多优秀的参考文献(Lisp有很长的这类工作的传统...)。