KSL 是一门静态类型、不可变数据的函数式教学语言。编译器以 Rust 实现,通过 Cranelift 生成机器码,运行时以 C 实现并链接为静态库。
# 编译编译器与运行时
cargo build
# 编译并运行示例
cargo run -- examples/phase2/show.ksl -o tmp/show
tmp/show
# 运行全部测试
cargo test --workspace# 函数定义
define add
sig i64 -> i64 -> i64
with a b
begin
a + b
end
# 记录与 ADT
record Point (x as i64, y as i64) end
type Shape := Circle i64 | Rect (i64, i64) | Dot end
# 模式匹配
match shape with
| Circle r => r
| Rect (w, h) => w * h
| Dot => 0
end
# Typeclass
class Show 'a where
show sig 'a -> string end
end
instance Show i64 where
show x := i64-to-string x
end
# 带约束的泛型函数
define my-print
sig 'a -> unit where Show 'a
with x
begin
print-string (show x)
end
# 程序入口
define main
sig unit -> i64
with unit
begin
my-print 42;
0
end
核心特性:
- Hindley-Milner 类型推断,支持 let-多态
- 闭包与高阶函数
- 记录与代数数据类型,支持模式匹配
- Typeclass,通过单态化实现零开销分派
- 不可变数据,尾调用由 Cranelift 优化
crates/
ksl_ast/ AST 节点与 Token 定义
ksl_lexer/ UTF-8 词法分析器
ksl_parser/ 递归下降语法分析器
ksl_ty/ Hindley-Milner 类型推断
ksl_hir/ AST -> HIR 降级,闭包转换,单态化
ksl_codegen/ Cranelift 目标文件生成
ksl_rt/ C 运行时,GC、字符串、列表、标准库
ksl/ CLI 编译器,编译流水线入口
examples/
phase1/ 基础示例
phase2/ 闭包、ADT、多态、typeclass 等示例
docs/
superpowers/specs/ 语言规范
superpowers/plans/ 实现计划
源码 -> 词法分析 -> 语法分析 -> 类型检查 -> HIR 降级 -> 代码生成 -> 链接
各阶段对应 crates/ksl/src/main.rs 中的顺序调用。类型检查导出 TypeInfo,HIR 降级消费它完成类型回填、闭包转换与单态化。
# 全量测试
cargo test --workspace
# 单个 crate 测试
cargo test -p ksl_ty
# 集成测试:编译并运行 examples/ 下所有 .ksl 文件
cargo test -p ksl filetests集成测试扫描 examples/phase1/ 和 examples/phase2/ 中的 .ksl 文件,用编译器编译后运行,比对相邻 .exit 文件中的预期退出码。
- 语言规范:
docs/superpowers/specs/ksl-v2.5-spec.md - 实现计划:
docs/superpowers/plans/ksl-v2.5-implementation-plan.md