超簡單介紹
Rust 是 Mozilla Research 設計出來的程式語言。(千秋覺得)它最主要的特性是
以安全為主要訴求
藉著型別系統,實現資料所有權以及借用(Ownership & borrowing)的概念,在編譯的階段便可以確認資源的使用情況,讓開發者不需要介入資源的管理。
強大的靜態型別系統
利用
trait
達成多型、可以建造 algebraic data type 、此外,如上一點所描述,在型別系統中標示了資料的所有權等等。 Rust 利用此型別系統達成了資源管理安全,以及並行處理安全表達力強
有 functional programming 等高階語言中可見的表達模式
執行效率好
利用 LLVM 直接編譯到機器碼。注意這個描述只限於 release 模式。
可用於嵌入式系統開發
您甚至可以利用
#[deny(box-pointers)]
來檢查您的程式是否使用了 heap ; C 語言的話,不要使用malloc
/free
就保證不會用到heap
,但是沒人替您檢查這個…
千秋覺得 Rust 有許多和 Haskell 相似的地方(但是它們兩者事實上有非常大的差異)
強大的靜態型別系統( algebraic data type 以及
trait
/ typeclass )帶來了
Option
(Rust)以及Maybe
(Haskell),不需要使用null
了。Pattern matching
資料預設為不可變(immutable)
在 Rust 您必須明確指出某個資料為可變,方可改變其內容;而在 Haskell 裡面,如果沒使用奇怪的招數(像是利用 FFI 來修改資料),那資料都是不可變。
Operator overloading
在 Rust 裡,藉著實作
trait
來賦予資料使用運算子的能力;在 Haskell ,運算子被視為函數。此外,使用 Haskell 時,您可以定義新的運算子(<
,.
,_>
,>=>
等稀奇古怪的),也可以把一般函數當成運算子1234-- haskell code-- r1 is equivalent to r1r1 = add a br2 = a `add` b簡易的 FFI (foreign function interface)界面
您可前往 其官方網站 一探究竟
開發工具
若透過 官方的安裝方式 來安裝,則已經取得建置系統 cargo
以及開發工具版本管理系統 rustup
,加上編譯器 rustc
。此時只要挑選順手的編輯器即可
建置及包裹管理系統
官方有
cargo
(使用官方的安裝方式會一併取得)若需要在 Linux 建置 Windows 的執行檔,請參考 此文
開發工具版本管理
官方有
rustup
(使用官方的安裝方式會一併取得)文字編輯器
IntelliJ IDEA + rust plugin
目前只有這個文字編輯器使用的 plugin 不依賴
racer
來進行程式碼的自動完成Atom
language-rust
+racer
+linter-rust
Visual Studio Code
Emacs
Vim
除錯器
測試工具
cargo test
即應可滿足大多數需求。值得注意的是,cargo test
會一併測試註解說明(//!
以及///
)內的範例程式碼
學習資源
Rust 的學習資源(相對於甚至已有互動式做中學的 JavaScript 以及 Python 來說)似乎不多。您可以參考 https://github.com/ctjhoa/rust-learning 來了解現有的學習資源。
想學習 Rust 的人可以先用 The Rust Programming Language 來:
能夠弄一個 hello world 程式
弄懂大略的語法
函數宣告、資料結構、方法宣告、trait 的概念、型別系統的概念
您可以利用位在 https://github.com/carols10cents/rustlings 的小練習來熟悉語法
稍加了解 ownership, borrowing 以及 lifetime 的概念
接著,利用 exercism 來做練習,讓自己更加熟悉 Rust 的語法以及設計哲學。把 exercism 內的練習做個九成之後,就可以考慮看看要不要弄個中小型專案啦!
程式庫
您亦可參考 Awesome Rust 來取得更多最新的程式庫資訊
基礎輔助
編譯系統
libc
提供比較適用於 FFI 的型別,以及 C runtime 中的某些服務
gcc
數學與計算
rand
產生隨機數
安全與加密
ring
在 Windows 以及 macOS 使用作業系統服務;其他作業系統使用 OpenSSL
日期與時間
- chrono
剖析器製作
- nom
多執行緒 / 多功 / 異步處理
actix
Actor system in rust
mio
Metal IO acync IO library
tokio
Async IO library build on top of
mio
may
Corutine library in Rust programming language
框架
本機遊戲
piston
ggez
伺服器以及服務設計
rouille
hyper
reroute
利用 regular expression 提供 routing 的功能
pencil
iron
nickel
rocket
目前(2017/10/26)需要使用 nightly 的編譯器方可使用
Gotham
使用者界面
設定參數處理(命令列或者設定檔)
命令列
clap
功能豐富的命令列參數處理程式庫
文字
colord
替您的 terminal 小工具添加色彩
圖形
gtk-rs
conrod
Part of
piston
網路通訊
HTTP
hyper
reqwest
FTP
- ftp
TCP etc.
smoltcp
Standalone, bare-metal-in-mind basic protocol library.
資料格式處理
資料序列化(serialization)
serde
可以處理 json, xml 等諸多格式
資料格式剖析以及輸出
serde
pikkr
JSON parser
byteorder
位元順序轉換、自位元陣列 (&[u8]) 讀取資料
quick-xml
Streaming pull XML parser & writer
文字處理
國際化
- fluent
樣板引擎 (Template engines)
askama
使用 macro 的樣板引擎
t4rust
使用 macro 的樣板引擎
其他
optional_struct
12345678910111213141516171819// Copy and modified from README of `optional_struct`struct Foo {meow: u32,woof: String,}// The following code are generated by the derived trait `OptionalStruct`struct OptionalFoo {meow: Option<u32>,woof: Option<String>,}impl Foo {pub fn apply_options(&mut self, optional_struct: OptionalFoo) {// Set fields according to `optional_struct`}}// End generated code region
自行撰寫之文章
(注意:文章轉移中)
其他高手的文章
-
討論 Rust 程式撰寫時關於效能的注意事項
Hidden treasures of the Rust ecosystem
列出一些好用的 crate ,以及一些實用的
std
小技巧