视频加载失败

Pebble

返回项目列表
Pebble
已发布
Rust/编译器/解释器/虚拟机/垃圾回收/学习项目

一个用 Rust 从零实现的小型脚本语言与工具链:手写词法器、递归下降解析器、树遍历解释器、字节码编译器与栈式 VM、手写标记清除 GC,外加过程宏、async、FFI 与 no_std。配套 15 篇「用 Pebble 从零学 Rust」教程,从空目录一章一个 crate 重建整个项目。

这是什么#

Pebble 是一门我用 Rust 从零写出来的小型脚本语言,也是一份 “用一个真实项目把 Rust 学完” 的教材底稿。它不是单文件 demo:整套东西拆成了一个 Cargo 工作区,每个 crate 都负责让 Rust 的某一个角落真正干活。

语言本身支持:let 绑定、fn 与闭包、if/while/for、return/break/continue、整数与浮点、字符串、列表 [...]、映射 #{...}、索引与赋值、以及一组内建函数(print、len、range、push 等)。

从零学 Rust 系列#

我把这个项目拆成了 15 篇边写边学的教程:从一个空目录和 cargo new 开始,一章一个 crate,把 Pebble 重新搭一遍。每一章都有可以对照的检查点,读者不需要去别处查资料。

两个后端#

同一个前端,两套执行引擎:

  • 树遍历解释器:直接走 AST,用 Rc<RefCell<..>> 组成作用域链。写起来最直观,也最能暴露引用计数的循环引用问题。
  • 字节码 VM:把 AST 编译成指令流,在栈式虚拟机上执行,运行时对象全部落在手写的标记清除垃圾回收器上。递归闭包形成的环因此可以被回收。

两个后端并不完全一致:块内的 let 在树遍历解释器里有自己的作用域,在 VM 里每次调用只有一个环境;嵌套的 for 在 VM 里还有已知的问题。第 10 篇和第 12 篇会把这些差异摆出来。仓库里的差分测试(#[differential])只收录两边确实一致的程序。

工作区结构#

crate让它干活的 Rust 知识
pebble-span#![no_std]、Copy 类型、Index 运算符重载、源码映射
pebble-diag错误类型、Display/Error、诊断渲染
pebble-lexer零拷贝 &str 扫描、生命周期、Cow、Iterator
pebble-ast递归枚举、Box、泛型 visitor trait、IntoIterator
pebble-macrosproc-macro、syn/quote、derive、函数式宏与属性宏 #[differential]
pebble-parser递归下降、优先级爬升、Result/?、错误恢复
pebble-valueRc/RefCell、内部可变性、自定义 Hash/Eq、切片模式
pebble-interp环境链、闭包、FnOnce、Weak 与引用环
pebble-bytecode指令流、macro_rules!、跳转回填、常量池
pebble-gcunsafe、裸指针、MaybeUninit、Cell、泛型标记清除
pebble-vm栈式虚拟机、opcode 派发、GC 根
pebble-sysbuild.rs、cc、extern "C"、repr(C)、PhantomData、FFI 回调
pebble-nostdno_std + alloc、const 泛型、#[global_allocator]
pebble-netasync/await、Tokio、spawn_blocking、带 source() 的错误类型
pebble-cliclap、Backend trait(泛型关联类型)、作用域线程、Cargo features

怎么跑#

Terminal window
nix develop # 或系统 Rust >= 1.88
cargo build --workspace
cargo run -p pebble-cli -- run examples/fib.pebble
cargo run -p pebble-cli -- run --vm examples/fib.pebble
cargo run -p pebble-cli -- check examples/fib.pebble examples/hello.pebble
cargo run -p pebble-cli -- repl
Profile Image of the Author
bfmhno3
Hello, I'm bfmhno3.
公告
本站曾使用 Jekyll + Minimal Mistakes 主题,现已迁移至 Astro + Firefly。博客内容未变,但文章链接有所调整,请自行查找需要的文章。
分类
标签
最新动态
站点统计
文章
123
分类
2
标签
239
总字数
753,253
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录