我认为这是一个非常不寻常(或者至少文档不足)的领域。没有书籍、文档等。只有现有项目(CLJS、Clojure JVM/CLR、clojerl、joker,可能还有其他)的经验报告。一些其他库已经利用了cljs编译器来达到gambit方案的目标,比如在某些情况下用C语言。
基本策略似乎是将目标定在cljs实现上,因为它基于协议的设计(作为对clojure JVM/CLR通过相应RT类与宿主更紧密集成的替代),非常适合自举。clojerl开发者实际上就是这样做的。这样的好处是你现在可以访问clojure测试套件。由于还没有官方规范,与测试的兼容性是接下来最好的东西。在核心文档中有一些关于实现特定的reader条件的建议(例如,在你的实现中使用完全限定的键,为官方实现保留未限定的键)。
有一些读取器、分析器和生成器完全用clojure编写(clojure JVM,但不是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有着非常长的这类东西的传统……)。