< 返回版块

苦瓜小仔 发表于 2025-08-21 13:33

Tags:日报

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 (一个流行的即时通讯软件)客户端库,基于 whatsmeowbaileys 开发。

它旨在提供一个类型安全、高性能、异步的 Rust 库,用于与 WhatsApp 平台交互。目前项目已完成基础模块(协议缓冲区、加密、二进制协议等)、连接与认证、主客户端及事件循环、端到端加密等功能。

下一步计划实现媒体文件上传/下载功能,并完善事件处理器以实现与 whatsmeow 的功能对齐。项目已实现稳定、加密的单聊连接,但使用该库可能违反 WhatsApp 的服务条款,存在账号被封的风险。

仓库:https://github.com/jlucaso1/whatsapp-rust

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页