![]()
2023年,GitHub上一个叫「seed」的仓库悄悄更新了8次提交。没人注意到,这个8星项目正在把一门死了13年的编程语言,塞进当今最快的Scheme实现里。
这事得从2009年说起。
那年John Nathan Shutt发布了Kernel语言的最终规范。他把Lisp社区70年的宏系统争议,用一个叫vau的操作符一次性解决了。宏和函数,从此是同一个东西。2010年他写完博士论文,2020年去世。这门语言跟着进了冷冻舱。
但vau这个点子没死。它像某种思想病毒,在Lisp圈子里缓慢传播。MIT Scheme有了一级环境,Guile跟进了,Gambit做了变形版,连Chez Scheme都加了「continuation附件」——Kernel里「键控动态变量」的远房亲戚。
amirouche在seed项目的README里写得很直白:「我试过放下Kernel,但它回来了,像Python、JavaScript、PHP那样,只是没有它们的优雅或态度。」
为什么非得是Chez Scheme
Chez Scheme现在是工业级Scheme的事实标准。Racket用它做后端,Cisco养着核心团队,编译速度能把其他实现甩出数量级。
但Chez有个历史包袱:它的宏系统是传统syntax-case。这意味着宏在编译期跑,和用户代码活在不同的时空。Kernel的vau反着来——宏就是普通函数,运行时和操作数直接见面。
amirouche的选择很刁钻:不碰Chez的编译器,只动运行时。他用「不可变动态环境」这个设计,把vau嫁接进去。换句话说,宏调用时拿到的是环境的快照,不是真去篡改编译器的符号表。
![]()
这个妥协让Kernel的语义完整保留,同时蹭上Chez的JIT和优化器。seed仓库的代码量很小,核心就几页Scheme。但每一行都在回答同一个问题:如果1958年的Lisp精神活到2023年,该长什么样?
vau到底解决了什么
传统Lisp宏的问题,用过的人都知道。Common Lisp的defmacro在编译期展开,错一个括号,报错信息来自火星。Scheme的syntax-rules和syntax-case加了卫生机制,但学习曲线像一堵墙。
Marc Nieper-Wißkirchen写过一本《Extending a Language》,把syntax-case的用法榨干了。amirouche承认这书「 excellent work」,但补了一句:「我不买账。」
Kernel的答案是懒。不是计算惰性,是概念惰性。vau让宏和函数共享同一套抽象,你不用先学「这是宏的特殊语法」,再学「这是函数的正常语法」。只有一个语法:求值规则由你定。
seed项目目前的状态是「能跑」。8次提交,0个fork,README比代码长。但amirouche在issue区很活跃,回复每个提问者,解释设计取舍。这种姿态很Kernel——不是推产品,是播种子。
70年 lineage 的又一次分叉
seed的README里埋了一条时间线:1958年Lisp诞生,1975年Scheme分叉,1982年Brian Cantwell Smith的3-Lisp论文给vau铺了理论地基,2009年Kernel定型,2023年seed试图把它焊进Chez。
中间漏掉的细节更多。Femtolisp进了Julia的parser,Clojure的edn把S表达式卖给主流用户,Fennel在游戏开发圈找到地盘。这些项目的共同点是:都相信一个小而可编程的核心值得押注。
![]()
Kernel的vau是这条线上的下一个赌注。它赌的是:宏系统不需要两套语法,不需要编译期和运行期的割裂,不需要让用户背「卫生宏」的概念债。
amirouche在2023年的提交记录里,有一次把LICENSE从GPL换成了MIT。另一次加了.gitignore,排除了Chez的编译中间文件。最实质性的一次改动是引入了「不可变环境」的持久化数据结构——这是让vau在Chez里不翻车的基础设施。
谁会在乎一个8星项目
直接用户可能很少。但seed的存在本身是个信号:Chez Scheme的开放度比表面看起来高。它的C接口足够干净,让第三方能塞进全新的求值语义,而不需要fork整个编译器。
这对Racket社区尤其有意思。Racket正在经历一场「Chez化」迁移,核心从C实现的Racket VM切到Chez Scheme。如果seed的路走通了,Racket用户理论上能直接调用Kernel风格的宏,而不等官方支持。
更远的想象是Julia。它的parser已经是Femtolisp,但宏系统还是Julia原生的。如果哪天Julia团队想升级,seed在Chez上的实验会是一份现成的参考实现。
amirouche没提这些。他的README停在一句自我重复:「也许是精英主义,也许是智力好奇,也许是部落主义。也许是那些括号。」
2024年初,seed仓库最后一次更新是调整README的格式。8个star,0个watch,issue区安静了。但GitHub的依赖图谱显示,有3个私有仓库引用了它——都是Scheme相关的语言实验。
如果Kernel的vau真的能在Chez里跑顺,第一个大规模受益者会是谁?Racket的迁移工程,还是某个还没诞生的新语言?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.