Rust開發團隊發布Rust 1.99.1,修正3項先前版本的問題,其中一項可能使C等其他語言呼叫Rust函式時,取得錯誤的回傳數值,影響程式判斷。新版還排除UEFI韌體程式建置失敗,以及macOS部分開發環境無法啟動連結工具的問題。
跨語言函式回傳錯誤與外部函式介面(FFI)有關,FFI是讓不同程式語言互相呼叫函式的機制。Rust函式可以用布林值表示真或假,C程式取得結果時,通常應讀到1或0,但Rust 1.99.0在部分x86-64平臺未正確處理回傳資料,可能讓C程式收到其他數字。
這是因為編譯器產生的程式未依規範將回傳資料的部分位元歸零,造成呼叫端取得錯誤數值,而Rust 1.99.1已恢復正確的回傳值處理方式。由於程式可能順利完成編譯,錯誤直到執行時才出現,因此已使用受影響版本編譯的相關程式,仍須重新編譯才能套用修正。
另一項修補和UEFI韌體開發環境相關,LLVM在最佳化Rust程式碼時,可能自動加入計算寬字元字串長度的wcslen函式呼叫,但部分韌體環境沒有提供該函式,導致程式無法完成連結。使用Rust標準函式庫的UEFI專案尤其受到影響,新版在編譯器內建函式庫加入備援實作,補足缺少的函式。
macOS的問題則發生在開發工具直接執行Rust編譯器,而未透過rustup代理程式時,由於函式庫搜尋路徑設定不完整,連結器rust-lld可能找不到LLVM函式庫而無法運作。新版修正搜尋路徑,讓連結器能正確載入所需檔案。
Rust 1.99.1已正式發布,透過rustup管理開發環境的使用者,可執行rustup update stable更新至最新穩定版。
Comments (0)
Sign in to comment