视频加载失败

主页 · 8

并发与 async:线程、Send/Sync 和一个 Tokio 服务
让 pebble check 并行检查多个文件,再写一个能同时服务很多连接的 Tokio 求值服务器。从 thread::scope、Send/Sync 讲到手写 Future,最后写 pebble-net:成帧、FrameError、select!。
#Rust#Pebble#并发+2
越过边界:FFI 调 C 与 no_std
Pebble 的最后两条边界:向下调用一个手写的 C 库,再向下脱掉操作系统。写 pebble-sys(build.rs、unsafe extern、Drop、catch_unwind)和 pebble-nostd(no_std、原子操作、GlobalAlloc、const 泛型),再用实验补上 repr、union、cdylib。
#Rust#Pebble#FFI+2
栈式虚拟机:GC 根、两个后端与 Criterion
把第 10 篇的字节码放到第 11 篇的 GC 堆上执行:写栈式虚拟机、挑出 GC 根,再用 Backend trait 和 #[differential] 属性宏把两个后端并排摆好,最后用 Criterion 量出真实的速度差。
#Rust#Pebble#虚拟机+2
手写垃圾回收器:泛型容器、Cell 与第一次 unsafe
第 9 篇我们亲手造出了 Rc 环泄漏,这一篇用一个泛型的标记清除回收器把它治好:索引句柄、Cell 内部可变性、显式工作表,再加一个用 unsafe 写成的 bump arena。
#Rust#Pebble#垃圾回收+2
字节码编译器:macro_rules!、回填和常量池
把 AST 压扁成一串线性指令:用函数式过程宏 opcode_set! 生成指令枚举,用 macro_rules! 写 chunk!,用 HashMap 的 entry API 给名字去重,用回填补全跳转目标,再亲手弄坏 for 循环的压栈顺序看测试漏掉了什么。
#Rust#Pebble#字节码+2
树遍历解释器:闭包、控制流与一个内存泄漏
让 AST 真正跑起来:用 Flow 枚举把 return、break、continue 变成返回值,用 Rc<RefCell<Env>> 实现闭包,用 FnOnce 守住递归深度,再写两个测试证明 fn fact 会让全局环境永远不被释放,并看清 Weak 为什么救不了它。
#Rust#Pebble#闭包+2
共享与可变:Rc、RefCell 和运行时的值
let b = a; push(b, 1); a 必须显示 [1]。我们依次撞上移动、独占借用和 Rc 的墙,最后用 Rc<RefCell<..>> 搭出 pebble-value:值、可哈希的 Map 键、运行时错误、环境链和内建函数表,顺带学会 trait 对象、函数指针、Hash/Eq 契约。
#Rust#Pebble#智能指针+2
Result、? 与递归下降:解析器和第一个命令行
这一篇我们写 pebble-parser:用 Result 和 ? 把错误当数据,用递归下降加优先级爬升把 token 变成 AST,再用 panic 恢复让一个文件的三处错误一次报全。然后做出第一个能跑的 pebble 命令行:clap、anyhow、模块和集成测试。
#Rust#Pebble#错误处理+2
过程宏:让编译器替我写 impl Spanned
上一篇我们手写了三个一模一样的 impl Spanned。这一篇写一个 derive 过程宏,让编译器在编译时替我们生成它:从 TokenStream、syn 与 quote 讲起,撞上泛型、引用绑定、卫生性和自定义编译错误,最后删掉三段手写代码,测试一个字不改。
#Rust#Pebble#宏+1
递归类型、泛型与 trait:搭一棵 AST
把 token 流变成一棵树:用 Box 打破递归枚举的无限大小,用泛型和 trait bound 写出能处理任何访问者的遍历函数,再亲手撞上 ?Sized、IntoIterator 与手写 Spanned 的重复劳动。
#Rust#Pebble#泛型+2
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

当前页面没有目录

文章目录

当前页面没有目录