之後講解的環境應該都是 win10 (作業系統) + cygwin (shell) + vim (編輯器)
Hello World
Photo by NASA on Unsplash |
首先用編輯器打開檔案
.rs 是 Rust 原始碼的副檔名喔
$ vim hello.rs輸入以下程式碼
fn main() { println!("Hello Rust!!!!"); }
簡單說明一下:
fn 就是定義一個函式 (function) 的關鍵字
而 main() 這個函式就是整個程式的進入點
println!() 這個不是函式而是巨集 (因為有 ! 結尾),功能就有點像是 printf() 可以輸出字串
儲存後離開
使用 rustc 這個 Rust 的編譯器編譯程式碼
$ rustc hello.rs執行,會發現明明沒有指定輸出檔名 (-o XXX) 但就會自動用原始碼的檔名
$ ./hello
沒意外就長下面這樣囉 OuO
這樣就完成第一個 Rust 程式啦 OuO
原本要介紹 Crago 但是因為好像差頗多的所以就留到下一次
所以就來繼續介紹輸出到螢幕的方式
因為 debug 最需要就是 print 大法
題外話:然後發現很多大師都是這樣用而不用 debug 工具 OAO
e.g. Python之父Guido van Rossum、Linux之父Linus Torvalds
恩....然後就不先說明巨集 (macro) 是什麼,可以暫時先把它當成函式用
首先是 println!() 它會輸出中間的字串再加上一個換行
也可以使用 {} 來代表參數,就很像 printf()
println!("Hello {}", "OuO"); // Hello OuO
也可以指定參數的位置
println!("Hello {1} {0}", "OuO", "QuQ"); // Hello QuQ OuO
有輸出換行的當然也有沒有換行的,就是 print!()
但是注意 stdout 是以行為 buffer 的單位,所以若要使用 print!()
要在後方加上 flush() 以保證會輸出
use std::io::{self, Write}; fn main() { print!("Hello {}!!!!", "OuO"); io::stdout().flush().unwrap(); } // Hello OuO
再來還有一個常看到的是斷言 (assert)
不過若是錯的它就會直接 panic 也就是程式強制中斷
像以下兩行都會使得程式中斷
當然 true、false 都可以換成任意變數或字串
不過 assert!() 內部要放 boolean
而 assert_eq!() 會比較兩個參數是否相同
assert!(false); // 因為不為 true,所以 panic assert_eq!(true, false); // 因為 true != false,所以 panic
下面是上面兩句斷言的執行結果
注意執行到第一句就會跳出程式了,因為第一句就 panic
若要追蹤整個 panic 的發生位置 (call stack) 可以在執行前使用 RUST_BACKTRACE
注意在 fish shell 不可用,請換到 bash
$ RUST_BACKTRACE=1 ./hello
沒有留言:
張貼留言