對(duì)于Rust的優(yōu)勢(shì)我的體會(huì)如下:
創(chuàng)新互聯(lián)主營(yíng)思禮網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開(kāi)發(fā),思禮h5小程序定制開(kāi)發(fā)搭建,思禮網(wǎng)站營(yíng)銷推廣歡迎思禮等地區(qū)企業(yè)咨詢
* Error Handling機(jī)制好太多,用Result封裝函數(shù)運(yùn)行結(jié)果靈活性大大提高,代碼也大大簡(jiǎn)潔
* 函數(shù)式編程支持較好,有Lambda這種東西,使得它寫(xiě)起來(lái)甚至有Ruby的感覺(jué)
* 效率高,沒(méi)有了GC和Runtime,速度是沒(méi)得說(shuō)的
* 支持范型
* 有宏和編譯器插件這些黑客技,語(yǔ)言擴(kuò)展性較好
* 社區(qū)活躍度更高,更強(qiáng)調(diào)社區(qū)的作用,有[RFC](GitHub - rust-lang/rfcs: RFCs for changes to Rust)。[中文社區(qū)](Rust China)也有了
Rust的劣勢(shì)是:
* 語(yǔ)言特性復(fù)雜,對(duì)新手就不會(huì)那么友好
* 穩(wěn)定性不夠,語(yǔ)言的進(jìn)化較激進(jìn)
* 第三方庫(kù)的成熟度還落后于Go,商業(yè)化的應(yīng)用也還不夠
不能吧,現(xiàn)在用C語(yǔ)言搞開(kāi)發(fā)都是用在更加底層的開(kāi)發(fā)中,更加底層的開(kāi)發(fā)需要高運(yùn)行效率,go語(yǔ)言的運(yùn)行效率是比不上C語(yǔ)言的,所以go語(yǔ)言在這些方面還無(wú)法取代C語(yǔ)言。應(yīng)該說(shuō)是各有所長(zhǎng)吧,go和C都有它們自己的適用環(huán)境,誰(shuí)也不能取代誰(shuí)。
我并沒(méi)有什么編程的經(jīng)驗(yàn),覺(jué)得編程實(shí)在是太復(fù)雜了,不喜歡去研究太多,對(duì)這個(gè)也不怎么懂,只能說(shuō)自己是個(gè)半吊子,就是所掌握的知識(shí),也是東拼西湊的,朋友和我說(shuō)點(diǎn)兒,自己去書(shū)上看一點(diǎn)兒,只能說(shuō)根據(jù)自己的體驗(yàn)給出一些體會(huì)吧。
Rust的優(yōu)勢(shì)是:
1、Rust把安全、精確的內(nèi)存管理作為一切的中心放在首要的位置。
2、Rust同時(shí)擁有特別強(qiáng)的控制性和特別強(qiáng)的安全性。
3、Rust語(yǔ)言通過(guò): 優(yōu)秀的類型系統(tǒng)設(shè)計(jì)、 嚴(yán)格的編譯器靜態(tài)審查、 配合程序員局部核對(duì)、加上少量的運(yùn)行時(shí)校驗(yàn),保障了內(nèi)存安全。
4、Rust的語(yǔ)言特別的復(fù)雜,導(dǎo)致學(xué)習(xí)曲線比較陡峭,對(duì)于初學(xué)者來(lái)說(shuō)難度較大。但學(xué)通之后將終生受益。
5、效率高,速度特別的快
6、 支持范型
7、 社區(qū)活躍度很高,更加的強(qiáng)調(diào)了社區(qū)的作用。
8、Rust 有更強(qiáng)的語(yǔ)義,更容易捕獲錯(cuò)誤的邏輯,編譯器直接檢查出你代碼中的不安全的部分
Rust的劣勢(shì)是:
1、 語(yǔ)言相對(duì)來(lái)說(shuō)比較復(fù)雜,對(duì)于新手來(lái)說(shuō),讓新手摸不著頭腦。
2、還不算太穩(wěn)定。
其實(shí)我覺(jué)得什么代碼啊編程啊這些東西還是比較適合理工的學(xué)生去研究,我一看腦袋就大,完全不明白在講什么。我大概了解的就是這些,語(yǔ)言的話大家可以多方面的去了解,也不是說(shuō)有缺點(diǎn)就是不好,看配置看個(gè)人吧,每個(gè)人習(xí)慣不一樣,也許有的人用不穩(wěn)定的還覺(jué)得挺好呢,有的人就喜歡比較完美的,在我看來(lái)編程這個(gè)東西真的是很復(fù)雜,會(huì)有很多的代碼,這些代碼弄得我自己頭都大了,有的時(shí)候還得去惡補(bǔ)一下。
要說(shuō)性能,那是Rust更好。更多的編譯期優(yōu)化、無(wú) GC 等特點(diǎn)加持,開(kāi)發(fā)高性能應(yīng)用自然是 Rust 性能高。據(jù)統(tǒng)計(jì)利用 Rust 開(kāi)發(fā)的 RipGrep 性能甚至賽過(guò)使用 C 開(kāi)發(fā)的 Grep。
但是性能不是唯一考量,當(dāng)你糾結(jié) Borrow Check,糾結(jié) unsafe,糾結(jié) copy clone,糾結(jié)各種奇怪的類型限制的時(shí)候;當(dāng)你 cargo build 怒草電腦風(fēng)扇三分鐘的時(shí)候;人家 GoLang 可能早就發(fā)兩個(gè)版了。
同時(shí) Rust 的語(yǔ)法花活眾多,遍歷數(shù)組可以寫(xiě)循環(huán)也可以 for_each() 一行流。不像 GoLang 那么白開(kāi)水誰(shuí)寫(xiě)都差不多一個(gè)味道,經(jīng)常第一天想到神來(lái)之筆快樂(lè) Coding 到半夜第二天爬起來(lái)發(fā)現(xiàn)昨晚寫(xiě)的都甚么東西看不懂不如蜘蛛爬,這是墜痛苦的!
Go 的編譯器為了個(gè)編譯速度快連循環(huán)不變式提升、循環(huán)展開(kāi)、對(duì)齊等等優(yōu)化一個(gè)都不做,函數(shù)內(nèi)斂一堆限制大多數(shù)情況都不做(比如函數(shù)里有個(gè) for 或者 defer 或者 select 等,或者函數(shù)多于 40 個(gè)表達(dá)式),擁有的優(yōu)化一只手都能數(shù)的過(guò)來(lái):
基礎(chǔ)優(yōu)化欠缺,高級(jí)優(yōu)化更是一個(gè)沒(méi)有,和在 Debug 配置編譯下的 -O0 優(yōu)化的 C++ 差不多一個(gè)概念(而且跑得更慢),哪來(lái)的資本和 rust 比性能。
其他方面:
而且 Go 的 GC 吞吐量也很低,大多數(shù)情況下各方面 Go 跑的甚至都比 Java 更慢。只不過(guò)得益于 AOT 編譯的設(shè)計(jì),相比 Java 而言除了內(nèi)存占用小和啟動(dòng)速度快之外就沒(méi)有任何優(yōu)勢(shì)了,比較適合拿來(lái)做性能不關(guān)鍵的命令行工具。
個(gè)人還是更喜歡 Rust。