Typechecker-Zoo:用 Rust 实现过去 50 年中最成功的静态类型系统
Typechecker Zoo 旨在实现过去 50 年中最成功的静态类型系统,并通过 Rust 语言进行玩具级实现。
项目概述
- 目标:创建过去 50 年中最成功的静态类型系统的最小实现,涵盖从简单的类型系统到现代的依赖类型。
- 实现语言:选择 Rust,因为它有良好的解析器生态系统,易于安装,且作者喜欢在非函数式语言中构建纯函数式语言的反差感。
- 项目性质:这是一个周末的趣味项目,而非正式的系统介绍。如果需要权威资源,建议阅读相关书籍和论文。
推荐的权威资源
- 书籍:
- TAPL(Types and Programming Languages)
- ATTAPL(Advanced Topics in Types and Programming Languages)
- PFPL(Practical Foundations for Programming Languages)
- 论文:每种类型检查器的主要来源链接在附录中。
项目特点
- 理论与实践结合:虽然书籍和论文深入探讨了理论,但往往缺乏实际编码实现的细节。该项目旨在填补这一空白,提供易于理解和修改的实现。
- 代码风格:使用 Rust 的惯用风格,包含完整的解析器和测试套件,使用了常见的编译器库(如 larlpop、logos、ariadne 等)。
- 简化实现:代码是简化和“代码高尔夫”版本,便于理解,但比阅读生产实现要容易得多。
- 不涉及解析和中间表示:由于解析问题已得到解决,且 MLIR 存在,项目不会过多关注这些方面。
实现的类型系统
项目计划实现以下四种类型系统:
1. Algorithm W(775 行代码)
- 描述:Robin Milner 的经典 Hindley-Milner 类型推断算法,来自《A Theory of Type Polymorphism in Programming》。
- 实现:一个玩具级的多态 lambda 演算。
2. System F(1090 行代码)
- 描述:使用双向类型检查的二阶 lambda 演算,具有参数化多态性。
- 实现:一个类似 Mini-OCaml 的系统。
- 算法:基于 Dunfield 和 Krishnaswami 的《Complete and Easy Bidirectional Typechecking for Higher-rank Polymorphism》。
3. System F-ω(3196 行代码)
- 描述:完整的 System F-ω 实现,包含高阶类型、双向类型检查、存在类型变量、多态构造器应用、模式匹配和数据类型。
- 实现:一个类似 Haskell-lite 的系统。
- 方法:基于 Zhao 等人的《A Mechanical Formalization of Higher-Ranked Polymorphic Type Inference》。
4. Calculus of Constructions(6000 行代码)
- 描述:具有可数层次的非累积宇宙和归纳类型的构造演算。
- 实现:一个类似 Lean 的依赖类型检查器。
- 方法:基于 Vladimir Voevodsky 的《A Universe Polymorphic Type System》。
总结
“Typechecker Zoo” 是一个有趣的个人项目,旨在通过 Rust 实现多种静态类型系统,帮助开发者更好地理解这些系统的设计和实现。项目代码简洁且易于理解,适合对类型系统感兴趣的学习者和开发者。
仓库:https://github.com/sdiehl/typechecker-zoo
阅读:https://sdiehl.github.io/typechecker-zoo/
Reddit:https://www.reddit.com/r/rust/comments/1mvbozj/typechecker_zoo_minimal_rust_implementations_of/
文章《使用 Rust 的实用解析教程》
这篇文章是一篇关于解析(parsing)的实用教程,作者通过 Rust 实现了一个简单的编程语言 simp
的解析器。
文章从解析编程语言的基本概念讲起,逐步介绍了词法分析(lexical analysis)、语法分析(parsing)、抽象语法树(AST)的构建,以及如何处理表达式和错误报告。文章还探讨了如何通过递归下降(recursive descent)技术实现解析器,并提供了完整的代码示例和测试方法。
阅读:https://jhwlr.io/intro-to-parsing/
WhatsApp 客户端库
whatsapp-rust
是一个用 Rust 编写的 WhatsApp (一个流行的即时通讯软件)客户端库,基于 whatsmeow
和 baileys
开发。
它旨在提供一个类型安全、高性能、异步的 Rust 库,用于与 WhatsApp 平台交互。目前项目已完成基础模块(协议缓冲区、加密、二进制协议等)、连接与认证、主客户端及事件循环、端到端加密等功能。
下一步计划实现媒体文件上传/下载功能,并完善事件处理器以实现与 whatsmeow
的功能对齐。项目已实现稳定、加密的单聊连接,但使用该库可能违反 WhatsApp 的服务条款,存在账号被封的风险。
仓库:https://github.com/jlucaso1/whatsapp-rust
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论