深入淺出Rust(第一部分-1)

封面.png

傳送門(mén):
深入淺出Rust(第一部分-1)
深入淺出Rust(第一部分-2)
深入淺出Rust(第二部分-1)
深入淺出Rust(第二部分-2)
深入淺出Rust(第三部分-1)
深入淺出Rust(第三部分-2)
深入淺出Rust(第四部分)
深入淺出Rust(第五部分)


寫(xiě)在前面

顯然我拿錯(cuò)書(shū)作為入門(mén)讀物了."既來(lái)之,則安之",雖然有點(diǎn)難,還是完整看了下來(lái).收獲頗多..

第一部分-1

第1章 與君初相見(jiàn)

1-1.png

關(guān)注高效和安全的開(kāi)發(fā)語(yǔ)言.

1. 版本和發(fā)布策略

RFC->Nightly->Beta->Stable

官網(wǎng): rust-lang.org
官方倉(cāng)庫(kù): crates.io
playground: https://play.rust-lang.org/
std: https://doc.rust-lang.org/std/index.html

2. 安裝

官網(wǎng)的Install鏈接即可,Windows需要VC++工具鏈,需要安裝Visual Studio開(kāi)發(fā)工具,這個(gè)和nodeJs的一樣.

工具 作用
rustup Rust 版本管理
rustc 編譯器
cargo 包管理

3. hello world

4. Prelude

Rust默認(rèn)會(huì)自動(dòng)引入對(duì)標(biāo)準(zhǔn)庫(kù)的依賴. use std::prelude::*

5. Format格式

有!的是Rust的宏調(diào)用,宏能做到更好的錯(cuò)誤檢查.

第2章 變量和類型

1. 變量聲明

let variable: i32 = 100;

1.1 默認(rèn)變量聲明是只讀的,如果加上mut,變?yōu)榭蓪?xiě)變量,實(shí)際上是模式解構(gòu),這個(gè)C#,ES6就有,很熟了.
1.2 Rust允許同一代碼塊聲明同樣名字的變量,后面就會(huì)將前面遮蔽起來(lái).
1.3 Rust支持類型推導(dǎo),這種推導(dǎo)是依賴編譯器的,而非動(dòng)態(tài)類型系統(tǒng),也就是說(shuō)如果編譯器無(wú)法通過(guò)上下文感知具體的類型,就會(huì)報(bào)錯(cuò).因此函數(shù)簽名不允許進(jìn)行推導(dǎo),需要具體寫(xiě)出.
使用type聲明別名,這和Go基本一樣,由于支持泛型,Rust更靈活點(diǎn).

1.4 static關(guān)鍵字聲明靜態(tài)變量:

static GLOBAL: i32 = 0;

其生命周期是整個(gè)程序,也就是全局變量.具體要求:
a. 必須馬上初始化
b. 其初始化值必須是在編譯期可以確定的常量.不支持表達(dá)式和函數(shù)調(diào)用(這需要運(yùn)行時(shí)才知道)
c. 帶有mut的靜態(tài)變量,需要加上unsafe關(guān)鍵字.
d. 復(fù)雜的static變量通常使用lazy模式,第一次使用時(shí)候初始化. -> lazy_static 庫(kù)

1.5 const常量

2. 基本數(shù)據(jù)類型

bool,char(unicode),整數(shù)(8-128bit,指針,溢出),浮點(diǎn)數(shù)(IEEE 754-2008),指針,類型轉(zhuǎn)換

debug模式進(jìn)行整數(shù)溢出檢查,溢出則引發(fā)panic;而release不檢查,自動(dòng)舍棄高位.

2-1.png
2-2.png
2-3.png

3. 復(fù)合數(shù)據(jù)類型

3.1 元組tuple(和python的幾乎一樣)

存在空元組unit(單元類型),占用0空間

3.2 結(jié)構(gòu)struct(和Go的幾乎一樣)

存在空結(jié)構(gòu); ..expr展開(kāi)表達(dá)式(僅用于初始化);

3.3 元組結(jié)構(gòu)tuple struct

成員沒(méi)有名字的struct,與結(jié)構(gòu)不同在于定義類型是后面是"("

2-4.png

3.4 枚舉enum(多類型"或"關(guān)系)

定義語(yǔ)法與struct類似.
枚舉一般與模式匹配match配套使用

2-5.png

3.5 類型遞歸定義

通過(guò)裝箱Box可以實(shí)現(xiàn)類型的遞歸定義(實(shí)際僅僅記錄指針)

第3章 語(yǔ)句和表達(dá)式

1. 語(yǔ)句

2. 表達(dá)式

2.1 運(yùn)算表達(dá)式

+,-,*,/,%,比較(左右必須同類型),位運(yùn)算,邏輯運(yùn)算

2.2. 賦值表達(dá)式

Rust不允許連續(xù)賦值,但支持組合賦值+=,*=

3.3 語(yǔ)句塊表達(dá)式{}

和函數(shù)一樣,最后一個(gè)未結(jié)束數(shù)據(jù)用來(lái)返回,如果加了";",那么其類型就是().

3. if-else

語(yǔ)句一定要用{}包裹,而非c,java之類只有一句條件內(nèi)代碼就省略.
而條件表達(dá)式,不需要()包裹.
沒(méi)有: ? 三元運(yùn)算符(可讀性好??)

4. 循環(huán)

4.1 loop: 通過(guò)break跳出(相當(dāng)于do-while的變體)

4.2 while: 先設(shè)好條件,在循環(huán)

4.3 for: 只有for-in (循環(huán)內(nèi)容需要在語(yǔ)句外設(shè)定)

第4章 函數(shù)

1. 簡(jiǎn)介

fn 函數(shù)名(參數(shù)1:類型1, 參數(shù)2:類型2, ...) -> 返回類型

只有參數(shù)和返回值一樣的函數(shù)可以替換賦值,通過(guò)通用fn類型過(guò)渡.

2. 發(fā)散函數(shù)

返回類型是!的函數(shù)就是發(fā)散函數(shù),代表一個(gè)函數(shù)執(zhí)行錯(cuò)誤(panic),它能夠轉(zhuǎn)換為任意類型,這樣就允許任何類型的函數(shù)拋出異常并處理

3. main函數(shù)

Rust中傳遞參數(shù)與返回類型處理都有特殊的API,因此main函數(shù)一定是無(wú)參數(shù),無(wú)返回的.

std::env::args() // 輸入?yún)?shù)
std::env::var()  // 單個(gè)環(huán)境變量,返回Option枚舉
std::env::vars() // 所有環(huán)境變量列表
std::process::exit(O) // 退出碼

4. const fn

函數(shù)常量在編譯階段運(yùn)行完畢,其返回值也作為常量保存.

5. 函數(shù)遞歸

Rust目前并沒(méi)有尾調(diào)用優(yōu)化,遞歸層數(shù)太多,可能引起調(diào)用棧被撐爆

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撼唾,一起剝皮案震驚了整個(gè)濱河市绍刮,隨后出現(xiàn)的幾起案子关面,更是在濱河造成了極大的恐慌民晒,老刑警劉巖亥啦,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異错妖,居然都是意外死亡暂氯,警方通過(guò)查閱死者的電腦和手機(jī)痴施,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人绵估,你說(shuō)我怎么就攤上這事∪纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵挪钓,是天一觀的道長(zhǎng)是越。 經(jīng)常有香客問(wèn)我,道長(zhǎng)碌上,這世上最難降的妖魔是什么倚评? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮馏予,結(jié)果婚禮上天梧,老公的妹妹穿的比我還像新娘。我一直安慰自己霞丧,他們只是感情好呢岗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般敷燎。 火紅的嫁衣襯著肌膚如雪暂筝。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天硬贯,我揣著相機(jī)與錄音焕襟,去河邊找鬼。 笑死饭豹,一個(gè)胖子當(dāng)著我的面吹牛鸵赖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拄衰,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼它褪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了翘悉?” 一聲冷哼從身側(cè)響起茫打,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妖混,沒(méi)想到半個(gè)月后老赤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡制市,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年抬旺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祥楣。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡开财,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出误褪,到底是詐尸還是另有隱情责鳍,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布兽间,位于F島的核電站薇搁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渡八。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一传货、第九天 我趴在偏房一處隱蔽的房頂上張望屎鳍。 院中可真熱鬧,春花似錦问裕、人聲如沸逮壁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窥淆。三九已至卖宠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忧饭,已是汗流浹背扛伍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留词裤,地道東北人刺洒。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吼砂,于是被迫代替她去往敵國(guó)和親逆航。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容