请在2024年度Clojure调查!中分享您的想法。

欢迎!请参阅关于页面获取更多关于如何使用此网站的信息。

+2
编译器

我已经对规范、测试套件或一些文档的碎片进行了调查,以了解Clojure后端的开发。我的大部分搜索结果只找到了其他一些大多数都是做自己事情的实现 - 甚至ClojureScript似乎也没有办法验证是否符合Clojure应该符合的标准。据我了解,ClojureCLR之所以能够工作,主要是因为它是对Java源代码的一个(主要)一对一克隆,使用C#进行。

有推荐或维护者推荐的方法来开发新的Clojure后端吗?还是这被认为是“荒地”?

1 答案

+1

入选
 
最佳回答

我认为这是一个非常不寻常(或者至少文档不足)的领域。没有书籍、文档等。只有现有项目(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有着非常长的这类东西的传统……)。

...