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