從第一次下載rust語言的編譯器到今天剛好第14天。 簡單說一下對這個語言的感覺吧。
一、性能
把以前用java寫的一個中文地址切分的算法,用rust重新實現了一下(https://github.com/naturemickey/addressCut_use_rust)。運行的速度上,rust的release版本要比java快上一倍左右。
java版本的代碼量是800多行,而rust版本的代碼量是600多行。
這個體驗還是很不錯的,畢竟才剛剛開始學習rust語言,很多代碼自己都覺得寫得丑陋無比(能實現出來就不容易了,還沒有能力想怎么能寫得好看呢),對rust語言的機制與庫都不熟悉(一邊看文檔一邊寫),基本上就是:能用就行,先不管性能。
再過一段時間,對rust更熟悉了,再把代碼改得好看一些,說不寫性能也會更好一點。
rust的編譯結果在內存結構上是與C語言兼容的,這也是它性能不錯的原因之一。
二、語法
rust語言在語法上有一個新東西:RAII——就是通過所有權、借用、生命期機制來做到精確的內存控制(不需要程序員寫代碼來釋放內存,也沒有GC)。
我也是老程序員了,每年都會學習一些新的語言(我忘記的語言比很多程序員見過的語言還多),而這些語言中要么是有GC的,要么是需要手工管理內存的。而能夠通過語法設計來讓編譯器精確控制內存的語言這還是頭一次見到。
不過這個語法也是最折騰人的地方,曾有一行代碼整整搞了兩天才編譯成功。大學畢業之后還從沒有哪一個語言像rust語言這樣讓我在初學的過程中就這樣痛苦(大學的時候第一個用C語言實現的HelloWorld搞了一個星期),從這點來看rust對新手程序員並不友好,但闖過了這一關之后就好多了。
這個機制的好處也是明顯的:
1.性能:沒有GC就代表沒有FGC,可以用來做實時的系統(如果是JVM用到幾十G內存的情況下,一次FGC就不是幾秒鍾那么簡單了)。
2.嚴謹:這種語法上的控制是非常嚴謹的,它會逼迫我們在寫代碼的過程中對邏輯進行思考,一但有問題會導致編譯不通過。這樣寫出來的代碼會比其它語言寫出來的代碼bug更少。
除了RAII之外,其它的東西都在其它語言中有出現,並不是什么新玩應,比如:宏(lisp)、模式匹配(Erlang、Scala)、並發模型(和go相似,尤其channel,但它的Arc又和Erlang非常像,只是Erlang一定會復制數據發送給其它進程,而rust只是內部多了一個引用計數)……。
三、配套設施
1.有一個模塊管理工具cargo,這東西也挺方便的,有點像java里的maven和gradle。
2.IDE:目前rust語言還沒有IDE支持,我寫代碼用的是VS Code,然后手敲命令來編譯的。畢竟這個語言的1.0版本是今年(2015年)5月,以后肯定會有好用的開發工具出現。
(ps. 在這14天的經歷中也有一個小發現:VSCode在這兩個星期竟然有兩次小版本的升級,看來微軟還挺積極的)
四、總之
這是一個挺不錯的語言:其嚴謹的語法與精確內存控制對程序的質量都有很大的幫助——如果熟悉了它,相對於C++來說,rust更容易寫出可靠的軟件,而且性能可能更好。
不過對於新手程序員來說,rust的嚴謹性就顯得不太友好了。