为什么我要用 Rust 重写 tmux?

💡 原文中文,约10600字,阅读约需26分钟。
📝

内容提要

作者在过去六个月内将tmux从C语言移植到Rust,完成了100%的Rust代码。虽然使用C2Rust工具生成的代码可运行,但维护性差,因此决定手动翻译。项目中遇到许多错误,最终实现了Rust接口并简化了构建过程。尽管代码安全性仍有待提高,作者已发布0.0.1版本,期待进一步改进。

🎯

关键要点

  • 作者在过去六个月内将tmux从C语言移植到Rust,完成了100%的Rust代码。
  • 项目开始时使用C2Rust工具,但生成的代码维护性差,因此决定手动翻译。
  • 手动翻译过程中遇到许多错误,最终实现了Rust接口并简化了构建过程。
  • 构建过程需要对项目的构建方式有深刻理解,使用了自定义的build.sh脚本。
  • 在翻译过程中引入了许多错误,作者分享了几个错误的发现和修复过程。
  • Rust中使用原始指针来替代C语言中的指针,因Rust引用的某些不变量无法维护。
  • tmux广泛使用的侵入式宏数据结构在Rust中得到了良好的实现。
  • 作者使用lalrpop库重新实现了tmux的自定义解析器,简化了构建过程。
  • 开发过程中使用了多种文本编辑器和AI工具,最终决定停止使用C2Rust。
  • 尽管代码已完成100%,但作者认为仍需改进代码的安全性,并已发布0.0.1版本。

延伸问答

为什么作者选择用Rust重写tmux?

作者选择用Rust重写tmux主要是出于个人兴趣,尽管没有特别的理由,但这是一个业余爱好项目。

在将tmux从C语言移植到Rust的过程中遇到了哪些主要问题?

主要问题包括生成的Rust代码维护性差、翻译过程中引入的错误,以及对项目构建方式的深刻理解。

作者是如何简化tmux的构建过程的?

作者通过编写自定义的build.sh脚本和使用cc crate来简化构建过程,确保Rust和C代码能够正确链接。

Rust中如何处理C语言中的指针?

Rust中使用原始指针(*mut T和*const T)来替代C语言中的指针,因为Rust引用的某些不变量无法维护。

作者在翻译过程中使用了哪些工具和编辑器?

作者使用了多种文本编辑器和AI工具,主要使用neovim进行开发,但最终停止使用AI工具,因为没有显著提高效率。

tmux的自定义解析器是如何实现的?

tmux的自定义解析器是通过使用lalrpop库重新实现的,该库的代码结构与yacc相似,便于进行一对一的转换。

🏷️

标签

➡️

继续阅读