Sift:统一三种 Lisp 方言的幂等格式化器,靠谱吗?
原创Sift:统一三种 Lisp 方言的幂等格式化器,靠谱吗?
从 Emacs 到 CI:工具链生态与对比验证
一个帖子只有 1 分 0 评论,但仓库有 134 次提交。我停住滚动,点进去看了看。HN 上冷清,不代表项目没做事。一个几乎没人讨论的 Lisp 格式化器,凭什么有 134 次提交的完整结构?这个反差值得查清楚。Sift 这个名字,听起来像“筛选”,它要筛的是三种 Lisp 方言里多余的空白和错乱的缩进。HN
仓库根目录有 editors/emacs 目录和 emacs 子目录。作者给 Emacs 做了原生编辑器集成,不是让人在终端里敲命令就完事。同一层还摆着 .github、action.yml、Dockerfile。一个程序同时能进 GitHub Actions 的容器,也能在本地 Docker 里跑 CI。这想得挺全,把开发环境、CI 环境和编辑器环境都覆盖了。GH
安装方式上,flake.nix、flake.lock、guix.scm、default.nix、channels.scm 都在。Nix 和 Guix 两个声明式包管理器都支持,在 Lisp 生态的工具里不算常见。很多项目只挑一个,Sift 没挑。channels.scm 和 guix.scm 同时存在,说明 Guix 的通道配置也考虑进去了。GH
根目录还躺着 .pre-commit-hooks.yaml,能挂进 pre-commit 钩子,提交前自动格式化。AI_POLICY.md 和 AGENTS.md 暗示项目用了 AI 辅助开发的协作规范,这在 2025 年的新项目里越来越常见。这些文件堆在一起,像一个人想清楚了自己要住进哪些地方。编辑器、CI、包管理器、钩子,一个不落。GH
三种方言,各按各的规则
Sift 同时读 Scheme、Emacs Lisp 和 Common Lisp。作者在 README 里写得明白,“each by the rules of its own report”,每种方言按自己的报告规则读取,而不是在它们之间折中。这里说的报告规则,指的是 Scheme 报告和 Common Lisp 标准这些文档各自定义的语法。三种语言共享很多语法,但分歧都在细微处。GH
方括号是最好的例子。在 Scheme 里是 vector,在 Emacs Lisp 里是 clause。同一个字符,两种解释。Sift 不把两种含义平均掉,它让每个方言按自己的话讲。作者说“sift does not average the two”,不平均。GH
这个决定有代价。要维护三套独立的解析逻辑,比维护一个能凑合三家的解析器工作量大。作者选了不凑合。我不确定这是最省力的路,但看起来是最清楚的路。一个工具如果连方括号到底算什么都含糊,那它格式化出来的代码,多半会让写 Scheme 的人皱眉。折中看起来省事,最后往往两头不讨好。GH
幂等不是承诺,是断言
实现是 Guile 3.0 加标准库,没有 C 依赖,没有构建步骤。Scheme 程序本来就不需要构建,sift doctor 会报告它跑在哪个解释器上、加载了哪个库、找到了哪些规则。这种自报家门的方式,让排查环境问题省了很多事。没有构建步骤也意味着,克隆下来就能跑,不用先编译一堆东西。GH
格式化的重写是文本上的全函数,也是不动点。格式化已格式化的文件,返回原样。注释、空行、#; datum 注释、#. read-time 形式,在输出中出现在输入里的位置。这两条性质,作者说在测试套件的每个 fixture 上断言过,不是写在文档里等它悄悄失效的承诺。承诺会过期,断言不会。GH
一个格式化器如果跑两次结果不一样,那它就不是格式化器,是随机数生成器。Sift 把这个性质做成了可验证的断言,这个设计我认。很多格式化器也声称幂等,但敢把断言写进测试套件、每个 fixture 都验证的,不多。GH
tests 目录在文件列表里。作者没写测试覆盖了多少行代码,我不确定套件的规模,但既然每个 fixture 都要断言幂等和位置保持,套件应该不薄。一个敢对每个 fixture 验证性质的工具,在 Lisp 生态里是有底气的。GH
134 次提交,1 分 0 评论
仓库里有 benchmarks 目录,有 ci 目录,有 web 目录,有 logo.svg,有 tests。134 次提交,结构完整,不像是随手扔出来的实验品。但 HN 帖只有 1 分,0 条评论。benchmarks 目录在,但里面具体测了什么,我没法从文件列表判断。HN
这意味着还没有大量用户跑来用它、报告问题、贡献代码。我不确定它会不会像很多 Lisp 工具一样,停在小众角落,被少数人珍视。但它的设计思路值得读过再下结论。工具的好坏,不该由 HN 分数决定。GH
原文:
Sift: LSP, Lint, Format Lisp, Scheme and Emacs Lisp · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年11月12日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123




