最近又心血來潮翻了一點 Rust, 目前版本還在 1.0 beta (現在已經正式 release 啦~), 但是有許多東西已經差不多定型了, 開始紀錄一下狀況 XD

  • 待研究列表
    • traits

    • format! 實作

    • macro

    • Ownership
      • Box

    • Lifetime

    • static variable

    • dylib, rlib, and staticlib

    • coroutine


[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 叫作 OptionOption 可以用來表示 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 狀況可以檢查。

[-] 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] Native Threading Support?

(Native Threads) 目前是 1:1 的 thread,每個 user thread 都會對應到一個 kernel thread

[O] Format String?

使用 macro format!

format!("the value is {}", 123)

Third Party

Django-like project?

還在發展中,漸漸有一些 web framework 出現。

上面那篇的作者有寫過 Django,後來跳出來用 Rust 想做另一套自己想要的 web framework, 但是 Rust 在當時還沒有強大的 HTTP library 可以用, 所以寫了 rust-http,後來對 Rust 更熟悉以及有了 rust-http 的經驗後, 決定重設計一個 library 並增加更多支援,這 library 被取名為 Teepee

現在出現的 framework 有 :