Goldfish Scheme(金鱼 Scheme) 是一款致力于“像 Python 一样实用易用,同时保持 Lisp 优雅”的现代化 Scheme 解释器。基于轻量高效的 S7 Scheme 引擎打造,具备 R7RS 兼容、轻量快速、安装包不到 5MB 以及 AI Coding 友好等特性。
近期,Goldfish Scheme 迎来了连续 8 个版本(v18.11.31 至 v18.11.39)的高密度演进与技术突破。在这一系列版本中,Goldfish Scheme 完成了从语言宏系统、多核并发体系、开发工具链性能到底层工程健壮性的全面跨越。
很多人说Scheme最多的应用场景是编程语言的教学,但Goldfish Scheme是一门实战型编程语言,截止到2026年10月8日,Goldfish Scheme背后的研发团队开发的科技笔记软件 Liii STEM 大概有 30 多万行Goldfish Scheme 代码。
核心更新亮点
1. 现代化宏系统:R7RS syntax-rules 与 syntax-case 全面落地
宏(Macro)是 Lisp/Scheme 的灵魂,但在传统无卫生宏体系下极易引发变量捕获(Variable Capture)等难以察觉的问题。这一阶段,Goldfish 实现了完整的卫生宏生态: - R7RS 宏系统核心:完整支持 define-syntax、let-syntax、letrec-syntax、syntax-rules 以及 syntax-error,并对展开器模式匹配引擎进行了底层性能优化。 - 引入 (liii syntax-case):支持高级过程式卫生宏展开,提供 quasisyntax、with-syntax、datum->syntax、syntax->datum、generate-temporaries、bound-identifier=? 等完整元编程工具。 - 标准库语法全面卫生化:将测试框架 (liii check) 以及 and-let*、receive、cut/cute、case-lambda、let-values/let*-values 等核心宏全面重写为标准 syntax-rules 卫生宏,根除变量污染风险。
(import (liii syntax-case))
;; 使用 syntax-case 编写卫生宏
(define-syntax swap!
(lambda (x)
(syntax-case x ()
((_ a b)
#'(let ((temp a))
(set! a b)
(set! b temp))))))
2. CSP 并发模型与数据并行:(liii go) & (liii par)
为了充分发挥现代多核 CPU 的算力,Goldfish 借鉴 Go 语言的并发哲学(CSP 模型),推出了全新的并发体系: - (liii go) 并发框架: - 提供系统级线程 Worker 与通道(Channel):支持缓冲/无缓冲、阻塞/非阻塞读写(chan-send!、chan-recv!、chan-try-*)及关闭状态探测。 - 支持类似 Go 的 select 语法结构,可同时监听多个 Channel 的读写就绪事件与超时回退。 - 支持 Context 上下文管理与基于 Continuation 的轻量级协作式纤程(Fiber)。 - (liii par) 数据并行库: - 为列表和向量提供高阶保序并行计算:par-map、par-filter、par-for-each。 - 提供面向原生向量的高性能版本:vector-par-map、vector-par-filter、vector-par-for-each,极大降低了编写高效多核并行任务的门槛。
(import (liii par))
;; 并行保序处理大规模数据列表,自动分摊到多核
(define results
(par-map (lambda (x) (heavy-compute x)) huge-list))
3. CLI 工具链提速:gf test 与 gf fmt 并发化
自研工程工具链全面接入自身的并发能力,大幅提升日常开发与 CI 流程的吞吐量: - gf test 支持并发测试:新增 -j / --jobs 参数,通过多 Worker 并发运行测试套件,多核环境下测试耗时大幅缩减。 - gf fmt 并发代码格式化:底层采用基于 (liii go) 的双通道 Worker Pool 架构实现并发格式化,大规模 Scheme 项目格式化速度提升数倍。 - 格式化容错与语法支持升级: - 括号不匹配或语法错误时优雅输出行列定位并容错处理,不再发生异常崩溃; - 优化 Tokenizer 扫描器,字符串扫描性能提升至线性复杂度 O(N); - 增强关键字参数同行排版与深层结构(tree-depth >= 4)自动换行对齐。
4. 全新模式匹配库:(liii match)
引入了强大且符合人体工程学的模式匹配模块 (liii match),支持对复杂嵌套数据结构进行直观匹配、类型判定与解构绑定: - 提供 match、match-lambda、match-lambda*、match-let、match-let*、match-letrec 等丰富形态。 - Goldfish 内部的 Packrat 语法解析器已全面迁移至 (liii match),彻底废弃了遗留的 (liii case),语法清晰度与解析性能双重提升。
(import (liii match))
(define (calc expr)
(match expr
((? number? n) n)
(('+ a b) (+ (calc a) (calc b)))
(('* a b) (* (calc a) (calc b)))
(else (error "unknown expr" expr))))
5. 丰富实用的标准库扩展
持续践行“像 Python 一样实用”的理念,标准库矩阵新增并重构了多个模块: - (liii generator):参考 SRFI 158 实现了生成器与累加器体系,支持惰性求值、流式处理以及生成器与 List / Vector / String 之间的相互转换。 - (liii semver):提供符合 Semantic Versioning 2.0.0 规范的语义化版本解析、清洗与比较能力。 - (srfi srfi-48):基于 SRFI-48 增强了内置 format 格式化接口。 - (liii string) 的 pyfmt:支持 Python 风格的浮点数精度、对齐宽度修饰符、整数前导零对齐等。 - (liii uri) 三级库重构:将原先分散的 URI 模块统一重构为 (liii uri make)、(liii uri parse)、(liii uri compare) 等结构清晰的三级子库。
6. 底层加固:极致安全防御与自举解耦
在追求功能与性能的同时,团队对 C++ 胶水层与基础运行时开展了深度安全审查: - 胶水层全量参数校验:全面修复 os、path、http、hashlib、json、base64、subprocess 等底层函数因非法类型参数或空字符串引发的潜在段错误(SIGSEGV)与越界内存访问。 - 环形结构与死循环防御:针对环形列表增加安全检测,彻底杜绝 subprocess 环境变量/参数成环、set! *load-path* 遇环挂起、list-sorted? 造环等死循环问题。 - C++ RAII 与异常安全修复:修复底层 Scheme 引擎在 s7_error(longjmp)时跳过 C++ RAII 析构引发的内存泄漏,以及 Windows MSVC 环境下 EH 状态损坏问题。 - 错误类型规范化:废弃历史遗留的 wrong-type-arg,全量统一为标准易懂的 type-error。 - 轻装上阵,移除外部 C++ JSON 依赖:彻底移除第三方 nlohmann_json C++ 依赖库,项目管理工具 gfproject 完全改用 Scheme 自举实现,体积更小、构建更纯粹。
版本演进速览
- v18.11.32:底层安全性攻坚,全面加固 C++ 胶水层参数校验与越界防御,修复环形结构死循环,清理外部 JSON 依赖。
- v18.11.33:解耦 S7 C 源码,将 list/vector/tree 胶水层独立模块化;错误类型全量规范为
type-error;优化 Tokenizer 扫描速度。 - v18.11.34:新增
(liii semver)与(liii generator)库;代码格式化工具支持关键字参数同行对齐与深度换行排版。 - v18.11.35:修复
gf fmt目录格式化,支持单目录与单文件的--check静态检查。 - v18.11.36:新增
(srfi srfi-48)format 库;重构 URI 为三级库;gf doc支持多级库文档检索;增强gf fmt括号错误提示与容错。 - v18.11.37:引入基于 CSP 模型的多核并发库
(liii go)与select语法;gf test支持-j多核并行测试。 - v18.11.38:增强后台 Worker 环境隔离,完善跨系统平台多核并发稳定性。
- v18.11.39:实现数据并行库
(liii par)与gf fmt多核并发格式化;全面支持 R7RSsyntax-rules宏展开与(liii syntax-case)卫生宏系统;推出模式匹配库(liii match)。
极速安装:轻量随行,体积不到 5MB
Goldfish Scheme 秉持极简主义,仅依赖 S7 Scheme、tbox 与 C++17 标准库,打包后体积不到 5MB,秒级下载即可开箱即用。目前已全面支持主流包管理器一键安装:
macOS / Linux (Homebrew)
brew tap MoganLab/goldfish
brew install goldfish
Windows (Scoop)
scoop bucket add goldfish https://github.com/MoganLab/scoop-goldfish
scoop install goldfish
体验与参与
欢迎体验 Goldfish Scheme,感受现代、高效且实用的 Scheme 编程体验!
- Gitee 仓库:https://gitee.com/MoganLab/goldfish
- 文档与示例:仓库自带详尽的文档与测试,可通过
bin/gf doc <库名>快速浏览。