Skip to content

Latest commit

 

History

History
275 lines (188 loc) · 9.4 KB

some-rust.rst

File metadata and controls

275 lines (188 loc) · 9.4 KB
title:Rust 的一些紀錄
slug:some-rust
Date: 2015-05-14 21:57
modified:2015-05-24 21:57
category:Rust
tags:
Author: wdv4758h
summary:

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

  • 待研究列表
    • traits
    • format! 實作
    • macro
    • Ownership
      • Box
    • Lifetime
    • static variable
    • dylib, rlib, and staticlib
    • coroutine

有!

有!

Higher-order functions Non-local variables Partial application
Arguments Results Nested functions Anonymous functions Closures
Yes Yes Yes Yes Yes No

有!在 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);

有!

(目前理解) 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 狀況可以檢查。

(研讀中 XD)

官方目前沒有提供, 但是有專案正在進行中

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

官方有實作,也有文件,不過放在另外一個 package

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

使用 macro format!

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

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

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

現在出現的 framework 有 :