Racket 编程

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,你可以创造最适合当前问题的语言。