用Rust重写近6万行C++代码是怎样的体验?

科技   2025-01-03 10:03   江苏  
将 脚本之家 设为“星标
第一时间收到文章更新

本文转载自微信公众号:OSC开源社区(oschina2013)

fish 是一款适用于 Linux、macOS 的命令行 Shell,最大特点就是方便易用、功能强大、智能并且用户友好。很多其他 Shell 需要配置才有的功能,fish 默认提供,不需要任何配置。

2023 年初,fish 作者宣布将采用 Rust 重写 Fish Shell 项目。

重写原因包括:
  • 没有人真正喜欢 C++ 或 CMake,也没有摆脱旧工具链的明确途径。每年的“开发痛苦”都会加重。
  • C++ 正在成为一种“遗留语言”,未来寻找贡献者将变得困难,而 Rust 拥有一个活跃且不断发展的社区。
  • Rust 是实现并发函数执行所需要的语言。
  • 用 Rust 编写将有助于 fish 继续被认为是现代和有价值的。

现在时隔将近两年,fish 4.0 最近发布了首个 beta,开发者称该版本包含 0% 的 C++ 和几乎 100% 的纯 Rust 代码

他表示将 fish shell 的代码库从 C++ 迁移到 Rust 初步取得了成功 ,从相关数据来看这是一项巨大工程:
  • 文件变更数 1155 个,110247 次新增(+)、88941 次删除(-),不包括转译
  • 200 多位贡献者共提交 2604 次
  • 498 issues
  • 近 2 年的开发周期
  • 将 57000 行 C++ 代码重写为 75000 行 Rust(外加 400 行 C)
  • 彻底清理 C++ 代码
Fish Shell 团队还表示,迁移至 Rust 的好处随着时间推移已显现出来。比如之前的 (n) curses 问题——现在已经没了,因为他们不再使用 curses。
取而代之的是他们切换至使用 Rust crate 包,它很好地满足了需求,即访问 terminfo 并扩展其序列。
这消除了一些尴尬的全局状态,也意味着那些从源代码构建的人不再需要确保 curses 已经“正确”安装在他们的系统上 —— 只需下载一个 crate 包并进行构建即可。
开发团队还提到了一些遗憾,比如此次重写 C++ 代码未能实现的一个目标是移除 CMake。这是因为虽然 cargo 在构建方面很出色,但在安装方面却很简陋Cargo 希望把所有东西都放在几个整洁的二进制文件中,然而这并不适用于他们的项目。

Fish 有大约 1200 个.fish 脚本(961 个补全,217 个相关函数),以及大约 130 页的文档(以 html 和 man 页面形式),还有 web-config 工具和 man 页生成器(两者都是用 python 编写的)。

总的来说:

“移植并非一帆风顺,而且并非一切都按计划进行。但总体而言,进展相当顺利。

我们现在有了一个我们非常喜欢的代码库,增加了一些在 C++ 时代难以实现的功能,而且还有更多功能正在开发中。

我们还创建了一个单独的 3.7 版本,其中也包括一些很酷的东西。我们做这件事很开心。

  推荐阅读:
  1. 我一直在用 Java,但是我一直都不喜欢 Java!
  2. 这些小 Bug,99% 的程序员都写过!
  3. 世界上最难的 5 种编程语言!网友看后惊讶道:竟不是C/C++?
  4. 我年薪40万,让你看看一年能到手多少?
  5. 2024 年 10 月编程语言排行榜|Rust 稳步攀升,即将进入 TIOBE 指数前十!

脚本之家
脚本之家(jb51.net)每天提供最新IT类资讯、原创内容、编程开发的教程与经验分享,送书福利天天在等你!
 最新文章