rust-langdev:实践指南
面对实际交付,我看rust-langdev的重点不在星标,而在这项能力:Rust 的语言开发库。这类软件开发工具真正难在依赖、接口和异常处理往往比主路径更影响采用,仓库说明只能作为第一层证据。与其反复读介绍,不如在隔离分支完成一个可回滚的小任务,再依据安装步骤、接口契约、测试结果和错误信息做取舍。对需要可检查开发流程而非单次演示的工程师来说,这个仓库值得继续验证;只求即装即用的人则要先看维护成本。
Rust 的 Langdev 库
- 词法分析器
- 解析器
- 代码生成
- 字符串实习
- 即时编译
- 编译框架
- 错误报告
- 语言服务器协议
- 测试
- 增量编译
- Floats/Ints/Bools
- 二进制和目标文件解析、生成和处理
- 求解器
- CLI
- 配置
- 复制
- 字符串处理
- 语法树
- 漂亮的印刷
- 变量绑定
- 缓存
- WASM
- 日志记录
- 存储
- 不相交集
- 增量分析
- 及时数据流资源
- 模糊测试
- 模糊测试资源
- 图表
- 型式检查
- 窥孔优化
- 垃圾收集
- 指南和资源
- 型式检查
- 内联
- RVSDG
- 等饱和度
- 未分类
词法分析器
logosLogos 有两个目标:让创建 Lexer 变得容易,这样您就可以专注于更复杂的问题,并使生成的 Lexer 比您手写的任何东西都快lrlex生成 Rust 代码的lex/flex的替代品lexgen一个功能齐全的词法分析器生成器,作为 proc 宏实现。
解析器
lalrpop方便的 LR(1) 解析器生成器nom面向字节、零拷贝、解析器组合器库combine具有零拷贝支持的任意流上的快速解析器组合器。pomPEG 使用运算符重载而不使用宏的解析器组合器。peg一个简单的解析表达式语法 (PEG) 解析器生成器。glueGlue 是一个解析器组合器框架,用于解析基于文本的格式,它易于使用且相对较快prattRust 的通用 pratt 解析器pest用 Rust 编写的通用解析器,重点关注使用解析表达式语法的可访问性、正确性和性能(PEG)lrpar与 Yacc 兼容的解析器。nimbleparse_lsp用于快速开发 lrpar 解析器的 LSP 服务器,它绕过代码生成来解析语法更改时的输入缓冲区。
tree-sitter一个解析器生成器,用于构建快速的编辑器友好解析器,具有流、增量、可恢复(重新)解析、超时和取消以及高级语法节点查询等功能。rowan通用无损语法树ungrammarA DSL 用于指定具体语法树,请参阅 这篇介绍性文章
cstreerowan的一个分支,具有线程安全语法树和内置 源字符串驻留chompChomp 是一个快速的单子式解析器组合器库,设计用于稳定的 Rustoak嵌入 Rust 代码中的类型化解析器生成器,用于解析表达式语法chumsky一个友好的解析器组合器箱,可以轻松编写具有错误恢复功能的 LL(k) 解析器rust-sitter用于定义 Tree-sitter 语法和 Rust 逻辑的包
正则表达式
regexRust 正则表达式的实现。该实现使用有限自动机并保证所有输入的线性时间匹配。regress面向 EcmaScript 语法的正则表达式引擎。onigRust-Onig 是 Oniguruma 正则表达式库的一组 Rust 绑定。
代码生成器
craneliftCranelift 是一个低级可重定向代码生成器llvm-sys绑定到 LLVM 的 C APIiced-x86快速且正确的 x86/x64 反汇编器、汇编器和指令解码器llama友好的 LLVM 绑定inkwellInkwell 旨在通过安全包装 llvm-sys 来帮助您编写自己的编程语言- 自然 Rust 数据结构中的
llvm-irLLVM IR llvmenv管理多个 LLVM/Clang 构建walrus用于执行 WebAssembly 转换的库cilk受 Rust 编写的 LLVM 影响的玩具编译器基础结构。
字符串实习
lasso具有最小内存占用和竞技场分配的多线程和单线程字符串内部string-interner高效缓存字符串的数据结构simple-interner一个简单的仅附加内部string_cacheRust 的字符串驻留库,作为 Servo 项目的一部分开发
即时编译
iced-x86快速且正确的 x86/x64 反汇编器、汇编器和指令解码器masm-rsA JSC/SpiderMonkey 类似宏汇编器b3B3、LLVM-like 后端的 Rust 端口jit(LibJIT) 使用 LibJIT 绑定在 Rust 中进行即时编译lightning-sysGNU 防锈闪电绑定gccjitlibgccjit 的高级 Rust 绑定craneliftCranelift 是一个低级可重定向代码生成器cranelift-jit-demo玩具语言的 JIT 编译器和运行时,使用 Cranelift
dynasm用 Rust 编写的用于 Rust 的动态汇编器
编译框架
xrcfeXtensible 和可重用编译器框架 (xrcf) 是用于构建编译器的库
错误报告
codespan-reporting基于文本的编程语言的漂亮诊断报告codespan用于跟踪源代码中位置的数据结构text-size为u32和(u32, u32)提供新类型包装器以用作文本偏移量的库ariadne一个精美的诊断和报告箱miette花哨的诊断报告库和协议,适合我们这些不是编译器黑客的凡人
语言服务器协议
lsp-types使用 VSCode 的语言服务器协议与语言服务器交互的类型tower-lsp基于Tower的语言服务器协议实现codespan-lsp代码跨度类型和语言服务器协议类型之间的转换lsp-server通用 LSP 服务器脚手架
测试
goldentests文件测试库,可以在同一测试文件中配置测试lang_tester编译器和 VMs 的简明语言测试框架(仅限 Linux)libtest-mimic动态构建一个外观和行为类似于 Rust 内置测试工具的测试工具compiletest_rsRust 编译器的编译测试实用程序作为独立的测试工具instaRust 的快照测试库k9快照测试和更好的断言bulk_examples_generator在 Rust 中创建的工具,用于创建基于 pest 语法的随机示例 dozens/hundreds/thousands/millions (PEG)
统一码
unicode-xid根据 Unicode 标准附件 #31 规则确定 char 是否是解析器和/或词法分析器的有效标识符。unicode-normalisationUnicode 字符组合和分解实用程序,如 Unicode 标准附件 #15 中所述unicode-segmentation根据 Unicode 标准附件 #29 规则,在字素簇或字边界上分割字符串的迭代器unicode-width根据 Unicode 标准附件 #11 规则确定 char 和 str 类型的显示宽度lexical-sortunicode 字符串的字典顺序排序
增量编译
salsa按需增量计算的通用框架verde一个清爽简单的增量计算库
Floats/Ints/Bools
lexical词法、字符串转换例程(适用于std和no_std环境的快速词法转换例程)lexical-core词法、字符串转换例程(用于no_std上下文的低级词法转换例程)lexical_bool可以从字符串解析的类似 bool 类型ryuPLDI'18 论文 Ryū 的 Rust 实现:Ulf Adams 的快速浮点到字符串转换ryu-jsRyū-js 是 ryu crate 的一个分支,经过调整以符合 ECMAScript 数字到字符串算法hexponentC11 兼容的十六进制浮点解析ordered-float浮点数总排序half用于 Rust 的半精度浮点f16类型,实现 IEEE 754-2008 标准f128绑定到 gccquadmath 库approx近似浮点相等比较和断言
二进制和目标文件解析、生成和处理
goblin一个顽皮的跨平台 ELF、Mach-o 和 PE 二进制解析和加载包gimli用于读写 DWARF 调试格式的库。faerieELF 和 Mach-o 本机二进制目标文件发射器object读写目标文件格式的统一接口。elf用于解析 ELF 文件的纯 Rust 库elfkit纯 Rust 的 elf 解析器和操作库
符号执行
haybaleLLVM IR 的符号执行
求解器
rsmt2SMT-LIB 2 兼容 SMT 解算器的包装。z3来自 Microsoft Research 的 Z3 SMT 解算器的高级 Rust 绑定z3-sys来自 Microsoft Research 的 Z3 SMT 解算器的低级绑定z3_refZ3 SMT 解算器的高级接口z3dZ3 DSL Rust 接口boolectorBoolector SMT 解算器的安全高级绑定boolector-sysBoolector SMT 解算器的低级绑定smt2utilsSMT-LIB-2 标准的库和工具smt2parserSMT2 命令的通用解析器,由 SMT-LIB-2 标准指定smt2proxy一种实验性二进制工具,用于在将 SMT2 命令发送到 SMT 求解器之前拦截和预处理这些命令z3tracer通过将trace=true proof=true传递给 Z3 获得的 Z3 跟踪日志的实验解析器
good_lpRust 混合整数线性规划,具有用户友好的 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)
重复
rustylineRustyline,基于 Antirez 的 Linenoise 的 readline 实现repl-rs库,为您的应用程序生成 REPLtermwiz适用于 Unix 和 Windows 的终端向导
字符串处理
beef更快、更紧凑地实现Cow。smol_str小字符串优化字符串类型,具有 O(1) 克隆smallstring'小字符串'优化:使用smallvec在堆栈上存储小字符串heckHeck 是一个大小写转换库,用于提供 CamelCase 和 Snake_case 等常见大小写之间的大小写转换。它旨在支持 unicode、内部一致且性能相当良好ropeyRopey 是 Rust 的 utf8 文本绳,设计为文本编辑器等应用程序的后备文本缓冲区。 Ropey 速度快、功能强大,可以轻松处理大量文本和内存不连贯的编辑。
语法树
rowan通用无损语法树cstreerowan的一个分支,具有线程安全语法树和内置 源字符串驻留
漂亮的印刷
prettyRust 中的 Wadler 风格的漂亮打印组合器
变量绑定
moniker用于跟踪作用域中变量的自动变量绑定库
缓存
cached缓存结构和简化的函数记忆
WASM
wainWebAssembly 用 Safe Rust 编写的解释器,零依赖wasmerWasmer WebAssembly 运行时的高级公共 APIwasmtime高级 API 用于公开 Wasmtime 运行时wasmtime-jitJIT- Cranelift 中 WebAsssembly 代码的样式执行wasmlite-parser该包解析 WebAssembly 模块,并可以根据从模块中提取的数据生成 LLVM IRparity-wasm-cpWebAssembly 二进制格式 serialization/deserialization/interpretersubstrate-wasm-builder用于构建 WASM 二进制文件的实用程序walrus用于执行 WebAssembly 转换的库
记录
tracingRust 应用程序级跟踪tracing-tree打印跨度和事件树的跟踪层。tracing-forest保持并发任务的跟踪数据之间的上下文一致性tracing-timing基于tracing的事件间时序指标tracing-coz对 的 Rust 跟踪支持 coz 因果分析器tracing-flame用于生成折叠堆栈跟踪的跟踪Layer,用于使用 inferno 生成火焰图和火焰图test-env-log一个负责自动初始化日志和/或Rust 测试跟踪的包。tracing-unwrap该包在Result和Option类型上提供.unwrap_or_log()和.expect_or_log()方法,将失败的解包记录到tracing::Subscriber
log提供轻量级日志记录外观的 Rust 库slog一个由可重用组件组成的生态系统,用于 Rust 的结构化、可扩展、可组合和上下文日志记录
存储
map具有持久唯一键来访问存储值的容器:插入、删除和访问都需要 O(1) 时间,开销较低。indexmap顺序一致、迭代速度快的哈希表vecmap基于Vec的Map和Set数据结构
不相交集
union-find并查找操作的结构体和方法enaRust 中并查找的实现;从 rustc 中提取(并由其使用)
增量分析
timely论文中介绍的低延迟循环数据流计算模型 Naiad:及时数据流系统differential-dataflow一种数据并行编程框架,旨在高效处理大量数据并快速响应输入集合中的任意变化,是 差分数据流 在 及时数据流上的实现 关于 Rust。dogsdogsdogs差异数据流中最坏情况的最佳连接和增量查询dataflow-joinNgo 等人的GenericJoin在及时数据流中的流式实现timely-sortRust 中基数排序的缓存感知实现diagnosticstimely-datafflow和differential-dataflow的诊断工具 计算
differential-datalog基于timely-dataflow和differential-dataflow的增量计算编程语言,类似于IncA或Souffle
及时的数据流资源
- Naiad:及时的数据流系统
- 及时数据流书
- 差分数据流
- 差分数据流书籍
- 差分数据流中的数独:博客、视频系列
- 及时数据流简介:第 1 部分、第 2 部分、第 3 部分
- 差分数据流简介:第 1 部分、第 2 部分
- 差分数据流与微积分的结合
模糊测试
honggfuzz-rsHonggfuzz 是一款面向安全的模糊测试工具,具有强大的分析选项,支持基于代码覆盖率的进化式、反馈驱动的模糊测试cargo-fuzz使用libFuzzer的cargo子命令libfuzzer-sysLLVM 的 libFuzzer 运行时库的 Barebones 包装器wasm-smithA WebAssembly 测试用例生成器fuzzcheck结构感知覆盖引导模糊器libafltest-fuzz
模糊测试资源
- 对解析器进行模糊测试
- Rust Fuzz 书
- 模糊检查指南
- 模糊测试书
- LibAFL 导轨
图表
eggEgg 是一个灵活、高性能的电子图库- Herbie 使用
egg来提高浮点计算的精度(语言、规则、 分析() - Szalinski 使用
egg来简化 CAD 程序(语言、规则、施加器) - Glenside 使用
egg来优化张量程序(语言、规则、 分析()
- Herbie 使用
petgraph图形数据结构库。提供图类型和图算法timely论文中介绍的低延迟循环数据流计算模型 Naiad:及时数据流系统differential-dataflow一种数据并行编程框架,旨在高效处理大量数据并快速响应输入集合中的任意变化,是 差分数据流 在 及时数据流上的实现 关于 Rust。
类型检查
rusttyc一个接口,允许将基于类似 Hindney-Milner 的有界类型 meet-semilattice 的推理规则直观地转换为 Rust 代码polytypeHindley-Milner 多态类型系统
窥孔优化
eggEgg 是一个灵活、高性能的电子图库peepmatic用于窥孔优化的 DSL 以及用于从中生成窥孔优化器的编译器
垃圾收集
broom符合人体工程学的跟踪垃圾收集器,支持标记和扫描垃圾收集gcRust 的简单跟踪(标记和清除)垃圾收集器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 进行三角计算的有趣博客文章,可能会为一些有趣的代码转换提供灵感
- 现代硬件算法(俄语版本) 现代硬件的低级性能调整
相关资讯
-
09.12
awesome-solana-nfts:实践指南
-
09.12
securitybot:实践指南
-
09.12
rust-langdev:实践指南
-
09.12
sentry-ruby:实践指南
-
09.12
MonoMod:实践指南
-
09.12
paris:实践指南
游戏推荐
推荐专题
热门阅读
-
- sentry-ruby:实践指南
- 09.12
-
- awesome-solana-nfts:实践指南
- 09.12
-
- rust-langdev:实践指南
- 09.12
推荐下载
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏