微軟首席工程師:Rust 將面臨十大挑戰
Nick 指出,現如今 Rust 正處于一個良好的發展局面;受歡迎程度越來越高、貢獻者越來越多,還在一些重要領域進行了應用。但在這個充滿變化的時代,從一個研究項目到一個新的、快速變化的語言再過渡到一個流行的、成熟的項目,是一個困難的演變過程。
“在這里,我想描述一下我認為現在和未來幾年 Rust 面臨的十大挑戰。我有一些解決方案的想法,但它們都是大而難的問題,沒有簡單的答案,所以真正的解決方案都需要迭代、精力和創造力。我的重點是核心項目;社區和生態系統面臨許多挑戰(例如,如何使用 Rust 制作 GUI,或者如何讓更多的 crates 進入 1.0),我認為這些挑戰必須主要由社區來解決。”
具體內容如下:
治理挑戰
1、如何引導開發并保持 Rust 的開放性?
開源工作中,在什么是對項目最有利的,以及什么是志愿貢獻者想做的之間總存在著一些矛盾。現在,隨著 Rust 社區逐漸發展壯大且 Mozilla 結束直接支持,Rust 中的這種緊張關系似乎也在日益加重。盡管有很多人從事基本的維護工作,但往往人手不足;一些重要領域也缺乏資源、缺乏引導貢獻的戰略工作或努力。
Nick 認為,在某些方面,采用自上而下的方法可能會更容易;但此舉也或將導致 Rust 失去作為開源項目所擁有的一些優勢。最大的挑戰是確保在完成重要但不吸引人的工作的同時,同時又不失去項目中使其令人敬畏的部分特性。Nick 表示,他們目前正在努力解決一些具體問題,包括:
- 優先完成眼前的工作而不是開始新工作,
- 優先考慮工具、庫和非技術工作以及語言和編譯器,
- 優先考慮影響較小、成本較低的工作,這些工作總體上可能會產生很大的影響(超過大型、迷人的工作)。
“與這一挑戰相關的是在面對增長時保持 Rust 的基本特征。特別是,項目如何發展并接受新的貢獻者和領導者(以及隨之而來的不可避免的變化)而不忽視 Rust 的核心使命?隨著觀察者(和評論者)數量的增加,我們如何在討論和決策中繼續保持公開和透明?”
2、多樣性和包容性
Rust 的多樣性狀況很糟糕。盡管在成為一個包容性項目方面 Rust 做的可能還不錯,但還是有諸多貢獻者因為某些消極原因而不得不離開了該項目;避免倦怠也是包容性的一部分。
“包容性的一個重要方面是能夠容納各種意見。如果我們只有在每個人都同意的情況下才能相處,那么我們就不可能多元化或包容。雖然我們對共識的偏好在某些領域對我們很有幫助,但它也帶來了問題。我們避免沖突而不是解決沖突的文化是不健康的,并導致治理功能失調。這些真的很難解決!但我們必須優先解決它們,即使它們很困難,有時也很痛苦。”
3、避免低效流程的僵化
Nick 稱,過去的幾年里在 Rust 飛速發展的同時,其流程和組織卻并沒有跟上步伐。在任何與治理或流程有關的事情上,都存在著巨大的變革慣性。即使現有的流程有大量的摩擦,但除了在此之上進行調整之外似乎也無可奈何。“我們已經積累了如此多的組織債務,以至于需要進行徹底的變革,但進行這種變革將是非常困難的。”
他認為,問題的核心是項目不愿意接受 “管理”(人員管理、項目管理、產品管理)作為項目領導的重要組成部分。這些事情可以獨立于技術領導,但需要真正的權力委派(不僅僅是工作委派)。該項目面臨的挑戰是接受委托,支持這些活動,并引入更好地支持該項目的新流程。
生態系統挑戰
4、Navigating the crate ecosystem
Rust 在最小標準庫和 “batteries included” 之間取得了很好的平衡,原因在于其有一個繁榮的生態系統和易于使用的軟件包管理器。然而,有關 crate 生態系統一直是個棘手的問題。存在很多 crates,要找到適合的則需要付出很多努力,或者說要很好地參與到社區中去。隨著越來越多不是社區積極參與者用戶的出現,以及 crate 數量的增加,這將成為一個更大的問題。
5、The async ecosystem
異步編程對于 Rust 目標的許多領域都很重要,且與 Rust 的編程模型配合得很好。然而,其生態系統在不同的運行時有些分裂;雖然有在進行相關的改進工作,但卻進展緩慢,最終成功與否也未能確定。“風險在于我們最終會將東西帶入標準庫,這些東西并沒有得到社區的廣泛接受,我們最終會得到一個比我們開始時更糟糕的生態系統。”
技術挑戰
6、如何在不失去其 core focus 的情況下使語言更具廣泛吸引力?
Nick 認為 Rust 在其現有成功基礎上仍有很大的增長空間。目前的很多軟件都是用更側重性能的語言編寫,Rust 對安全、人體工程學和性能的關注則可以制造更好的產品并提高生產力。然而相對而言 Rust 學習難度和成本都太高,讓 Rust 更容易學習和使用可能會擴大其影響力。
“我不認為支持 GC、對 Rc<RefCell<T>> 類型使用含糖語法或添加一堆語法糖是解決方案。我們必須在不失去 Rust 以系統編程為核心的優勢的情況下讓事情變得更簡單。減少對 explicit lifetimes 的需求,使 borrow checker 更強大,不要使 trait system 過于復雜,關注用戶體驗,避免成為一種臃腫的語言,這些都會有所幫助。也許我們會發現可以顯著簡化所有權和生命周期的新 abstractions?”
7、內存模型和不安全代碼
安全性是 Rust 主要特色之一,也是許多人使用它的動力。因此需要能夠為從事不安全工作的程序員提供更多支持和更好的體驗。要做到這一點,則需要對 Rust 的內存模型有更清楚的了解,然后開發語言特性、庫和工具。
幸運的是,這個領域有學術研究、出色的社區工作、MIRI、不安全代碼指南等等。不幸的是,這是一個非常復雜和困難的領域,許多外圍人士的意見會減慢進度,并增加相關人員的工作難度。Nick 指出,出于政治和技術原因,一些可能真正影響大的更改根本無法進行。
8、發展標準庫
標準庫除了單調增長之外沒有其他方法可以發展(可以棄用但永遠不會刪除,并且無法更改)。就其本身而言,這將導致標準庫變得越來越龐大和混亂。但也有二階效應:必須對穩定性采取極其保守的態度,除了 “stable forever” 和 “僅在 nightly 可用且完全可能發生變化” 之外,API 沒有其他可能的狀態。
相關地,標準庫是一個 all or nothing deal(技術上也有 liballoc)。除了有一個更細化的版本管理解決方案外,更細化地使用標準庫,而不僅僅是核心庫或所有的標準庫,也是有益的。
9、Big compiler changes
Rustc 現在是一個非常龐大的軟件。它有很多固有的復雜性(Rust 是一種復雜的語言,在快速編譯的同時提供良好的錯誤信息是非常困難的),很多大型軟件的常見問題以及大量的技術債務。存在一些重大挑戰,尤其是在編譯時間方面(其中增量編譯和并行編譯是兩種正在進行中的方法),而這些都被證明是難以實現的工作;未來想要做出重大改變只會變得更加困難。幸運的是,編譯器團隊有能力、精力充沛且資源充足。但是,要對 rustc 進行大的、高影響的更改仍然具有挑戰性。
10、Macros
Macros 是語言中最不完善的部分之一。Declarative macros 引入了一種全新的子語言;Procedural macros 則很笨重,需要大量依賴并且難以掌握。所有的宏都與編譯器(編譯時間、增量編譯、錯誤信息)和工具(IDEs、rustdoc 等的各種問題)配合得很差。
“我認為這是一個巨大的挑戰(而不僅僅是另一個可以處理的語言特性)的原因是,這些問題是分散的和困難的。(可能)沒有良好的解決方案,只有大量的工程和設計工作。許多問題(例如,macro hygiene)需要社區中不存在的專業知識。宏的優先級也不夠高(畢竟它們本質上是有效的),也沒有足夠的魅力來吸引貢獻者。”
展望
Nick 最后總結稱,他列出了十個所謂 “大” 的 Rust 問題,可能會讓人感覺有點消極;但這確實都是現實中所面臨的挑戰。幸運的是,項目內部的人都知曉這些問題的存在,并在積極地解決中。
“盡管任何解決方案都很困難,但我認為所有這些挑戰都有可行且現實的解決方案。如果我們能夠專注于解決這些問題(當然還有其他所有的日常挑戰),那么我認為 Rust 將繼續發展并取得成功。”
詳情可查看博客全文。
本文轉自OSCHINA
本文標題:微軟首席工程師:Rust 將面臨十大挑戰
本文地址:https://www.oschina.net/news/210809/ten-challenges-for-rust