學Rust, 進華為!
最近Rust 的發展十分迅速。 2021 年2月9日 , Mozilla 、 Amazon 、 華為、谷歌、微軟作為創始白金 成員共同成立 Rust 基金會 ,這五家創始公司公開承諾,每年對Rust投資,不會少於 100 萬美元,每年的預算不少於 100萬美元,兩年內每年投入100 萬美元,用於開發、維護和推廣 Rust 語言專案。
可見, 華為對於Rust 語言的支持,那絕不是像某些公司的研發費用一樣隨便說說, 這些可都是真金白銀的支出!而且還是美元!
可能很多人對 Rust 基金會創始成員中出現華為感到驚訝,因為很多人,並沒有太多地了解華為對於Rust 專案的支持, 事實上,華為有很多用 Rust 編寫的產品,比如 StratoVirt:
據華為虛擬化高級工程師道一介紹:
StratoVirt是面向雲數據中心的企業級虛擬化VMM解決方案。 它提供了支持虛擬機器 (VM)、容器和Serverless三種場景的統一架構,在輕量低噪、軟硬整合、Rust語言級安全等方面,具備關鍵技術優勢
StratoVirt
StratoVirt 架構圖:
有關StratoVirt更加詳細的介紹,可以看這個影片:
StratoVirt 面向openEuler的輕量級虛擬化平台 吳斌_嗶哩嗶哩_bilibili
華為在開發StratoVirt 時, 為什麽選擇Rust 呢? 據華為高級開發經理徐飛介紹, 華為分析QEMU 專案的bug 列表中分析得出, 一半以上的嚴重問題都是由於C 語言的記憶體問題導致的, 因此, 他們選擇了專註於記憶體安全的Rust 語言。
而StratoVirt 也不負眾望,在Rust 語言的助力下, 做到了強安全性和隔離性, 而這個特性,對於統一支撐虛擬機器、容器和Servless三種場景的企業級虛擬平台而言,這無疑是最為看重的特性!
StratoVirt 專案的Git地址: https://gitee.com/openeuler/stratovirt
在華為內部,也有大量專案使用Rust 進行開發, 華為更是選定了Rust 作為華為可信計算的程式語言!
所以說, 如果想進入華為公司工作, 那麽, 熟練掌握Rust 語言,無疑會增加自己的競爭力!
來看一則華為的招聘資訊:
看看下面的華為的招聘,指名招聘Rust 工程師,要求為3年編程經驗, Rust語言的要求為最少一年:
學Rust語言, 進華為工作!
今天來介紹Rust 語言中的數據輸出宏println!, 值得註意的是, println!並非函數,而是一個宏定義。今天主要來熟悉println!輸出時候的各種主要用法。
建立專案
首先,建立一個新專案:
cargo new println_intro
隨後在在code中開啟這個專案:
$ cargo new println_intro
Created binary (application) `println_intro` package
learn_rust % cd println_intro
println_intro % code .
println! 講解
然後,我們在main.rs中輸入下面程式碼:
fn main() { let x = 1; println!("x的值是{x}");}
在第3行, 我們可以看出, 之前的大部份程式碼,都使用{x}的方式來打印變量的值。
今天,我們來學習一些println!新的方式。
使用{} 來打印變量
首先來看程式碼:
fn main() { let x = 1; println!("x的值是{}",x);}
在這裏, 我們使用的大括弧「{}」是空的, 在這種情況下, x的內容會被轉換成String類別, 並在「{}」中打印。
需要註意的是, 當使用"{}"的方式打印變量時, 逗號「,」後面的變量和「{}」是一一對應的,可以跟多個變量,例如:
fn main() { let x = 1; println!("x的值是{},x+1的值是{}",x,x+1);}
結果:
使用位置參數{0}
除了使用空的"{}"外, println!還可以使用位置參數,透過"{0}"中的數碼,指明位置參數, 來看程式碼:
fn main() { let x = 1; let y = 2; let z = 3; println!("x的值是{2},y的值是{1},z的值是{0}",z,y,x);}
來檢視結果:
使用命名參數
來看程式碼:
//使用命名參數 println!("{a}{b}{c}",a="我",b="愛",c="Rust語言");
執行結果:
指定顯示寬頻
可以使用width來指定顯示寬度:
println!("打印數碼1,註意數碼1前面的空格{number:>width$}", number=1, width=6);
檢視結果:
這裏顯示的文本是右對齊, 因為我們在程式碼中要求":>width$", 而且傳入的width的長度是6, 所以在打印出來的結果中,1 前面就有5個空格:
打印的數碼前補齊0
在一些金融場景中,數碼前面如果有空格,就需要用0來補齊,下面我們來看一下Rust中如何補齊:
println!("打印數碼1,註意1前面的補齊{number:>0width$}", number=1, width=6);
在程式碼中, 我們用":>0width$"的方式,指明要補齊6位數碼:
動態執行結果:
打印二進制格式
最後,來看看使用「:b」打印二進制。
首先來看程式碼:
println!("只有{} 分之 {:b} 的人知道二進制, 其他的人都不知道。", 1, 2);
下面的結果可能會讓很多人驚訝,因為2這個值並沒有打印出來:
2在結果中,顯示為「10」,假如我們把數碼改成8, 則結果顯示為「1000」:
因為":b"就是顯示變量的二進制結果, 2的二進制表示為「10」,而8的二進制則是「1000」,如果改成10, 則顯示結果就是「1010」, 這樣大家就明白了吧。
最後
本文介紹了Rust 語言的println!宏的格式化打印的幾種情況。作為Rust 學習者和開發者, 了解格式化打印是非常重要的。
同時, 還展示了華為的一則招聘資訊, 華為公開招聘Rust 程式設計師, 如果覺得英語水平過關的話,不妨前去應聘哦!
本文程式碼已經送出到Github, 地址:https://github.com/hintcnuie/learn_rust