Fish Shell 4.0 发布:全面迁移 Rust,Shell 世界的一次革新!

360影视 2025-01-06 11:01 3

摘要:在快速迭代和技术革新的当下,备受欢迎的交互式 Shell——Fish Shell(Friendly Interactive SHell)迎来了其里程碑式的更新。Fish Shell 4.0 正式上线,而这一次,它彻底抛弃了 C++,改用 Rust 编程语言完成

在快速迭代和技术革新的当下,备受欢迎的交互式 Shell——Fish Shell(Friendly Interactive SHell)迎来了其里程碑式的更新。Fish Shell 4.0 正式上线,而这一次,它彻底抛弃了 C++,改用 Rust 编程语言完成了全面重构。这次技术转型不仅是代码层面的进化,更是功能、性能和开发体验的一次全方位升级。

• 发布公告:https://fishshell.com/blog/rustport/

两年的全新旅程

Fish Shell 的 Rust 迁移计划始于 2023 年初,当时一位开发者提交了一个玩笑性质的 Pull Request,标题为“Rewrite it in Rust”(用 Rust 重写)。谁也没想到,这个看似异想天开的提议最终演变成了一场耗时两年的重大工程。

Fish Shell 并非首次重构。最初,它是以 C 语言开发的,随后迁移到了 C++。而这一次的 Rust 重构,更像是追求现代化技术栈的一次必然选择。开发者团队最终决定逐步将项目从 C++ 迁移到 Rust,以期解决长期以来的代码维护难题,同时借助 Rust 提供的更强的安全性、更优秀的并发处理能力以及更直观的开发体验。

从 C++ 到 Rust 的迁移并非简单的替换,而是基于实际需求的深思熟虑。以下几点是 Fish Shell 团队选择 Rust 的主要原因:

C++ 的编译器和工具链生态复杂,版本兼容性问题频出,这对开源项目的贡献者和维护者而言是个不小的挑战。而 Rust 提供了统一的工具链 rustup,开发者只需简单的命令即可设置一致的开发环境,大大降低了项目入门门槛。

Rust 是一门以“安全”为核心设计理念的语言,其所有权模型可以在编译阶段捕获大部分内存管理错误。相比之下,C++ 需要开发者手动管理内存,这极易导致悬空指针、内存泄漏等问题。迁移到 Rust 后,Fish Shell 的代码质量和可靠性都得到了极大提升。

Fish 的实时功能(如自动补全和语法高亮)依赖多线程处理,但在 C++ 中实现复杂的并发逻辑可能带来数据竞争和死锁等问题。Rust 的“无畏并发”特性,通过 Send 和 Sync 机制确保线程安全,让开发者能够更轻松地实现多线程支持。

Rust 提供了直观的编译器错误信息和完善的依赖管理工具 cargo,使开发者能够快速定位问题并高效解决。此外,Rust 的社区活跃度高,文档齐全,为开发提供了更多便利。

Fish Shell 团队在迁移过程中采取了渐进式重构的策略,以确保项目始终保持可用和稳定。以下是他们的主要技术路径:

1、分模块迁移

整个迁移历时两年,团队首先将项目分解为多个模块,并逐个用 Rust 替代 C++ 实现。在迁移的早期阶段,团队借助 Autocxx 工具实现 C++ 和 Rust 代码的无缝互操作,从而在重构过程中保持项目的功能完整性。

2、持续集成与测试

在每个模块完成迁移后,团队会进行严格的单元测试和集成测试,以确保新代码的正确性。同时,他们在迁移过程中持续发布了多个 C++ 版本(如 Fish 3.7.0),满足用户的稳定性需求。

3、重构遗留功能

迁移过程中,团队重新设计了一些不符合现代需求的遗留功能。例如,Fish Shell 的字符串处理原本基于 UTF-32,在 Rust 中被优化为更高效的实现方式。

4、专注核心用户群

由于 Rust 的跨平台支持局限,Fish Shell 放弃了对 Cygwin(一个 Windows 上的 Linux 兼容层)的支持。但这一决定影响有限,因为 Fish 的核心用户群主要集中在 Linux、BSD 和 macOS 平台上。

Fish Shell 4.0 的发布不仅是代码层面的重构,更为用户带来了显著的性能和体验提升:

1、内存使用优化

虽然 Rust 版本的 Fish Shell 在静态内存占用上略有增加(从 7MB 增至 8MB),但其动态内存管理效率显著提升。在处理大规模任务(如对数千个文件进行通配符匹配)时,内存使用峰值显著降低。

2、性能更流畅

得益于 Rust 的高效编译和优化工具链,Fish 4.0 的整体性能更为流畅。用户在使用自动补全、语法高亮等功能时可以感受到更快的响应速度。

3、可维护性显著增强

Rust 的模块化设计和编译时安全性大大简化了代码维护工作,这使得开发者能够更轻松地扩展功能、修复 Bug,并吸引更多贡献者加入。

开发时长:历时两年,从 2023 年初到 2024 年末完成。• 代码提交:超过 2,600 次提交。• 贡献者:超过 200 位开发者参与。• 代码量:将约 57,000 行 C++ 代码转换为 75,000 行 Rust 代码。

这些数字不仅是团队努力的见证,也为开源社区提供了一次成功迁移的范例。

Fish Shell 4.0 的发布并不是终点,而是新征程的起点。未来,团队计划继续优化和扩展 Fish 的功能,包括:

1. 进一步优化性能:降低内存使用并提升执行效率。2. 改进构建流程:为用户提供更简化的安装方式,减少依赖。3. 完善功能设计:重新设计脚本解析器和其他遗留模块,以充分发挥 Rust 的优势。4. 吸引更多贡献者:Rust 的开发生态将吸引更多开发者加入,为 Fish Shell 带来更多创意和功能提升。

来源:wljslmz一点号

相关推荐