谷歌透露更多有關將 Rust 集成到 Android 的信息
自 2019 年以來,Android 團隊一直致力于將 Rust 編程語言引入 AOSP(Android Open Source Project),以作為平臺原生代碼開發(fā)的內存安全替代品。近日,谷歌則在一篇博客文章中進一步闡述了關于將 Rust 整合到 AOSP 的更多信息。
博客內容指出,與任何大型項目一樣,引入一種新的語言需要仔細考慮。對于 Android 來說,一個重要的方面就是評估如何將 Rust 最好地融入 Android 的構建系統(tǒng)。根據(jù) Android 團隊的說法,將 Rust 集成到大型項目中存在許多挑戰(zhàn);例如放棄 Cargo 而直接使用 Rust 編譯器 rustc 的可能會存在使組織脫離更廣泛的 Rust 社區(qū)的風險。
該團隊還表示,當為 Android 開發(fā)的 crates 可以使 Rust 社區(qū)受益時,他們希望將其作為獨立的 crates 發(fā)布。并認為,Rust 在 Android 中的成功取決于最大限度地減少 Android 和整個 Rust 社區(qū)之間的分歧,并希望 Rust 社區(qū)能從 Android 的參與中受益。
Rust 提供 Cargo 作為默認的構建系統(tǒng)和包管理器,收集依賴關系并調用 rustc(Rust 編譯器)來構建目標 crate(Rust 包)。而在 Android 中,Soong 則替代了這個角色,并直接調用 rustc。原因在于:
- Cargo 中的 C 語言依賴是獨立處理的,而 Soong 已經(jīng)提供了相關的機制;
- 通過 Soong 直接調用編譯器可以提供更多 Android 所需的穩(wěn)定性和控制力,以支持各種構建配置;
- 獨立的構建對于 Android 創(chuàng)建可重復的構建非常重要;
- 增量構建對于保持工程生產力非常重要。
Android 團隊的 Ivan Lozano 稱,“直接使用 Rust 編譯器使我們能夠避免這些問題,并且與我們在 AOSP 中編譯所有其他代碼的方式一致。它提供了對構建過程的最大控制權,并簡化了與 Android 現(xiàn)有構建系統(tǒng)的整合。但是,由于 Cargo 的使用在 Rust crate 的生態(tài)系統(tǒng)中根深蒂固,避免使用 Cargo 則會帶來一些挑戰(zhàn),并影響到許多其他構建系統(tǒng)的決定。”
此外,關于為什么支持 proc_macros,而不支持 build.rs 腳本。該團隊則解釋稱,這是因為 build.rs 代碼是作為一次性代碼編寫的,而 proc_macros 定義了編譯器中可重用功能,這對于 Rust 社區(qū)可能更有用。且 proc_macros 通常能得到更好的維護和更多的上游審查,在代碼審查過程中更容易處理、更容易進入沙盒。
Android 團隊還透露,他們計劃在不久的將來在 source.android.com 中添加關于如何在 Soong 中定義和使用 Rust 模塊的文檔。其希望 Android 對 Rust 的支持能與 Rust 生態(tài)系統(tǒng)一起繼續(xù)發(fā)展,并希望繼續(xù)參與有關如何將 Rust 集成到現(xiàn)有構建系統(tǒng)的討論。
本文轉自OSCHINA
本文標題:谷歌透露更多有關將 Rust 集成到 Android 的信息
本文地址:https://www.oschina.net/news/141612/integrating-rust-into-android-open