學習Rust第一天 Rust語言特點
阿新 • • 發佈:2022-04-01
學習Rust之前,我覺得應該首先了解Rust語言的設計目的是什麼?為什麼會誕生這門語言?這門語言和其他的語言有什麼不同。
Rust語言的設計特點
- 高效能:rust擁有和C++相近的效能表現,所以在嵌入式領域,rust也正在快速發展。
- 可靠性:可靠性也是高安全性,在學習Rust語言的過程中可以感受到,Rust中各種機制的設計為這種可靠性打下基礎,將各種可能發生的錯誤或者危險程式碼在編譯階段阻止,所以說,Rust是一門安全的語言(相對於C++的各種問題做出的優化)。記憶體的管理機制相當巧妙。
-
生產力:Rust 擁有出色的文件、友好的編譯器和清晰的錯誤提示資訊, 還集成了一流的工具——包管理器和構建工具, 智慧地自動補全和型別檢驗的多編輯器支援, 以及自動格式化程式碼等等。
- rust的包管理比C++好太多了,cargo十分好用。
- rust的編譯器十分強大,可以很好的輸出錯誤資訊,甚至給出解決方法。對新手十分友好。
其它特點:
- 現代語言特性:rust的語法糖比較多,一些人可能比較討厭這一點,不過目前我覺的還不錯。融合各種其他語言的技巧。
- 豐富易用的庫:相對與C++(上次使用C++的Poco庫,是真的門檻極高,不適合快速開發),rust有很多好用的庫(我不記得名字了,嗚嗚嗚。學習-ing)。
目前我接觸的特性
一些是不同於其他語言的新概念,一些概念名字不同於其他語言,但是概念上類似。
新概念
-
變數的可變性:這個不同於const的概念,可變的變數需要用
mut
宣告,預設變數不可用,但是可以覆蓋。(記憶體安全設計) -
所有權:針對複合型別(標量型別無所有權)的變數,擁有所有權。其實,真正區分變數十分有所有權應該看這個變數是放在棧還是堆。放在棧上的變數沒用所有權,放在堆上的變數擁有所有權的概念。(記憶體安全設計)
-
標量型別一般指的是整型,浮點型,布林型,字元型別
-
複合型別一般是元組,陣列,還有一個是字串型別(Rust還有一種型別是字串字面值,也叫字串切片值(字串 slice),它也是字串型別的引用。不同於字串型別),注意字串型別不是原生型別。
-
引用和借用:這裡的概念相對複雜,與其他語言差異較大,如果結合變數在記憶體中的狀態會比較好理解。下面是一個引用的記憶體圖。至於為什麼這樣設計,是為保證指向一片記憶體的指標只有一個,防止記憶體重複釋放。這個是所有權設計的目的所在
-
-
強大的列舉和模式匹配:這裡是我覺得rust設計比較好的地方,rust裡的列舉和結構體具有相近的能力,結合模式匹配,可以很好的進行分支和錯誤處理。
-
rust也是一個空安全語言(如果你學習過空安全語言可能有一定認識,也就是說rust裡面沒有空型別。目前,採用空安全的語言大多是新語言,因為Null本身是一個錯誤的設計,不過空這個概念仍具有價值),在rust用一個Optional型別代替空型別。Optional是一個列舉型別,其定義如下:
enum Option<T> { None, Some(T), }
Some
表示有值,None
表示空值。結合模式匹配方法,可以對空值進行額外處理,防止錯誤發生。
-
與其他語言類似概念
- 關聯函式:類似於C++中的靜態函式。
- crate:翻譯過來是板條箱,可以理解為python中的模組。
- HashMap:rust裡的字典,說是安全性更高。