“Rust 是系統編程的未來,C 是新的彙編程序”——英特爾一位首席工程師的演講

在最近舉行的開源技術高峰會 (OSTS) 上 喬許·特里普利特英特爾的一位高級工程師表示,他的公司有興趣讓 Rust 在不久的將來達到與 C 語言「平起平坐」的水平,而 C 語言在不久的將來仍然主導著系統和底層開發。 在他的講話中 在《Intel 和 Rust:系統程式設計的未來》的標題下,他還談到了系統程式設計的歷史、C 如何成為預設的系統程式語言、Rust 的哪些特性使其比 C 更具優勢,以及它如何完全能夠在這個程式領域取代C。

“Rust 是系統編程的未來,C 是新的彙編程序”——英特爾一位首席工程師的演講

系統程式設計是軟體的開發和管理,該軟體作為創建應用程式的平台,確保後者與處理器、RAM、輸入/輸出設備和網路設備互動。 系統軟體以介面的形式創建一個特殊的抽象,幫助創建應用軟體,而無需深入研究硬體本身如何運作的細節。

Triplett 本人將系統程式定義為「任何不是應用程式的東西」。 它包括 BIOS、韌體、引導程式和作業系統核心、各種類型的嵌入式低階程式碼以及虛擬機器實作等。 有趣的是,Triplett認為網頁瀏覽器也是系統軟體,因為瀏覽器早已不僅僅是“一個程式”,而是一個獨立的“網站和網路應用程式的平台”。

過去,大多數系統程序,包括BIOS、引導程式和固件,都是用彙編語言編寫的。 1960年代,實驗開始為高階語言提供硬體支持,導致了PL/S、BLISS、BCPL和ALGOL 68等語言的創建。

然後,在 1970 世紀 XNUMX 年代,Dennis Ritchie 為 Unix 作業系統創建了 C 程式語言。 C 是用 B 程式語言創建的,甚至沒有類型支持,它充滿了強大的高級函數,最適合編寫作業系統和驅動程式。 UNIX 的幾個元件,包括其內核,最終都是用 C 重寫的。隨後,許多其他系統程序,包括 Oracle 資料庫、大部分 Windows 原始碼和 Linux 作業系統,也都是用 C 編寫的。

C在這個方向上得到了巨大的支持。 但到底是什麼讓開發人員轉而使用它呢? Triplett 認為,為了激勵開發人員從一種程式語言切換到另一種程式語言,後者必須先提供新功能而不失去舊功能。

首先,該語言必須提供「相當令人印象深刻」的新功能。 「他再好不過了。 它必須明顯更好地證明過渡所需的努力和工程時間是合理的,」他解釋道。 與彙編語言相比,C 有很多東西可以提供。 它支援某種類型安全的行為,透過高級構造提供更好的可移植性和效能,並產生整體上更具可讀性的程式碼。

其次,該語言必須提供對舊功能的支持,這意味著在向 C 過渡的歷史中,開發人員必須確保它的功能不亞於彙編語言。 Triplett 解釋道:“一門新語言不僅要更好,而且還必須一樣好。” 除了速度更快並支援彙編語言可以使用的任何資料類型之外,C 還具有 Triplett 所說的“逃生艙口”,即它支援在自身內部插入彙編語言程式碼。

“Rust 是系統編程的未來,C 是新的彙編程序”——英特爾一位首席工程師的演講

Triplett 相信 C 現在正在成為許多年前的組合語言。 「C 是新的彙編程序,」他宣稱。 現在,開發人員正在尋找一種新的高階語言,它不僅可以解決 C 語言中累積的無法修復的問題,而且還可以提供令人興奮的新功能。 這樣的語言必須具有足夠的吸引力以吸引開發人員轉向它,必須是安全的,提供自動記憶體管理等等。

「任何想要比 C 更好的語言,如果它真的想成為一個令人信服的替代方案,那麼它必須提供的不僅僅是緩衝區溢位保護。 開發人員對可用性和效能感興趣,希望編寫不言自明的程式碼並以更少的行數完成更多的工作。 安全問題也需要解決。 易用性和性能是齊頭並進的。 為了實現某些目標而需要編寫的程式碼越少,犯任何錯誤(無論是否與安全相關)的機會就越少。」Triplett 解釋道。

Rust 和 C 的比較

早在 2006 年,Mozilla 員工 Graydon Hoare 就開始將 Rust 作為個人專案編寫。 並且在 2009 年,Mozilla 出於自身需求開始贊助 Rust 的開發,同時也擴大了團隊來進一步開發該語言。

Mozilla 對這種新語言感興趣的原因之一是 Firefox 由超過 4 萬行 C++ 程式碼編寫而成,並且存在不少嚴重漏洞。 Rust 在建置時考慮到了安全性和並發性,使其成為重寫許多 Firefox 元件的理想選擇,作為 Quantum 專案的一部分,以完全重新設計瀏覽器的架構。 Mozilla 也使用 Rust 開發 Servo,這是一個 HTML 渲染引擎,最終將取代目前的 Firefox 渲染引擎。 許多其他公司已經開始在他們的專案中使用 Rust,包括 Microsoft、Google、Facebook、Amazon、Dropbox、Fastly、Chef、百度等等。

Rust 解決了 C 語言最重要的問題之一,它提供自動記憶體管理,因此開發人員不必為應用程式中的每個物件手動分配然後釋放它。 Rust 與其他現代語言的不同之處在於,它沒有自動從記憶體中刪除未使用物件的垃圾收集器,也沒有使其工作所需的執行時間環境,例如 Java 的 Java 執行環境。 相反,Rust 有所有權、借用、引用和生命週期的概念。 「Rust 有一個系統,用於聲明對物件的調用,以指示所有者是正在使用它還是只是藉用它。 如果您只是藉用一個對象,編譯器將追蹤該對象並確保只要您引用它,原始對象就保留在原處。 Rust 還將確保該物件在使用完成後立即從記憶體中刪除,從而在編譯時將相應的呼叫插入到程式碼中,而無需額外的時間。」Triplett 說。

缺乏本機運作時也可以被認為是 Rust 的正面特徵。 Triplett 認為它所運行的語言很難被用作系統程式設計工具。 正如他解釋的那樣:“您必須先初始化此運行時,然後才能調用任何代碼,您必須使用此運行時來調用函數,並且運行時本身可能會在意外的時間在您背後運行其他代碼。”

Rust 也致力於提供安全的平行程式設計。 使其記憶體安全的相同功能可以追蹤諸如哪個執行緒擁有哪個物件以及哪些物件可以在執行緒之間傳遞以及哪些物件需要鎖等資訊。

所有這些功能使得 Rust 足以吸引開發人員選擇它作為系統程式設計的新工具。 然而,在平行計算方面,Rust 仍然落後於 C 一些。

Triplett 打算創建一個專門的工作小組,專注於將必要的功能引入 Rust,使其能夠在系統編程領域完全等同、超越和取代 C。 在 Reddit 上的話題在致辭時,他表示“FFI/C Parity小組正在創建過程中,尚未開始工作”,目前他已經準備好回答任何問題,未來他肯定會發布立即計劃作為他對所有感興趣的各方的倡議的一部分,Rust 的開發。

可以假設,FFI/C Parity 小組將首先專注於改進 Rust 中的多線程支持,引入對 BFLOAT16(一種出現在新型 Intel Xeon 可擴展處理器中的浮點格式)的支持,以及穩定彙編程式碼插入。



來源: 3dnews.ru

添加評論