【Rust日报】2023-07-11 rustc 的并行编译性能优化探索

rustc 的并行编译性能优化探索

Nethercote 是一位从事 rustc 的软件工程师。他介绍了最近在 rustc 上做的一些性能工作,重点介绍了 rustc 是如何将代码分割成代码生成单元(CGU),以及这对编译速度和代码质量有什么影响。

他解释了不同数量和大小的 CGU 之间的权衡,以及 rustc 如何使用 LLVM 来并行化代码生成和优化。Nethercote 还探索了一些形成和排序 CGU 的替代方法,并报告了他的实验结果。

Nethercote 发现,很多时候,无法在编译速度、内存占用、编译体积和质量上都实现提升,一个指标的提升,经常伴随另一个性能指标的下降。尽管他没有发现比现有方法更明显的改进,但还是希望在未来继续研究这个问题,同时他的这份博客也写的非常详尽,值得深入学习。

  • 博客原文: https://nnethercote.github.io/2023/07/11/back-end-parallelism-in-the-rust-compiler.html

实现一个更快的 Lexer

词法分析(lexical analysis) 是编译器的第一个阶段,实现词法分析的代码称为 lexer。

有人最近研究了 logos 这个 rust 中广受欢迎的 lexer,logos 声称其目标是能比手动实现的 lexer 更快,作者提出了质疑,因为在他看来,通用性和性能无法兼得。因此他一步步实现了一个 lexer,探索了多种优化技巧,并与 logos 进行了多轮性能对比。

最终的结果表明,手动实现的基于状态机的 lexer 比 logos 实现了 20% 左右的性能提升。

  • 代码和性能测试仓库链接: https://github.com/dist1ll/lexer-exp

  • 原文链接: https://alic.dev/blog/fast-lexing

使用 Rust 实现 DLL 注入

作者原先一直在用 C++ 写逆向工具,但是 C++ 这门语言不是很友好,于是研究了下如何使用 Rust 实现 DLL 注入的“工具”。

大致原理就是让 Rust 生成一个 C 样式的 DLL,然后使用 unsafe 去操作裸指针,操作程序内存,最后实现一下 DLL 注入就可以了。

  • github链接: https://github.com/Choi-Jungwoo/crazy-dave

  • 原文链接: https://mp.weixin.qq.com/s/9hWGXAyNjP-Jxbvds68btA

-- From 日报小组 RustPlumber

社区学习交流平台订阅:

  • Rust.cc 论坛: 支持 rss

  • 微信公众号:Rust 语言中文社区

你可能感兴趣的:(rust,开发语言,后端)