详情

首页手游攻略 rust-langdev:实践指南

rust-langdev:实践指南

佚名 2026-09-12 14:50:01

面对实际交付,我看rust-langdev的重点不在星标,而在这项能力:Rust 的语言开发库。这类软件开发工具真正难在依赖、接口和异常处理往往比主路径更影响采用,仓库说明只能作为第一层证据。与其反复读介绍,不如在隔离分支完成一个可回滚的小任务,再依据安装步骤、接口契约、测试结果和错误信息做取舍。对需要可检查开发流程而非单次演示的工程师来说,这个仓库值得继续验证;只求即装即用的人则要先看维护成本。

Rust 的 Langdev 库

  • 词法分析器
  • 解析器
  • 代码生成
  • 字符串实习
  • 即时编译
  • 编译框架
  • 错误报告
  • 语言服务器协议
  • 测试
  • 增量编译
  • Floats/Ints/Bools
  • 二进制和目标文件解析、生成和处理
  • 求解器
  • CLI
    • 配置
  • 复制
  • 字符串处理
  • 语法树
  • 漂亮的印刷
  • 变量绑定
  • 缓存
  • WASM
  • 日志记录
  • 存储
    • 不相交集
  • 增量分析
    • 及时数据流资源
  • 模糊测试
    • 模糊测试资源
  • 图表
  • 型式检查
  • 窥孔优化
  • 垃圾收集
  • 指南和资源
    • 型式检查
    • 内联
    • RVSDG
    • 等饱和度
  • 未分类

词法分析器

  • logos Logos 有两个目标:让创建 Lexer 变得容易,这样您就可以专注于更复杂的问题,并使生成的 Lexer 比您手写的任何东西都快
  • lrlex 生成 Rust 代码的 lex/flex 的替代品
  • lexgen 一个功能齐全的词法分析器生成器,作为 proc 宏实现。

解析器

  • lalrpop 方便的 LR(1) 解析器生成器
  • nom 面向字节、零拷贝、解析器组合器库
  • combine 具有零拷贝支持的任意流上的快速解析器组合器。
  • pom PEG 使用运算符重载而不使用宏的解析器组合器。
  • peg 一个简单的解析表达式语法 (PEG) 解析器生成器。
  • glue Glue 是一个解析器组合器框架,用于解析基于文本的格式,它易于使用且相对较快
  • pratt Rust 的通用 pratt 解析器
  • pest 用 Rust 编写的通用解析器,重点关注使用解析表达式语法的可访问性、正确性和性能(PEG)
  • lrpar 与 Yacc 兼容的解析器。
    • nimbleparse_lsp 用于快速开发 lrpar 解析器的 LSP 服务器,它绕过代码生成来解析语法更改时的输入缓冲区。
  • tree-sitter 一个解析器生成器,用于构建快速的编辑器友好解析器,具有流、增量、可恢复(重新)解析、超时和取消以及高级语法节点查询等功能。
  • rowan 通用无损语法树
    • ungrammar A DSL 用于指定具体语法树,请参阅 这篇介绍性文章
  • cstree rowan 的一个分支,具有线程安全语法树和内置 源字符串驻留
  • chomp Chomp 是一个快速的单子式解析器组合器库,设计用于稳定的 Rust
  • oak 嵌入 Rust 代码中的类型化解析器生成器,用于解析表达式语法
  • chumsky 一个友好的解析器组合器箱,可以轻松编写具有错误恢复功能的 LL(k) 解析器
  • rust-sitter 用于定义 Tree-sitter 语法和 Rust 逻辑的包

正则表达式

  • regex Rust 正则表达式的实现。该实现使用有限自动机并保证所有输入的线性时间匹配。
  • regress 面向 EcmaScript 语法的正则表达式引擎。
  • onig Rust-Onig 是 Oniguruma 正则表达式库的一组 Rust 绑定。

代码生成器

  • cranelift Cranelift 是一个低级可重定向代码生成器
  • llvm-sys 绑定到 LLVM 的 C API
  • iced-x86 快速且正确的 x86/x64 反汇编器、汇编器和指令解码器
  • llama 友好的 LLVM 绑定
  • inkwell Inkwell 旨在通过安全包装 llvm-sys 来帮助您编写自己的编程语言
  • 自然 Rust 数据结构中的 llvm-ir LLVM IR
  • llvmenv 管理多个 LLVM/Clang 构建
  • walrus 用于执行 WebAssembly 转换的库
  • cilk 受 Rust 编写的 LLVM 影响的玩具编译器基础结构。

字符串实习

  • lasso 具有最小内存占用和竞技场分配的多线程和单线程字符串内部
  • string-interner 高效缓存字符串的数据结构
  • simple-interner 一个简单的仅附加内部
  • string_cache Rust 的字符串驻留库,作为 Servo 项目的一部分开发

即时编译

  • iced-x86 快速且正确的 x86/x64 反汇编器、汇编器和指令解码器
  • masm-rs A JSC/SpiderMonkey 类似宏汇编器
  • b3 B3、LLVM-like 后端的 Rust 端口
  • jit (LibJIT) 使用 LibJIT 绑定在 Rust 中进行即时编译
  • lightning-sys GNU 防锈闪电绑定
  • gccjit libgccjit 的高级 Rust 绑定
  • cranelift Cranelift 是一个低级可重定向代码生成器
    • cranelift-jit-demo 玩具语言的 JIT 编译器和运行时,使用 Cranelift
  • dynasm 用 Rust 编写的用于 Rust 的动态汇编器

编译框架

  • xrcf eXtensible 和可重用编译器框架 (xrcf) 是用于构建编译器的库

错误报告

  • codespan-reporting 基于文本的编程语言的漂亮诊断报告
  • codespan 用于跟踪源代码中位置的数据结构
  • text-sizeu32(u32, u32) 提供新类型包装器以用作文本偏移量的库
  • ariadne 一个精美的诊断和报告箱
  • miette 花哨的诊断报告库和协议,适合我们这些不是编译器黑客的凡人

语言服务器协议

  • lsp-types 使用 VSCode 的语言服务器协议与语言服务器交互的类型
  • tower-lsp 基于Tower的语言服务器协议实现
  • codespan-lsp 代码跨度类型和语言服务器协议类型之间的转换
  • lsp-server 通用 LSP 服务器脚手架

测试

  • goldentests 文件测试库,可以在同一测试文件中配置测试
  • lang_tester 编译器和 VMs 的简明语言测试框架(仅限 Linux)
  • libtest-mimic 动态构建一个外观和行为类似于 Rust 内置测试工具的测试工具
  • compiletest_rs Rust 编译器的编译测试实用程序作为独立的测试工具
  • insta Rust 的快照测试库
  • k9 快照测试和更好的断言
  • bulk_examples_generator 在 Rust 中创建的工具,用于创建基于 pest 语法的随机示例 dozens/hundreds/thousands/millions (PEG)

统一码

  • unicode-xid 根据 Unicode 标准附件 #31 规则确定 char 是否是解析器和/或词法分析器的有效标识符。
  • unicode-normalisation Unicode 字符组合和分解实用程序,如 Unicode 标准附件 #15 中所述
  • unicode-segmentation 根据 Unicode 标准附件 #29 规则,在字素簇或字边界上分割字符串的迭代器
  • unicode-width 根据 Unicode 标准附件 #11 规则确定 char 和 str 类型的显示宽度
  • lexical-sort unicode 字符串的字典顺序排序

增量编译

  • salsa 按需增量计算的通用框架
  • verde 一个清爽简单的增量计算库

Floats/Ints/Bools

  • lexical 词法、字符串转换例程(适用于 stdno_std 环境的快速词法转换例程)
  • lexical-core 词法、字符串转换例程(用于 no_std 上下文的低级词法转换例程)
  • lexical_bool 可以从字符串解析的类似 bool 类型
  • ryu PLDI'18 论文 Ryū 的 Rust 实现:Ulf Adams 的快速浮点到字符串转换
  • ryu-js Ryū-js 是 ryu crate 的一个分支,经过调整以符合 ECMAScript 数字到字符串算法
  • hexponent C11 兼容的十六进制浮点解析
  • ordered-float 浮点数总排序
  • half 用于 Rust 的半精度浮点 f16 类型,实现 IEEE 754-2008 标准
  • f128 绑定到 gccquadmath 库
  • approx 近似浮点相等比较和断言

二进制和目标文件解析、生成和处理

  • goblin 一个顽皮的跨平台 ELF、Mach-o 和 PE 二进制解析和加载包
  • gimli 用于读写 DWARF 调试格式的库。
  • faerie ELF 和 Mach-o 本机二进制目标文件发射器
  • object 读写目标文件格式的统一接口。
  • elf 用于解析 ELF 文件的纯 Rust 库
  • elfkit 纯 Rust 的 elf 解析器和操作库

符号执行

  • haybale LLVM IR 的符号执行

求解器

  • rsmt2 SMT-LIB 2 兼容 SMT 解算器的包装。
  • z3 来自 Microsoft Research 的 Z3 SMT 解算器的高级 Rust 绑定
  • z3-sys 来自 Microsoft Research 的 Z3 SMT 解算器的低级绑定
  • z3_ref Z3 SMT 解算器的高级接口
  • z3d Z3 DSL Rust 接口
  • boolector Boolector SMT 解算器的安全高级绑定
  • boolector-sys Boolector SMT 解算器的低级绑定
  • smt2utils SMT-LIB-2 标准的库和工具
    • smt2parser SMT2 命令的通用解析器,由 SMT-LIB-2 标准指定
    • smt2proxy 一种实验性二进制工具,用于在将 SMT2 命令发送到 SMT 求解器之前拦截和预处理这些命令
    • z3tracer 通过将 trace=true proof=true 传递给 Z3 获得的 Z3 跟踪日志的实验解析器
  • good_lp Rust 混合整数线性规划,具有用户友好的 API。该包允许对 LP 问题进行建模,并允许您使用各种求解器来解决它们。
  • Axiom Profiler 一种工具,用于可视化、分析和理解在运行 SMT 解算器时通过电子匹配生成的量词实例化
  • [2017][PDF]基于可满足性模Theories的反例引导归纳优化

CLI

  • structopt 通过定义结构体解析命令行参数
  • clap 一个简单易用、高效、功能齐全的命令行参数解析器
  • pico-args 一个超简单的 CLI 参数解析器
  • argh 针对代码大小优化的基于派生的参数解析器

配置

  • etcetera 一个库,旨在允许您确定应用程序的配置、缓存和数据文件的位置。现有的 Rust 库通常不会让您选择它们遵循哪种 standards/conventions(Etcetera 称之为“策略”)。另一方面,等等,给你选择
  • toml 用于 Rust 的 TOML 解码器和编码器(可选使用 serde)
  • envy 将环境变量反序列化为类型安全结构(使用 serde)

重复

  • rustyline Rustyline,基于 Antirez 的 Linenoise 的 readline 实现
  • repl-rs 库,为您的应用程序生成 REPL
  • termwiz 适用于 Unix 和 Windows 的终端向导

字符串处理

  • beef 更快、更紧凑地实现 Cow
  • smol_str 小字符串优化字符串类型,具有 O(1) 克隆
  • smallstring '小字符串'优化:使用smallvec在堆栈上存储小字符串
  • heck Heck 是一个大小写转换库,用于提供 CamelCase 和 Snake_case 等常见大小写之间的大小写转换。它旨在支持 unicode、内部一致且性能相当良好
  • ropey Ropey 是 Rust 的 utf8 文本绳,设计为文本编辑器等应用程序的后备文本缓冲区。 Ropey 速度快、功能强大,可以轻松处理大量文本和内存不连贯的编辑。

语法树

  • rowan 通用无损语法树
  • cstree rowan 的一个分支,具有线程安全语法树和内置 源字符串驻留

漂亮的印刷

  • pretty Rust 中的 Wadler 风格的漂亮打印组合器

变量绑定

  • moniker 用于跟踪作用域中变量的自动变量绑定库

缓存

  • cached 缓存结构和简化的函数记忆

WASM

  • wain WebAssembly 用 Safe Rust 编写的解释器,零依赖
  • wasmer Wasmer WebAssembly 运行时的高级公共 API
  • wasmtime 高级 API 用于公开 Wasmtime 运行时
  • wasmtime-jit JIT- Cranelift 中 WebAsssembly 代码的样式执行
  • wasmlite-parser 该包解析 WebAssembly 模块,并可以根据从模块中提取的数据生成 LLVM IR
  • parity-wasm-cp WebAssembly 二进制格式 serialization/deserialization/interpreter
  • substrate-wasm-builder 用于构建 WASM 二进制文件的实用程序
  • walrus 用于执行 WebAssembly 转换的库

记录

  • tracing Rust 应用程序级跟踪
    • tracing-tree 打印跨度和事件树的跟踪层。
    • tracing-forest 保持并发任务的跟踪数据之间的上下文一致性
    • tracing-timing 基于 tracing 的事件间时序指标
    • tracing-coz 对 的 Rust 跟踪支持 coz 因果分析器
    • tracing-flame 用于生成折叠堆栈跟踪的跟踪 Layer,用于使用 inferno 生成火焰图和火焰图
    • test-env-log 一个负责自动初始化日志和/或Rust 测试跟踪的包。
    • tracing-unwrap 该包在 ResultOption 类型上提供 .unwrap_or_log().expect_or_log() 方法,将失败的解包记录到tracing::Subscriber
  • log 提供轻量级日志记录外观的 Rust 库
  • slog 一个由可重用组件组成的生态系统,用于 Rust 的结构化、可扩展、可组合和上下文日志记录

存储

  • map 具有持久唯一键来访问存储值的容器:插入、删除和访问都需要 O(1) 时间,开销较低。
  • indexmap 顺序一致、迭代速度快的哈希表
  • vecmap 基于Vec的Map和Set数据结构

不相交集

  • union-find 并查找操作的结构体和方法
  • ena Rust 中并查找的实现;从 rustc 中提取(并由其使用)

增量分析

  • timely 论文中介绍的低延迟循环数据流计算模型 Naiad:及时数据流系统
    • differential-dataflow 一种数据并行编程框架,旨在高效处理大量数据并快速响应输入集合中的任意变化,是 差分数据流 在 及时数据流上的实现 关于 Rust。
    • dogsdogsdogs 差异数据流中最坏情况的最佳连接和增量查询
    • dataflow-join Ngo 等人的 GenericJoin 在及时数据流中的流式实现
    • timely-sort Rust 中基数排序的缓存感知实现
    • diagnostics timely-datafflowdifferential-dataflow 的诊断工具 计算
  • differential-datalog 基于 timely-dataflowdifferential-dataflow 的增量计算编程语言,类似于 IncASouffle

及时的数据流资源

  • Naiad:及时的数据流系统
  • 及时数据流书
  • 差分数据流
  • 差分数据流书籍
  • 差分数据流中的数独:博客、视频系列
  • 及时数据流简介:第 1 部分、第 2 部分、第 3 部分
  • 差分数据流简介:第 1 部分、第 2 部分
  • 差分数据流与微积分的结合

模糊测试

  • honggfuzz-rs Honggfuzz 是一款面向安全的模糊测试工具,具有强大的分析选项,支持基于代码覆盖率的进化式、反馈驱动的模糊测试
  • cargo-fuzz 使用libFuzzer的cargo子命令
  • libfuzzer-sys LLVM 的 libFuzzer 运行时库的 Barebones 包装器
  • wasm-smith A WebAssembly 测试用例生成器
  • fuzzcheck 结构感知覆盖引导模糊器
  • libafl
  • test-fuzz

模糊测试资源

  • 对解析器进行模糊测试
  • Rust Fuzz 书
  • 模糊检查指南
  • 模糊测试书
  • LibAFL 导轨

图表

  • egg Egg 是一个灵活、高性能的电子图库
    • Herbie 使用 egg 来提高浮点计算的精度(语言、规则、 分析()
    • Szalinski 使用 egg 来简化 CAD 程序(语言、规则、施加器)
    • Glenside 使用 egg 来优化张量程序(语言、规则、 分析()
  • petgraph 图形数据结构库。提供图类型和图算法
  • timely 论文中介绍的低延迟循环数据流计算模型 Naiad:及时数据流系统
  • differential-dataflow 一种数据并行编程框架,旨在高效处理大量数据并快速响应输入集合中的任意变化,是 差分数据流 在 及时数据流上的实现 关于 Rust。

类型检查

  • rusttyc 一个接口,允许将基于类似 Hindney-Milner 的有界类型 meet-semilattice 的推理规则直观地转换为 Rust 代码
  • polytype Hindley-Milner 多态类型系统

窥孔优化

  • egg Egg 是一个灵活、高性能的电子图库
  • peepmatic 用于窥孔优化的 DSL 以及用于从中生成窥孔优化器的编译器

垃圾收集

  • broom 符合人体工程学的跟踪垃圾收集器,支持标记和扫描垃圾收集
  • gc Rust 的简单跟踪(标记和清除)垃圾收集器
  • shredder 垃圾收集作为 Rust 的库
  • comet 用于在 Rust 中实现 VMs 的垃圾收集库
  • mmtk 内存管理 ToolKit (MMTk) 用于使用 VMs 语言进行可移植且高效的内存管理

指南和资源

  • Making a language in Rust 关于使用 Rust 编程语言制作一种名为 Eldiro 的编程语言的系列
  • 制作解释器 实现从解析到垃圾收集再到字节码的所有内容 VMs,强烈推荐作为语言开发入门(主页)
  • 使用 Rust 创建您自己的编程语言
  • 从哪里开始手写解析器(用 Rust)
  • 用 Rust 编写一个简单的解析器
  • GC 和 Rust 第 0 部分、第 1 部分 和 第 2 部分
  • Matklad 谈 pratt 解析:简单但强大的 Pratt 解析 和 从 Pratt 到 Dikjstra
  • 纯 AST 基于 linting 很糟糕
  • LLVM 的 Rust 中的万花筒 万花筒语言教程,展示如何在 Rust 中使用 LLVM 实现简单的语言
  • 从哪里开始手写解析器(用 Rust) 编程语言解析简介,其中我们手写解析器并在一些真实输入上运行它
  • x86 和 amd64 指令参考
  • X86 操作码和指令参考
  • SSA 表格 上的线性扫描寄存器分配
  • 符号执行相关论文参考书目
  • Intel、AMD 和 VIA 的指令延迟、吞吐量和微操作细分 CPUs
  • [1995][PDF] 符号范围 Propagation
  • [2001][PDF] 用于优化 Compilers 的高效符号分析
  • [2021][视频] LLVM 中消除冗余条件的新方法
  • [2017][视频]多面体值与内存Analysis
  • 简化:用于程序检查的定理证明器
  • Rust 中优雅且高性能的递归
  • JavaScriptCore 中的猜测
  • 惠比特犬:Guile 的新 GC

类型检查

  • 少于 100 行 Rust 的类型检查(归功于 @zesterer)
  • 在 OCaml 的约 200 行中进行双向类型检查(用 OCaml 编写,归功于 @mb64)
  • [2020][PDF] 完整且简单的高阶双向类型检查 Polymorphism
  • “完整且简单的高阶多态性双向类型检查” 的实现(用 Rust 编写,来自 @segeljakt)
  • “完整且简单的高阶多态性双向类型检查” 的实现(用 Rust 编写,来自 @JDemler)
  • 一种松散地基于高阶多态性的完整且简单的双向类型检查的双向类型推理系统。(用 Haskell 编写)
  • “针对高阶多态性的完整且简单的双向类型检查”中描述的类型检查器的教学实现(用 OCaml 编写)
  • 具有双向类型推断和代数数据类型的谓词多态语言的实现 (用 Haskell 编写)

内联

  • Visual Studio 中的内联决策
  • C++ 内衬改进:Zipliner
  • John Carmack 谈内联代码
  • RyuJIT 如何内联函数(启发式)
  • 更智能 C/C++ 内联属性((展平))
  • 编译器是否将内联作为提示?
  • cmd/compile:改进内联成本模型
  • “内联”是什么意思?
  • 泽布 VM check_should_inline_func()
  • Warp:改进了 Firefox 83 中的 JS 性能
  • 当短方法得到回报时:JIT 内联
  • 跨模块内联 - wingolog
  • 内联 Rust
  • 并不总是 iCache
  • [2003][PDF] 自适应在线上下文相关 Inlining
  • [2003][PDF] 内联或不内联。增强型内联 Decisions
  • [2004][PDF] 快速有效的程序 Inlining
  • [2016][PDF] CSE P 501 - 编译器。内联和 Devirtualization
  • [2017][PDF] TurboFan 内联 Heuristics
  • [2019][PDF] 使用后内联 Transformations 指导内联决策
  • [2019][PDF] 一种优化驱动的增量内联替换算法 Compilers
  • [2021][PDF] 内联代码大小 Reduction

RVSDG

  • [2020][PDF] RVSDG:优化 Compilers 的中间表示
  • [2018][PDF] RVSDG:多核 Era 的中间表示
  • [2015][PDF]需求依赖控制流的完美重构Graphs
  • 显式自动并行化原理、技术和工具
  • [幻灯片] 使用区域化值状态依赖 Graph 进行编译
  • JLM RVSDG 实现 (C++)
  • JIVE RVSDG 图实现(C++)
  • RVSDG 查看器 (C++)
  • 颅内性交 RVSDG Brain骂人 优化器(铁锈)
  • [2018][PDF] Nodes之海的语义推理
  • [1994][PDF] 值依赖图:没有 taxation 的表示
  • [2016][PDF] 值状态流图:用于加速空间中的控制密集型代码的数据流编译器 IR Hardware
  • Numba Python JIT RVSDG 优化器
  • [已存档] Rain IR 具有 liftetimes 的依赖类型 RVSDG,用 Rust 实现

等饱和度

  • [2010][PDF] 等式饱和:Optimization 的新方法
  • [2020][PDF]彩蛋:快速且可扩展的平等Saturation
  • [2021][PDF] 使用相等性重写规则推理 Saturation
  • [2021][PDF] 草图引导的等式饱和度:使用 Bindings 的语言将等式饱和度扩展到复杂的优化
  • [2021][PDF] Caviar:基于电子图的 TRS 自动代码 Optimization
  • [2002][PDF] SPORES:通过大规模线性关系等式饱和进行和积优化 Algebra
  • [2021][PDF] 关系 E-Matching
  • [2021][PDF] 使用相等性重写规则推理 Saturation

未分类

  • 转数比弧度更好 一篇关于使用转数而不是 pi 或 tau 进行三角计算的有趣博客文章,可能会为一些有趣的代码转换提供灵感
  • 现代硬件算法(俄语版本) 现代硬件的低级性能调整
相关资讯
点击查看更多
游戏推荐
推荐专题
热门阅读
推荐下载