Rust 導引筆記系列--前言

會想寫這一系列的文章主要是基於目前關於 Rust 這個語言的中文介紹還很少或是太舊了,想推廣這個新興的語言必然需要一些教學來支撐;另外,也是基於這個部落格的初衷,把近1年的所學紀錄下來...

Rust 導引筆記系列--前言

會想寫這一系列的文章主要是基於目前關於 Rust 這個語言的中文介紹還很少或是太舊了,想推廣這個新興的語言必然需要一些教學來支撐;另外,也是基於這個部落格的初衷,把近1年的所學紀錄下來。這算是這學期給自己的一個目標吧,雖然還有幾個坑還沒填,就要開新坑就是了…

這一系列應該會有些像網路上的一些程式教學文章,順便磨練自己寫教學文的能力,應該會走比較簡單詼諧的風格。至於名稱還沒想好,想名字一直都是麻煩事...


緣起

一直以來,我埋首於程式設計上,比起競賽方面,我更喜歡設計出一個能有實際應用的程式,也因此,我經常地會把一些想法付諸實現。對於不同的用途也分別有適合的語言來實現,隨著近幾年我在研究計算機的系統組織,在系統程式開發中擁有悠久歷史及廣大使用的語言絕非C和C++莫屬了。

在高中時期大量的編寫C及C++程式後,便體會到這兩種語言有多麼容易寫出bug來。不論是程式設計師耳熟能詳的Memory Leak、Double Free、Race Condition 或是一些奇奇怪怪、前所未見的坑我通通都踩過了。不只摔得很慘,還要花3、4個小時爬出來,十分令人沮喪。不僅如此,往後的編寫經常要花費額外的心思去避開這些問題。而且專案的管理、測試、套件依賴...等,一直以來都是令人詬病之處。就算熟練了C/C++的語法,也還不能稱之你會寫C/C++。

最初會發現 Rust 主要是希望找到一個有較為廣泛用途的編譯式語言,最初是以適合寫出 Web 後端作為初步的篩選條件,那個時候(大概2016~2017年)找到了 Rust 和 Go 這兩種語言。Go 對我而言,相對的感到普通,甚至少了一些重要的語言特性(像Enum);Rust 強調的安全性、Borrow Checker、變數的所有權與生命週期…等特性令我耳目一新,只是當時它還尚未成熟,在語法上還有許多麻煩之處,比起實際的開發工具,倒是比較像玩具。後來在考大學的這段期間,就沒在管這件事了...

在去年回來再次重新看到 Rust 之後,它與之前有了完全不同的改變,基本上已經逐漸成熟了,程式語法上加入大量的自動推斷,以及眾多新功能的加入,讓我一度懷疑它們是不同語言 XD。Rust 所追求的理念及功能切合了我一直以來的需求,也因此是我目前和未來極可能的主要程式語言。


優缺點(Pros & Cons)

畢竟也用了1年了,來點一下 Rust 的優缺點,順便供大家參考~~

優點

  • 安全性‌‌‌‌‌‌‌‌
    由於 Rust 有一套優秀的機制,會在編譯時檢查是否違反這些規則,大部分的記憶體漏洞都可以因此避免。簡單來說,程式有問題就會過不了編譯,而過了編譯就有90%是好的,不會像 C/C++ 一樣會莫名炸開。
  • 執行速度‌‌‌‌
    Rust 在編譯之後,執行效能與有做好適當漏洞處理的 C++ 程式相近
  • 方便友善的語法‌‌‌‌
    直接看例子吧,許多都是我以前寫程式都希望能有的語法
let next_second = if second == 59 {
    0 
} else {
    second + 1 
};
enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}
fn main() {
    for number in 0..10 {
    	print!("{} ", number);
    }
    println!();
    for number in 1..=10 {
    	print!("{} ", number);
    }
    println!(); 
} 
/* Output:
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
*/
  • 實用的工具鍊‌‌
    官方內建許多常用的工具:cargo(專案&套件管理)、rustup(編譯器環境管理)、rustfmt(程式碼格式化)、rustdoc(文件生成)
  • 標準化的測試‌‌
    可以方便寫出單元測試、整合測試

缺點

  • 學習曲線偏高‌‌
    需要有一些基本觀念才能比較好上手,有時候也會有很抽象的觀念,要稍微思考一下
  • 生態圈與社群不夠成熟
    有很多套件是沒有適當的實作或是久未維護,在教學資源的部分也還沒到很普及的程度
  • 編譯較久
    由於需要額外的檢查,因此在編譯時需要稍微久一些,目前有在優化的樣子  
  • 改版快速
    這我不知道算不算缺點就是了,目前官方是維持在1.5個月出新版本,主要是增加新功能,但不會影響舊的程式碼,保持向下相容
  • 部份功能尚未穩定
    現在仍然有一些功能只能在 nightly 版本的編譯器中使用,因此,部分預覽版或是套件會要求使用 nightly 版,雖然有 rustup 可以快速切換,但畢竟使用不穩定的編譯器也不是什麼好事...。不過目前官方打算盡快把一些功能 stabilize 就是了

一不小心就打太多了...,未來的每一篇應該不會寫那麼多,我是希望能以較高的頻率發文,每篇一點點的方式來寫這系列。

這裡的文章是建立在你已經對程式語言有一定了解的基礎之上,因此不會解釋大部分基礎的東西,需要一定能力才能看懂。 (講這麼多其實就是我懶得幫你打底,所以不要越級打怪啦!

最後,應該只有一開始的這篇會轉到FB去,後續的請自己點進來看囉。


下一篇:安裝 Rust

Rust 導引筆記系列目錄