Scheme/Lisp 现代生态 2025
Lisp 没死,它在进化。Racket、Chicken、Guile 等现代实现正在让这门 65 岁的语言焕发新生。
为什么还要关注 Lisp?
2025 年的现实
- Racket 9.1 发布(2026 年 2 月)
- Guile 3.0.11 发布(2025 年 12 月)
- Chicken 5.4 稳定版
- Clojure 在企业中持续增长
Lisp 的独特价值
| 特性 | 说明 |
|---|
| 同像性 | 代码即数据,数据即代码 |
| 宏系统 | 可以扩展语言本身 |
| REPL 驱动 | 交互式开发体验 |
| 增量编译 | 修改立即生效 |
主要实现对比
| 实现 | 特点 | 适用场景 |
|---|
| Racket | 语言实验室、DSL 工厂 | 教育、语言设计 |
| Chicken | 编译为 C、嵌入式友好 | 系统编程、嵌入 |
| Guile | GNU 官方扩展语言 | 扩展 GNU 应用 |
| Chez Scheme | 高性能、工业级 | 生产环境 |
| Clojure | JVM 生态、并发 | 企业应用 |
| Fennel | Lua 生态 | 游戏开发、嵌入式 |
Racket:语言工厂
核心特点
- #lang 系统:一个文件一个语言
- DrRacket IDE:教学友好
- 宏系统:强大的语法扩展
- 合约系统:运行时验证
- Typed Racket:渐进类型
内置语言
#lang racket ; 标准 Racket
#lang typed/racket ; 类型化
#lang scribble/base ; 文档生成
#lang datalog ; 逻辑编程
#lang slideshow ; 幻灯片
#lang racket/gui ; GUI 应用
创建自己的语言
#lang racket
(define-syntax-rule (when test body ...)
(if test (begin body ...)))
;; 使用
(when #t
(display "Hello")
(newline))
生态系统
Chicken Scheme:实用主义
核心特点
- 编译为 C:可移植、高效
- EGG 系统:丰富的包管理
- FFI:轻松调用 C 库
- 小型运行时:适合嵌入
安装
# macOS
brew install chicken
# Ubuntu
sudo apt install chicken-bin
# 编译
csc -o hello hello.scm
示例:HTTP 服务器
(import (chicken io))
(import (chicken tcp))
(define (handle-client in out)
(let ((request (read-line in)))
(display "HTTP/1.1 200 OK\r\n" out)
(display "Content-Type: text/plain\r\n\r\n" out)
(display "Hello from Chicken!\n" out)))
(tcp-listen 8080 handle-client)
有用的 EGGs
| EGG | 说明 |
|---|
http-client | HTTP 客户端 |
json | JSON 解析 |
sql-de-lite | SQLite 绑定 |
srfi-1 | 列表操作 |
matchable | 模式匹配 |
Guile:GNU 的扩展语言
核心特点
- 多语言支持:Scheme、ECMAScript、Emacs Lisp(Lua 开发中)
- GNU 集成:GDB、Guix、GnuCash 的扩展语言
- 高效编译器:JIT 编译为本地代码
- FFI:调用 C 库
应用场景
| 应用 | 用途 |
|---|
| GNU Guix | 包管理器配置 |
| GDB | 调试脚本 |
| GnuCash | 财务脚本 |
| Lepton-EDA | EDA 工具扩展 |
示例:Web 服务器
(use-modules (web server))
(define (my-handler request request-body)
(values '((content-type . (text/plain)))
"Hello World!"))
(run-server my-handler)
示例:Guix 包定义
(define-public my-package
(package
(name "my-package")
(version "1.0")
(source (origin
(method url-fetch)
(uri "https://example.com/my-package-1.0.tar.gz")
(sha256 (base32 "..."))))
(build-system gnu-build-system)
(synopsis "My package")
(description "A sample package")
(license gpl3+)))
Chez Scheme:工业级
特点
- 高性能:最快的 Scheme 实现之一
- 增量编译:修改立即生效
- 工业级稳定性:Cisco 内部使用多年
- 开源:2016 年开源
为什么快
- ** nanopass 编译器框架**:多层 IR 优化
- 直接生成机器码:不经过 C
- 精确垃圾回收:分代 GC
Clojure:JVM 上的 Lisp
特点
- JVM 生态:所有 Java 库可用
- 不可变数据结构:默认不可变
- STM:软件事务内存
- ClojureScript:编译为 JavaScript
示例:Web 服务
(require '[ring.adapter.jetty :as jetty])
(require '[ring.util.response :as response])
(defn handler [request]
(response/response "Hello World"))
(jetty/run-jetty handler {:port 3000})
企业用户
- Nubank(巴西银行)
- Walmart
- Puppet Labs
- Apple
Fennel:Lua 上的 Lisp
特点
- 编译为 Lua:完全兼容 Lua 生态
- 零开销:编译时宏,运行时无成本
- 嵌入式友好:适合游戏开发
示例:LÖVE 游戏
(fn love.draw []
(love.graphics.print "Hello Fennel!" 400 300))
(fn love.update [dt]
;; 游戏逻辑
)
学习资源
入门
进阶
选择建议
| 场景 | 推荐 |
|---|
| 学习/教育 | Racket |
| 嵌入式/系统 | Chicken |
| GNU 扩展 | Guile |
| 高性能 | Chez |
| 企业应用 | Clojure |
| 游戏开发 | Fennel |
| 纯粹主义 | MIT Scheme |
社区
- Discord:Racket、Clojure 活跃
- IRC:#scheme、#racket、#clojure
- Reddit:r/scheme、r/racket、r/Clojure
- Discourse:Racket 官方论坛
总结
Lisp 生态在 2025 年依然活跃:
- Racket 9.x:语言实验室,适合 DSL 开发
- Chicken:实用主义,编译为 C
- Guile 3.x:GNU 扩展语言,多语言支持
- Clojure:JVM 企业级应用
- Fennel:游戏/嵌入式
Lisp 的核心思想——同像性、宏、REPL——正在影响现代语言(Rust 的宏、Elixir 的 quote、Julia 的表达式)。
“Lisp isn’t a language, it’s a building material.” — Alan Kay