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 orclang++
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