西爾維斯特·勒德魯,以其在彙編語言方面的工作而聞名 Debian GNU /Linux 使用 Clang 編譯器,我們成功完成了一項實驗,使用了一套用 Rust 重寫的 coreutils 工具集。 coreutils 包含 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls 等工具。在整合的第一階段, Debian 為Rust版本的coreutils設定了以下目標:
- 建立一個包含 Rust 替代 coreutils 的包 Debian и Ubuntu.
- 下載 Debian 使用 rust-coreutils 的 GNOME 桌面。
- 從儲存庫安裝 1000 個最受歡迎的軟體包。
- 從 Firefox、LLVM/Clang 和內核原始碼構建 Linux 在安裝了 rust-coreutils 的環境中。
在為 Rust/coreutils 創建了 100 多個補丁後,我們成功實現了所有預期目標。正在進行的工作包括實現缺少的實用程式和選項、提高程式碼的品質和一致性、開發測試套件以及消除從GNU Coreutils 運行測試套件時發生的崩潰(到目前為止,141 個測試中有613 個測試已成功運行) )。
在創建 rust-coreutils 套件時,決定不取代 coreutils 套件,而是提供它們並行工作的能力。 Rust 語言中的實用程式選項安裝在 /usr/lib/cargo/bin/ 中,並透過將此目錄新增至 PATH 環境變數來啟動。建立 rust-coreutils 套件很複雜,因為需要將所有建置依賴項下載到儲存庫中,包括 Rust 和各種小板條箱包。
建立啟動映像不是問題,但調整軟體包以適應具有 rust-coreutils 的環境需要大量工作,因為許多安裝後腳本從 coreutils 集中呼叫實用程式。最大數量的問題是由於缺乏必要的選項引起的,例如,“cp”實用程式沒有“--archive”和“--no-dereference”選項,“ln”不支援“-相對”選項,mktemp 不支持「-t」、同步「-fs」、安裝中「--owner」和「-group」。由於行為差異而出現了其他問題,例如,安裝實用程式不支援指定 /dev/null 作為輸入文件,mkdir 有“--parents”選項而不是“-parent”等。
大型程式碼庫的建置測試並沒有發現任何重大問題。 Firefox 和 LLVM/Clang 的建置都使用 Python 腳本和 CMake,因此替換 coreutils 對它們沒有影響。內核建構 Linux 整個過程相對順利,只出現了兩個問題:使用 chown 指令對符號連結執行指令時出現錯誤訊息,以及 ln 工具缺少「-n」選項。
來源: opennet.ru
