iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
Software Development

大閘蟹料理指南(rust)系列 第 24

[D24]Garbege Collection

  • 分享至 

  • xImage
  •  

Why rust so special?

先講一個小故事

100多年前,福特公司的創始人亨利·福特先生到處跑去問客戶:“您需要一個什麼樣的更好的交通工具?”幾乎所有人的答案都是:“我要一匹更快的馬”。很多人聽到這個答案,於是立馬跑到馬場去選馬配種,以滿足客戶的需求。但是福特先生卻沒有立馬往馬場跑,而是接著往下問。
福特:“你為什麼需要一匹更快的馬?”
客戶:“因為可以跑得更快!”
福特:“你為什麼需要跑得更快?”
客戶:“因為這樣我就可以更早的到達目的地。”
福特:“所以,你要一匹更快的馬的真正用意是?”
客戶:“用更短的時間、更快地到達目的地!”

在網路上看到一些評比文章說 rust 可以跑的比 go還要快? 其實這個說法以一個工程師來看只會產生更多問號? 以開心的 serverless lambda服務為例, aws, gcp, azure, oracle cloud. 無一例外沒有支援原生的rust.
想要在上面部署都是透過docker. 在這篇文章裏可以看到最後贏家幾乎都是go. 當然速度的bench mark 方式白白種. 但很顯然overall speed performance 不好直接比較.

當然也不會是更好的 C, C++. 雖然FFI謝天謝地的讓rust可以挪用已有的資產. (就像scala 和 java一樣) 但是這樣的話, 你還要用rust嗎? 還有zig這個更小眾的玩意兒. 喔, 還有rust真的爆幹難寫. 真心討厭每個程式語言的聖經本(語言之父寫的教科書), 都會稱呼自己的程式語言相當易學.

Rust is Not A Faster Horse , Because it doesn't have garbage collection

不得不介紹為何筆者注意到 rust 這個程式語言. discord大規模的轉向使用rust

詳情見內文.No GC意味著永遠不需要打掃造成的峰值, 所以測試平均的速度並不難完全表達出rust在後端performance的穩定度. 而且沒有GC更進一步縮小了整個打包的大小. 在穿戴式裝置中,必然可以佔據很大的優勢.

When we started load testing, we were instantly pleased with the results. The latency of the Rust version was just as good as Go’s and had no latency spikes!(但是當我們開始負載測試時,我們立即對結果感到滿意。Rust版本的延遲與Go的延遲相同,並且沒有延遲峰值!)

Garbage Collection

所以GC到底是什麼? 為什麼非做不可
先從wiki抄一下解釋

在計算機科學中,垃圾回收(英語:Garbage Collection,縮寫為GC)是指一種自動的記憶體管理機制。當某個程式占用的一部分記憶體空間不再被這個程式存取時,這個程式會藉助垃圾回收演算法向作業系統歸還這部分記憶體空間。垃圾回收器可以減輕程式員的負擔,也減少程式中的錯誤。垃圾回收最早起源於LISP語言。[1][2]目前許多語言如Smalltalk、Java、C#、Go和D語言都支援垃圾回收器。

  • C/C++ 的手動清除
  • Python手動清除
  • Rust的沒有GC

舉一個案例來說. GC/ rust/ c & c++ 三種處理回收機制就像是三種風格不同的健身房. GC就是有掃地阿姨的健身房, 你去就是拿器材放槓片, 用完就可以閃人, 反正阿姨會幫你把東西清掃乾淨. 但同一時刻阿姨打掃其實也會讓某些器材不能使用. c&c++ 比較像是沒有阿姨, 在進門的公告上寫明希望所有使用者要依照規定把槓片和器材搬回原處. 理論上不需要打掃時間, 也不用暫停使用某些器材. 但就是會有人不歸位, 久而久之就會到處亂放. Rust 比較像是一個異世界的健身房, 一但你沒有清楚交代你等一下槓片用多少該怎麼歸還, 你連推都推不起來,器材自行鎖住, 雖然沒有阿姨, 但基本上健身房可以保證持續運作.


上一篇
[D23] Unit test in rust
下一篇
[D25] React實作遊戲
系列文
大閘蟹料理指南(rust)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言