用Rust重寫近6萬行C++程式碼是怎樣的體驗?

OSCHINA
↑點選藍字 關注我們
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
END
熱門文章
分享在看點贊~Orz

相關文章