成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2022 Rust 入門指南

開發 后端
如果你打算在今年探索 Rust,請下載我們的免費 Rust 速查表,以供快速參考基礎知識。

Rust 是一門相對較新的編程語言,受到各個企業的程序員的歡迎。盡管如此,它仍是一門建立在之前所有事物之上的語言。畢竟,Rust 不是一天做出來的,所以即便 Rust 中的一些概念看起來與你從 Python、Java、C++ 等編程語言學到的東西大不相同,但它們都是基于同一個基礎,那就是你一直與之交互(無論你是否知道)的 CPU 和 NUMA(非統一內存訪問Non Uniform Memory Access)架構,因此 Rust 中的一些新功能讓人感覺有些熟悉。

現在,我的職業不是程序員。我沒耐心但我又有點兒強迫癥。當我需要完成某件事時,如果一門語言不能幫助我相對較快地獲得想要的結果,那么我很少會受到鼓舞而使用它。Rust 試圖平衡兩個矛盾:現代計算機對安全和結構化代碼的需求,和現代程序員對編碼工作事半功倍的渴望。

安裝 Rust

??rust-lang.org??? 網站有豐富的的文檔指導如何安裝 Rust,但通常,它就像下載 ??sh.rustup.rs?? 腳本并運行它一樣簡單。

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs
$ less sh.rustup.sh
$ sh ./sh.rustup.rs

沒有類

Rust 沒有類,也不使用 ??class??? 關鍵字。Rust 確實有 ??struct?? 數據類型,但它的作用是充當數據集合的一種模板。因此,你可以使用結構體struct,而不是創建一個類來表示虛擬對象:

struct Penguin {
  genus: String,
  species: String,
  extinct: bool,
  classified: u64,
}

你可以像使用類一樣使用它。例如,當定義完 ??Penguin?? 結構,你就可以創建它的實例,并與該實例進行交互:

struct Penguin {
  genus: String,
  species: String,
  extinct: bool,
  classified: u64,
}

fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(),
   species: "R adeli?".to_owned(), 
   extinct: false
   classified: 1841 };

  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
    println!("Sadly this penguin has been made extinct.");
  }
}

將 ??impl??? 數據類型與 ??struct?? 數據類型結合使用,你可以實現一個包含函數的結構體,并且可以添加繼承和其他與類相似的特性。

函數

Rust 中的函數很像其他語言中的函數。每個函數都代表一組嚴謹的任務,你可以在需要時調用它們。主函數名必須是 ??main??。

用 ??fn?? 關鍵字聲明函數,后跟函數名稱和函數接受的所有參數。

fn foo() {
  let n = 8;
  println!("Eight is written as {}", n);
}

通過參數,將信息從一個函數傳遞到另一個函數。例如,我已經創建了一個 ??Penguin??? 類(結構),并且我有一個 ??Penguin??? 的實例為 ??p???,將目標函數的參數指定為 ??Penguin??? 類型,就可把 ??p?? 的屬性從一個函數傳遞到另一個函數。

fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(), 
    species: "R adeli?".to_owned(), 
    extinct: false, classified: 1841 };
  printer(p);
}

fn printer(p: Penguin) {
  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
    println!("Sadly this penguin has been made extinct.");
  }
}

變量

Rust 默認創建的為不可變immutable變量。這意味著你創建的變量以后無法更改。這段代碼雖然看起來沒問題,但無法編譯:

fn main() {
 let n = 6;
  let n = 5;
}

但你可以使用關鍵字 ??mut?? 聲明一個可變mutable變量,因此下面這段代碼可以編譯成功:

fn main() {
  let mut n = 6;
  println!("Value is {}", n);
  n = 5;
  println!("Value is {}", n);
}

編譯

Rust 編譯器,至少就其報錯信息而言,是可用的最好的編譯器之一。當你在 Rust 中出錯時,編譯器會真誠地告訴你做錯了什么。實際上,僅通過從編譯器錯誤消息中學習,我就了解了 Rust 的許多細微差別(就我理解到的 Rust 的任何細微差別而言)。即便有時錯誤消息太過于模糊,而不知所以然,互聯網搜索幾乎總能得到解釋。

啟動 Rust 程序的最簡單方法是使用 ??cargo??,它是 Rust 的包管理和構建系統。

$ mkdir myproject
$ cd myproject
$ cargo init 

以上命令為項目創建了基本的基礎架構,最值得注意的是 ??src??? 子目錄中的 ??main.rs?? 文件。打開此文件,把我為本文生成的示例代碼粘貼進去:

struct Penguin {
  genus: String,
  species: String,
  extinct: bool,
  classified: u64,
}

fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(), species: "R adeli?".to_owned(), extinct: false, classified: 1841 };
  printer(p);
  foo();
}

fn printer(p: Penguin) {
  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
    println!("Sadly this penguin has been made extinct.");
  }
}

fn foo() {
  let mut n = 6;
  println!("Value is {}", n);
  n = 8;
  println!("Eight is written as {}", n);
}

使用 ??cargo build?? 命令進行編譯:

$ cargo build

執行 ??target??? 子目錄下的二進制程序,或者直接運行 ??cargo run?? 命令來運行你的項目:

$ cargo run
Species: R adeli?
Genus: Pygoscelis
Classified in 1841
Value is 6
Eight is written as 8

Crates

任何語言的大部分便利都來自于它的庫或模塊。在 Rust 中,進行分發和跟蹤的庫稱為 “crate”(箱子)。??crates.io?? 是一個很好的社區 crate 注冊網站。

把一個 crate 添加到你的 Rust 項目,首先要在 ??Cargo.toml??? 文件中添加這個 crate。例如,要安裝隨機數函數,我使用名為 ??rand??? 的 crate,使用 ??*?? 作為通配符,以確保在編譯時獲得最新版本:

[package]
name = "myproject"
version = "0.1.0"
authors = ["Seth <seth@opensource.com>"]
edition = "2022"

[dependencies]
rand = "*"

在 Rust 代碼中使用它需要在最頂行使用 ??use?? 語句:

use rand::Rng;

以下是一些創建隨機種子和隨機范圍的示例代碼:

fn foo() {
  let mut rng = rand::thread_rng();
  let mut n = rng.gen_range(1..99);

  println!("Value is {}", n);
  n = rng.gen_range(1..99);
  println!("Value is {}", n);
}

你可以使用 ??cargo run??? 來運行它,它會檢測代碼是否被更改并觸發一個新的構建。構建過程中下載名為 ??rand??? 的 ??crete??? 和它依賴的所有 ??crate??,編譯代碼,然后運行它:

$ cargo run
Updating crates.io index
Downloaded ppv-lite86 v0.2.16
Downloaded 1 crate (22.2 KB) in 1.40s
 Compiling libc v0.2.112
 Compiling cfg-if v1.0.0
 Compiling ppv-lite86 v0.2.16
 Compiling getrandom v0.2.3
 Compiling rand_core v0.6.3
 Compiling rand_chacha v0.3.1
 Compiling rand v0.8.4
 Compiling rustpenguin v0.1.0 (/home/sek/Demo/rustpenguin)
 Finished dev [unoptimized + debuginfo] target(s) in 13.97s
 Running `target/debug/rustpenguin`

Species: R adeli?
Genus: Pygoscelis
Classified in 1841
Value is 70
Value is 35

Rust 速查表

Rust 是一門令人非常愉快的語言。集成了在線注冊網站、有用的編譯器和幾乎直觀的語法,它給人的適當的現代感。

但請不要誤會,Rust 仍是一門復雜的語言,它具有嚴格的數據類型、強作用域變量和許多內置方法。Rust 值得一看,如果你要探索它,那么你應該下載我們的免費 ??Rust 速查表??,以便快速了解基礎知識。越早開始,就越早了解 Rust。當然,你應該經常練習以避免生疏。


??Rust 速查表??


責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-08-03 15:19:08

FlexBuilder

2011-05-18 15:15:44

MySQL

2021-03-26 10:31:19

人工智能AIOps

2011-03-08 09:22:37

2020-03-13 14:20:02

代碼開發 Rust

2024-04-11 13:13:27

2023-05-23 18:31:14

Rust編程

2020-03-09 11:43:35

RustCargo編程語言

2024-01-11 11:51:51

Rustmap數據結構

2024-03-07 09:00:04

Rust數據可視化

2013-01-08 13:33:07

Android開發Activity入門指南

2019-10-12 00:24:29

微隔離SDN安全架構

2010-07-20 16:13:25

Perl線程

2010-12-31 13:30:12

2011-03-08 16:50:35

2024-11-19 15:07:07

2019-07-18 07:52:01

路由策略IP路由

2015-09-24 09:54:32

物聯網

2011-01-10 13:21:45

linuxsamba

2022-05-06 09:51:39

開源代碼編輯器語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美中文字幕在线观看 | 国产91在线 | 中日 | 成人激情视频 | 亚洲精品一级 | 超碰导航 | 久久久精| 99久久国产综合精品麻豆 | 欧美视频二区 | 久久久久久久电影 | 免费激情 | 伊人久久伊人 | 欧美日韩精品一区 | 亚洲毛片在线 | 国产成人啪免费观看软件 | 国产黄色大片 | 99精品久久| 久久国产高清 | 天天色综网| 偷拍自拍网址 | 国产精品久久久久久久免费大片 | 区一区二在线观看 | 国产成人精品一区二 | 国产色网 | 国产精品久久久久久久久久妞妞 | h视频免费观看 | 日韩欧美中文字幕在线观看 | 国产成人久久精品一区二区三区 | 免费国产一区二区视频 | 青青久久av北条麻妃海外网 | 亚洲国产一区二区三区四区 | 久久久精品一区二区三区 | 国产一级淫片免费视频 | h片在线观看免费 | 久草久草久草 | 毛片日韩| 少妇精品久久久久久久久久 | 中文精品视频 | 亚洲国产精品久久久 | 欧美日韩国产传媒 | 色婷综合网 | 成av在线|