這陣子查資料時發現有愈來愈多專案是用 Rust 語言開發,想起去年有則新聞:微軟要讓開發者以 Rust 編寫 Windows 驅動程式,讓我開始觀注 Rust 這個新掘起的程式語言。

Rust 的核心精神格外講求安全性、速度及併行性,尤其在記憶體安全性的強化,可根本解決 C/C++ 揮之不去的緩衝區溢位懸空指標... 等問題(尤其緩衝區溢位問題,一直是駭客眼中挖掘資安漏洞的金礦坑),Rust 因此常為被視為替代 C/C++ 的優秀選擇,這也是連微軟也力推用它取代 C/C++ 寫驅動程式的主要理由。

但,我對 Rust 的了解僅止於「跟 C/C++ 一樣有效率,但更安全」,這幾天無意滑到一部 YouTube 影片,談 Rust 在 JavaScript 生態圈日益重要的角色,挺有意思,其中談到不少 Rust 的特性,順手整理成筆記。

Rust,JavaScript 的未來?

  1. Rust 1.0 發佈於 2015 年,隔年起連續六年在 Stackoverflow 開發者調查被票選為最受歡迎的程式語言。由於推出時間較晚,Rust 有很多很現代化的設計,吸收了眾多語言的優點。
  2. Rust 是靜態編譯語言,但不像 Go/C#/Java 有 GC (垃圾回收)這類記憶體管理機制,省去時時檢查記憶體存取位址,藉此換取大幅效能提升,達到跟 C/C++ 同等級的執行速度。
  3. Rust 採行所謂的「共享不可變,可變不共享」原則,有效避免多執行緒執行時的衝突與錯誤,並透過強大的編譯器確保記憶體管理的安全。
  4. Rust 非常重度依賴編譯器,Runtime 盡可能輕量化及最小化到幾乎沒有,大量優化檢查都是在編譯期確定,編譯時包含許多嚴格檢查,常要費盡心力才成功編譯,讓開發者常想起被編譯器支配的恐懼。但能通過考驗編譯出的程式自帶優秀基因,安全性及效能不用擔心。
  5. 傳統 JavaScript 生態系的開發工具幾乎都是用 JavaScript 寫的,像是 babel、webpack、eslint、prettier。理由是這類工具的作者常常也是前端開發者,不必為了寫工具多學一種語言。
  6. 隨著前端專案規模變大,開發流程越來越複雜,編譯打包專案所需的時間開始長到難以忍耐,已非單靠優化程式碼所能改善,JavaScript 是直譯式語言,CPU 密集型計算作業不是其強項,於是 Rust 和 Go 這類兼顧運行效能和開發效率的編譯型語言開始被列入考量。
  7. esbuild 和 swc 出現後,開發者們驚訝發現,相同功能從 JavaScript 改成用 Rust 實現,效率可以提升 10 到 20 倍。像 next.js 12、parcel 使用 swc 作為編譯器獲得 5 倍效能提升;deno 的靜態檢測、程式碼格式化以及文件生成器也是用 swc 實現;vite 使用 esbuild 作為 dev build 的工具,大幅提升編譯效能。
  8. Rust 還可以直接編譯成 WASM,用 Rust 編寫 Web 應用程式也成為一個可行方案。像 Yew 便是一個建立多執行緒前端網頁應用程式的 WebAssembly 框架。另外,TAURI 則是使用 Rust 打造,類似於 Electron.js 的跨平台應用程式框架,Tauri 使用 Rust Binding 不同系統的 WebView 及系統 API,體積縮小到 3MB 起跳。註:Electron 應用程式大約 80-120MB,我自己則偏好用 ASP.NET Core Minimal API 寫桌面小工具
  9. Rust 是一門好語言,在記憶體管理、運行效能和並行性表現出色,它不像動態語言可以讓你快速啟動一個應用和專案,但 Rust 編譯器會在一開始便引導開發者做正確的事,長遠來看,比用動態語言開發能避開許多技術債。但這是有代價的,Rust 的學習曲線偏陡峭,需要投入很多時間精力方能上手(沒有 21 天精通這種事),且 Rust 的應用領域不如 JavaScrpit 廣泛,苦學而成的投資報酬率不怎麼高。

OS:感覺 Rust 特別能吸引追求自我實現的開發者,是留給願意爬過天堂路享受特種部隊榮耀的那群人吧~ 😄


Comments

# by Jy

雖然覺得自己不屬於追求自我實現的開發者,但身為C#開發者寫Rust是很有趣的體驗。 寫TAURI的時候,讓TAURI在背景執行Minimal API,只需要少量的Rust知識就可以寫出自我娛樂的桌面程式。 至於為了生活的程式語言,還是C#比較舒適。

# by YH

看了一下Rust比較接近C的寫法跟觀念,覺得C#/Python/PHP/JS/TS之類的還可以在撐上一陣子 開發速度一定是script類比較快,當然執行速度就是Rust的強項了 如果超長期開發,我想Rust會是比較好的選擇,但在不確定的狀態下,script可能就佔有優勢了 畢竟快速驗證想法,並且讓客戶看到結果都是script比較擅長 如果哪天AI可以幫上這一塊的忙,讓開發者很快實現Rust的code,可能Rust就是有引爆點了

Post a comment