第 4 部分 · 语言设计
语言造语言
语言造语言
理解 Racket 语言导向编程的核心理念。
为什么需要造语言
不同的领域有不同的思维方式和表达习惯。通用编程语言无法完美适配所有场景。Racket 的答案是:让程序员能够为每个领域创造最合适的语言。
;; Racket 自带多种语言 #lang racket ; 通用 Racket #lang typed/racket ; 静态类型 Racket #lang lazy ; 惰性求值 #lang datalog ; 逻辑编程 #lang br ; 教学用 Brainfu*k
语言即库
在 Racket 中,创建一门新语言并不需要编译器——宏就是你的工具:
;; 一个简单的日志语言 #lang racket (define-syntax-rule (deflog level msg) (printf "[~a] ~a~n" 'level msg)) (deflog info "Server started") (deflog error "Connection failed")
Racket 的语言生态
Racket 发行版中包含了数十种语言:
| 语言 | 用途 |
|---|---|
racket | 通用编程 |
typed/racket | 静态类型编程 |
lazy | 惰性求值 |
datalog | 数据库查询 |
scribble | 文档编写 |
slideshow | 演示文稿 |
小结
语言导向编程是 Racket 最大的独特之处。通过宏和 #lang,你可以创造最适合当前问题的语言。