rustc 的并行编译性能优化探索
Nethercote 是一位从事 rustc 的软件工程师。他介绍了最近在 rustc 上做的一些性能工作,重点介绍了 rustc 是如何将代码分割成代码生成单元(CGU),以及这对编译速度和代码质量有什么影响。
他解释了不同数量和大小的 CGU 之间的权衡,以及 rustc 如何使用 LLVM 来并行化代码生成和优化。Nethercote 还探索了一些形成和排序 CGU 的替代方法,并报告了他的实验结果。
Nethercote 发现,很多时候,无法在编译速度、内存占用、编译体积和质量上都实现提升,一个指标的提升,经常伴随另一个性能指标的下降。尽管他没有发现比现有方法更明显的改进,但还是希望在未来继续研究这个问题,同时他的这份博客也写的非常详尽,值得深入学习。
实现一个更快的 Lexer
词法分析(lexical analysis) 是编译器的第一个阶段,实现词法分析的代码称为 lexer。
有人最近研究了 logos 这个 rust 中广受欢迎的 lexer,logos 声称其目标是能比手动实现的 lexer 更快,作者提出了质疑,因为在他看来,通用性和性能无法兼得。因此他一步步实现了一个 lexer,探索了多种优化技巧,并与 logos 进行了多轮性能对比。
最终的结果表明,手动实现的基于状态机的 lexer 比 logos 实现了 20% 左右的性能提升。
使用 Rust 实现 DLL 注入
作者原先一直在用 C++ 写逆向工具,但是 C++ 这门语言不是很友好,于是研究了下如何使用 Rust 实现 DLL 注入的“工具”。
大致原理就是让 Rust 生成一个 C 样式的 DLL,然后使用 unsafe 去操作裸指针,操作程序内存,最后实现一下 DLL 注入就可以了。
-- From 日报小组 RustPlumber
社区学习交流平台订阅:
评论区
写评论还没有评论