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

创业   2025-01-04 17:01   江苏  
Python客栈设为“星标
第一时间收到最新资
来源 | 经授权转 OSC开源社区(ID: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 版本,其中也包括一些很酷的东西。我们做这件事很开心。

相关来源

https://fishshell.com/blog/rustport

https://github.com/fish-shell/fish-shell/pull/9512


往期回顾
1、优秀 Python 代码最强技巧!
2、操作系统是如何实现的:宏内核 VS 微内核
3、阿里云服务器翻车!竟然是共享带宽的
4、为什么不让程序员直接对接客户,而是通过产品经理?
5、阿里玉伯:我大概能经历前端程序员从诞生到消亡的全过程

点击关注公众号,阅读更多精彩内容

Python客栈
专注Python基础教程,分享Python模块基础使用,关注Python爬虫,人工智能,用简单粗暴的大白话讲解Python知识。
 最新文章