rust 開篇

1火惊、rust 語言特點(diǎn)

  • Rust 基于C++惯裕,理論上來說撞叽,它的速度與 C / C++ 同級
  • Rust 被設(shè)計為保證內(nèi)存和線程安全
  • Rust 類似 C 或者 C++ 也是編譯型的編程語言
  • 與C/C++區(qū)別
    • Rust是線程安全的
    • Rust 不允許空指針懸掛指針
  • Rust主要用于高度安全和并發(fā)的軟件系統(tǒng)

2铐维、下載安裝rust

1. 源碼安裝 rust

1. 下載rust源碼

git clone

git clone https://github.com/rust-lang/rust.git

或者直接下載當(dāng)前版本的源碼壓縮包

wget https://github.com/rust-lang/rust/archive/master.zip

2. rust源碼編譯的環(huán)境要求

  • g++ 4.7 or later or clang++ 3.x or later
  • python 2.7 (but not 3.x)
  • GNU make 3.81 or later
  • cmake 3.4.3 or later
  • curl
  • git

3. 進(jìn)入到rust源碼目錄編譯

?  rust ./x.py build && sudo ./x.py install
  • ./x.py build 執(zhí)行py腳本下載一些依賴文件
  • sudo ./x.py install 執(zhí)行py腳本進(jìn)行安裝

2. 直接下載安裝

?  ~ curl -sSf https://static.rust-lang.org/rustup.sh | sh
Password:
rustup: gpg available. signatures will be verified
rustup: downloading manifest for 'stable'
rustup: downloading toolchain for 'stable'
######################################################################## 100.0%
gpg: assuming signed data in '/Users/xiongzenghui/.rustup.sh/dl/279d7075ba297b992559/rust-1.24.1-x86_64-apple-darwin.tar.gz'
gpg: 簽名建立于 五  3/ 2 07:47:10 2018 CST
gpg:               使用 RSA 密鑰 5CB4A9347B3B09DC
gpg: 完好的簽名懈词,來自于“Rust Language (Tag and Release Signing Key) <rust-key@rust-lang.org>” [未知]
gpg: 警告:這把密鑰未經(jīng)受信任的簽名認(rèn)證!
gpg:       沒有證據(jù)表明這個簽名屬于它所聲稱的持有者。
主鑰指紋: 108F 6620 5EAE B0AA A8DD  5E1C 85AB 96E6 FA1B E5FE
子鑰指紋: C134 66B7 E169 A085 1886  3216 5CB4 A934 7B3B 09DC
rustup: installing toolchain for 'stable'
rustup: extracting installer
Password:
install: creating uninstall script at /usr/local/lib/rustlib/uninstall.sh
install: installing component 'rustc'
install: installing component 'cargo'
install: installing component 'rls-preview'
install: installing component 'rustfmt-preview'
install: installing component 'rust-analysis-x86_64-apple-darwin'
install: installing component 'rust-std-x86_64-apple-darwin'
install: installing component 'rust-docs'

    Rust is ready to roll.

?  ~

3唇兑、rust helloworld

源文件

fn main() {
  println!("Hello World by Rust ~");
}

編譯鏈接生成可執(zhí)行程序main

?  main rustc main.rs
?  main file main
main: Mach-O 64-bit executable x86_64
?  main

執(zhí)行可執(zhí)行程序main

?  main ./main
Hello World by Rust ~
?  main

4、格式化輸出

// fn main() {
//   let mystr :&str = "abcd";
//   println!("mystr  address:  {:p}", &mystr);
//   println!("mystr  address:  {:p}", &mystr[1..]);
//   println!("mystr  address:  {:p}", &mystr[2..]);
//   println!("mystr  address:  {:p}", &mystr[3..]);
// }


fn main() {
  // {}表示占位符桦锄,由后面的31替換
  println!("{} days", 31);

  // {0} 使用后面第幾個參數(shù)替換
  println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");

  // named arguments.
  println!("{subject} {verb} {predicate}",
    predicate="over the lazy dog",
    subject="the quick brown fox",
    verb="jumps"
  );

  // Special formatting can be specified after a `:`.
  // :b => 二進(jìn)制輸出
  println!("{} - {:b} ", 2, 2);

  // error 少一個參數(shù)
  // println!("My name is {0}, {1} {0}", "Bond")

  // {:?} 自動根據(jù)數(shù)據(jù)類型輸出
  let f2: bool = false;
  println!("f2 = {:?}", f2);

  // {:p} 輸出變量標(biāo)記的內(nèi)存地址
  let name = "xiong";
  println!("&name = {:p}", &name) 
}
?  main make
rustc main.rs
./main
31 days
Alice, this is Bob. Bob, this is Alice
the quick brown fox jumps over the lazy dog
2 - 10
f2 = false
&name = 0x7fff58cf2740
?  main

5扎附、條件編譯

1. #[cfg(foo)]

#[cfg(foo)]
fn foo() {
  println!("foo()")
}

fn main()
{
  #[cfg(foo)]
  foo();
}
?  main rustc main.rs
?  main ./main
?  main
?  main
?  main rustc main.rs --cfg foo
?  main ./main
foo()
?  main

2. #[cfg(not(foo))]

#[cfg(not(foo))]
fn foo() {
  println!("foo()")
}

fn main()
{
  #[cfg(not(foo))]
  foo();
}
?  main rustc main.rs --cfg foo
?  main ./main
?  main
?  main rustc main.rs
?  main ./main
foo()
?  main

3. [cfg(foo = "baz")]

#[cfg(feature = "run")]
fn run() {
  println!("run()")
}

#[cfg(feature = "cry")]
fn cry() {
  println!("cry()")
}

fn main()
{
  #[cfg(feature = "run")]
  run();

  #[cfg(feature = "cry")]
  cry();
}
?  main rustc main.rs --cfg feature=\"run\"
?  main ./main
run()
?  main
?  main rustc main.rs --cfg feature=\"cry\"
?  main ./main
cry()
?  main
?  main rustc main.rs
?  main ./main
?  main

4. any 條件組合

#[cfg(all(run, cry))]
fn run() {
  println!("run()")
}

#[cfg(all(run, cry))]
fn cry() {
  println!("cry()")
}

#[cfg(any(run, cry))]
fn any() {
  println!("cry() || run()")
}

fn main()
{
  #[cfg(any(run, cry))]
  any();
}
?  main rustc main.rs
?  main ./main
?  main
?  main rustc main.rs --cfg run
?  main ./main
cry() || run()
?  main
?  main rustc main.rs --cfg cry
?  main ./main
cry() || run()
?  main

5. all 條件組合

#[cfg(all(run, cry))]
fn run() {
  println!("run()")
}

#[cfg(all(run, cry))]
fn cry() {
  println!("cry()")
}

#[cfg(any(run, cry))]
fn any() {
  println!("cry() || run()")
}

fn main()
{
  #[cfg(all(run, cry))]
  {
    run();
    cry();
  }

  #[cfg(any(run, cry))]
  any()
}
?  main rustc main.rs
?  main ./main
?  main
?  main rustc main.rs --cfg run
?  main ./main
cry() || run()
?  main
?  main rustc main.rs --cfg cry
?  main ./main
cry() || run()
?  main
?  main rustc main.rs --cfg cry --cfg run
?  main ./main
run()
cry()
cry() || run()
?  main

6. 任意位置使用cfg內(nèi)置對象

fn main()
{
  if cfg!(target_os = "macos") || cfg!(target_os = "ios") {
    println!("Think Different!");
  }
}
?  main rustc main.rs
?  main ./main
Think Different!
?  main
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市结耀,隨后出現(xiàn)的幾起案子留夜,更是在濱河造成了極大的恐慌,老刑警劉巖图甜,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碍粥,死亡現(xiàn)場離奇詭異,居然都是意外死亡黑毅,警方通過查閱死者的電腦和手機(jī)嚼摩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矿瘦,“玉大人枕面,你說我怎么就攤上這事「咳ィ” “怎么了潮秘?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長易结。 經(jīng)常有香客問我枕荞,道長,這世上最難降的妖魔是什么搞动? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任躏精,我火速辦了婚禮,結(jié)果婚禮上滋尉,老公的妹妹穿的比我還像新娘玉控。我一直安慰自己,他們只是感情好狮惜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布高诺。 她就那樣靜靜地躺著,像睡著了一般碾篡。 火紅的嫁衣襯著肌膚如雪虱而。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天开泽,我揣著相機(jī)與錄音牡拇,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛惠呼,可吹牛的內(nèi)容都是我干的导俘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼剔蹋,長吁一口氣:“原來是場噩夢啊……” “哼旅薄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泣崩,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤少梁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矫付,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凯沪,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年买优,在試婚紗的時候發(fā)現(xiàn)自己被綠了妨马。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡而叼,死狀恐怖身笤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葵陵,我是刑警寧澤液荸,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站脱篙,受9級特大地震影響娇钱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绊困,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一文搂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秤朗,春花似錦煤蹭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至作谭,卻和暖如春稽物,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背折欠。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工贝或, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吼过,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓咪奖,卻偏偏與公主長得像盗忱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赡艰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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

  • Distutils可以用來在Python環(huán)境中構(gòu)建和安裝額外的模塊售淡。新的模塊可以是純Python的,也可以...
    MiracleJQ閱讀 3,075評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理慷垮,服務(wù)發(fā)現(xiàn),斷路器揍堕,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 學(xué)會去向潛意識層面尋求答案料身,都說日有所思夜有所夢,所以很多我們夢中出現(xiàn)的事情展開聯(lián)想衩茸,會發(fā)現(xiàn)我們想要的答案芹血。
    合肥李風(fēng)麗閱讀 135評論 0 0
  • 分享最近收獲的幾個句子: 弗蘭克·克拉克的一句話,至今印象深刻: 家長可以傳授給孩子最重要的一課便是楞慈,如何離開父母...
    堅持行動家安小小閱讀 92評論 0 1