前言:最近被強者我同學呂行大神拉去寫Servo
用的語言是 Rust ,是個非常年輕的語言(2012年出現),另外有一個老一點的 Golang(2009),基本上目前中文找不到什麼資料,就算是英文的文件本身也不太完整Orz

想說文件這種東西,只要不是亂寫愈多愈好,就在這個blog 上寫一點Rust 相關的文件,等寫多了好整理起來; 基本的rust 像什麼函式怎麼宣告、if 格式之類我就不寫了,那個自己翻一翻就會了。
我出身是C/C++, Python,所以解釋角度也比較偏這樣的語言。

這篇介紹Rust裡的集合物件: Struct, impl 跟trait

struct在rust 裡跟C++/Python的class一樣,是物件的集合跟函式的集合,不過rust 採取的方式是用 struct A / impl A的方式,把集合的物件跟函式分開。

所以在Rust 裡很常看到這樣的寫法:

struct Car
{
    Speed: int
}

impl Car {
    fn run(&self){
        println!("my speed is {:d}", self.Speed);
    }
}

一個struct 比較像C裡的struct,補上impl 就變成C++裡面的Struct/Class

同時如果我們要提供一個共同的介面(interface)呢?
例如我要Car跟People都實作run 這個函式,在Rust 裡這東西可以用trait 來實作, 首先先實作trait,然後就可以對struct實作trait,這東西很像java 裡面的 interface,例如:

trait movable {
    pub fn run(&self);
}

impl movable for Car{
    fn run(&self){
        println!("my speed is {:d}", self.Speed);
    }
}

之後就可以明目張膽(?)的呼叫Car.run()了

更多內容請見:
https://doc.rust-lang.org/stable/rust-by-example/trait.html
http://tomlee.co/2013/05/traits-structs-and-impls-in-rust/