title: | Rust 的一些紀錄 |
---|---|
slug: | some-rust |
Date: | 2015-05-14 21:57 |
modified: | 2015-05-24 21:57 |
category: | Rust |
tags: | |
Author: | wdv4758h |
summary: |
Contents
- [O] Big Number 支援?
- [O] First-class function 支援?
- [O] map / reduce / filter 之類的東西?
- [O] Option type (maybe type) ?
- [O] OOP (object-oriented programming)?
- [O] Type Inference
- [O] 高度的 Memory Control?
- [-] REPL?
- [?] 預設提供的 Sort Algorithm 是啥?
- [O] Regular Expression 支援?
- [O] FFI (Foreign Function Interface)?
- [O] Import third party library?
- [O] Native Threading Support?
- [X] Garbage Collection?
- [O] Format String?
- [O] Ownership?
- Third Party
最近又心血來潮翻了一點 Rust, 目前版本還在 1.0 beta (現在已經正式 release 啦~), 但是有許多東西已經差不多定型了, 開始紀錄一下狀況 XD
- 待研究列表
- traits
- format! 實作
- macro
- Ownership
- Box
- Lifetime
- static variable
- dylib, rlib, and staticlib
- coroutine
有!
- Rust - Module num::bigint
- pidigits benchmark | Computer Language Benchmarks Game
- The Fastest BigInt In The West
有!
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 叫作 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 狀況可以檢查。
- Option Monads in Rust
- Error Handling in Rust
- On Error Handling in Rust
- Rust - Error Handling
- Using The Option Type Effectively
- The Option Type
- Wikipedia - Option type
(研讀中 XD)
- Abstraction without overhead: traits in Rust
- [2013] The Rise of the Gang of Four with Rust
- Go and Rust — objects without class
- Rust Book - Traits
- Rust Book - Traits Objects
- rust-guidelines - traits/objects
- Wikipedia - Trait (computer programming)
官方目前沒有提供, 但是有專案正在進行中
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
- Rust Once, Run Everywhere
- Rust Book - Foreign Function Interface
- Rust - Module std::ffi
- Rust - Crate libc
- [GitHub] rust-lang/libc
- [GitHub] rust-ffi-examples - FFI examples written in Rust
(Native Threads) 目前是 1:1 的 thread,每個 user thread 都會對應到一個 kernel thread
使用 macro format!
format!("the value is {}", 123)
- Rust ownership, the hard way
- [GitHub] Rust RFCs - 0599 - Default Object Bound
- [2013] Using the Pointer Ownership Model to Secure Memory Management in C and C++
- 不錯的 Memory Management 相關背景知識解說
- CERT C Coding Standard
還在發展中,漸漸有一些 web framework 出現。
上面那篇的作者有寫過 Django,後來跳出來用 Rust 想做另一套自己想要的 web framework,
但是 Rust 在當時還沒有強大的 HTTP library 可以用,
所以寫了 rust-http,後來對 Rust 更熟悉以及有了 rust-http 的經驗後,
決定重設計一個 library 並增加更多支援,這 library 被取名為 Teepee
。
現在出現的 framework 有 :