微軟首席工程師:Rust 將面臨十大挑戰(zhàn)
Nick 指出,現(xiàn)如今 Rust 正處于一個(gè)良好的發(fā)展局面;受歡迎程度越來(lái)越高、貢獻(xiàn)者越來(lái)越多,還在一些重要領(lǐng)域進(jìn)行了應(yīng)用。但在這個(gè)充滿變化的時(shí)代,從一個(gè)研究項(xiàng)目到一個(gè)新的、快速變化的語(yǔ)言再過(guò)渡到一個(gè)流行的、成熟的項(xiàng)目,是一個(gè)困難的演變過(guò)程。
“在這里,我想描述一下我認(rèn)為現(xiàn)在和未來(lái)幾年 Rust 面臨的十大挑戰(zhàn)。我有一些解決方案的想法,但它們都是大而難的問(wèn)題,沒(méi)有簡(jiǎ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ū)來(lái)解決?!?/p>

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















 
 
 





 
 
 
 