最近又心血來潮翻了一點 Rust, 目前版本還在 1.0 beta (現在已經正式 release 啦~), 但是有許多東西已經差不多定型了, 開始紀錄一下狀況 XD
- 待研究列表
traits
format! 實作
macro
- Ownership
Box
Lifetime
static variable
dylib, rlib, and staticlib
coroutine
[O] Big Number 支援?
有!
[O] First-class function 支援?
有!
Higher-order functions |
Non-local variables |
Partial application |
|||
---|---|---|---|---|---|
Arguments |
Results |
Nested functions |
Anonymous functions |
Closures |
|
Yes |
Yes |
Yes |
Yes |
Yes |
No |
[O] map / reduce / filter 之類的東西?
有!在 iterator
let a = [1, 2];
// get a new iterator with map
let it = a.iter().map(|&x| 2 * x);
// get a new iterator with filter
let it = a.iter().filter(|&x| *x > 1);
// use fold (reduce) to get summation
let a = [1, 2, 3, 4, 5];
let value = a.iter().fold(0, |acc, &item| acc + item);
[O] Option type (maybe type) ?
有!
(目前理解) Maybe monad 裡面可能是該有的值或是 Nothing,
這樣包起來可以提醒你 handle 好意外狀況。
在 Rust 裡這樣的 type 叫作 Option
,
Option
可以用來表示 function 可能會 fail,
實際存的資料長這樣 :
pub enum Option<T> {
None,
Some(T),
}
其中可以看到除了預期的型態之外,多加了一個 None 為可能的回傳,
當處理出問題就回傳 None
,
適用於簡單的狀況。
但是如果狀況比較複雜,
想要知道為什麼會 fail 的時候,
可以使用 Result
,
實際存的資料長這樣 :
enum Result<T, E> {
Ok(T),
Err(E)
}
可以看到正常狀況下會回傳 Ok(T)
,失敗的話會回傳 Err(E)
,
跟前面的 Option
相比多了 error 狀況可以檢查。
[O] OOP (object-oriented programming)?
(研讀中 XD)
[O] Type Inference
[O] 高度的 Memory Control?
[-] REPL?
官方目前沒有提供, 但是有專案正在進行中
[?] 預設提供的 Sort Algorithm 是啥?
let mut v = [-5, 4, 1, -3, 2];
v.sort();
目前看 src/libcollections/slice.rs
裡面的 sort_by
是去 call merge_sort
Worst Case |
O(n log n) |
Average Case |
O(n log n) |
Best Case |
O(n log n) |
Space |
O(2 n) |
Stable |
Yes |
[O] Regular Expression 支援?
官方有實作,也有文件,不過放在另外一個 package
[O] FFI (Foreign Function Interface)?
[O] Import third party library?
[O] Native Threading Support?
(Native Threads) 目前是 1:1 的 thread,每個 user thread 都會對應到一個 kernel thread
[X] Garbage Collection?
[O] Format String?
使用 macro format!
format!("the value is {}", 123)
[O] Ownership?
Third Party
Django-like project?
還在發展中,漸漸有一些 web framework 出現。
上面那篇的作者有寫過 Django,後來跳出來用 Rust 想做另一套自己想要的 web framework,
但是 Rust 在當時還沒有強大的 HTTP library 可以用,
所以寫了 rust-http,後來對 Rust 更熟悉以及有了 rust-http 的經驗後,
決定重設計一個 library 並增加更多支援,這 library 被取名為 Teepee
。
現在出現的 framework 有 :