KSL 是一门静态类型、不可变数据的函数式教学语言。编译器以 Rust 实现,通过 Cranelift 生成机器码,运行时以 Rust 实现并导出 C ABI,链接为静态库。
# 编译编译器与运行时
cargo build
# 编译并运行示例
cargo run -- examples/phase2/show.ksl -o tmp/show
tmp/show
# 运行全部测试
cargo test --workspace注意:以下为 v2.0 语法示例,v2.5 语法设计见
docs/KSL语言设计.md。
# 函数定义
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/ 运行时(Rust 实现,C ABI),GC、字符串、列表、标准库
ksl/ CLI 编译器,编译流水线入口
examples/
phase1/ 基础示例
phase2/ 闭包、ADT、多态、typeclass 等示例
docs/
KSL语言设计.md 语言设计索引
01-设计概览/ 语言哲学、语法总览、类型系统概览
02-语法规范/ 词法、表达式、声明、模式匹配等规范
03-类型系统/ 类型推断、类型约束、泛型
04-模块系统/ 模块声明、接口文件
05-标准库/ 内置函数
06-实现笔记/ 编译流水线、已知问题源码 -> 词法分析 -> 语法分析 -> 类型检查 -> 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/KSL语言设计.md - 语言规范:
docs/02-语法规范/ - 类型系统:
docs/03-类型系统/ - 已知问题:
docs/06-实现笔记/已知问题.md