YT 筆記 - Rust 程式語言在 JavaScript 生態圈的角色
| | 2 | | ![]() |
這陣子查資料時發現有愈來愈多專案是用 Rust 語言開發,想起去年有則新聞:微軟要讓開發者以 Rust 編寫 Windows 驅動程式,讓我開始觀注 Rust 這個新掘起的程式語言。
Rust 的核心精神格外講求安全性、速度及併行性,尤其在記憶體安全性的強化,可根本解決 C/C++ 揮之不去的緩衝區溢位、懸空指標... 等問題(尤其緩衝區溢位問題,一直是駭客眼中挖掘資安漏洞的金礦坑),Rust 因此常為被視為替代 C/C++ 的優秀選擇,這也是連微軟也力推用它取代 C/C++ 寫驅動程式的主要理由。
但,我對 Rust 的了解僅止於「跟 C/C++ 一樣有效率,但更安全」,這幾天無意滑到一部 YouTube 影片,談 Rust 在 JavaScript 生態圈日益重要的角色,挺有意思,其中談到不少 Rust 的特性,順手整理成筆記。
- Rust 1.0 發佈於 2015 年,隔年起連續六年在 Stackoverflow 開發者調查被票選為最受歡迎的程式語言。由於推出時間較晚,Rust 有很多很現代化的設計,吸收了眾多語言的優點。
- Rust 是靜態編譯語言,但不像 Go/C#/Java 有 GC (垃圾回收)這類記憶體管理機制,省去時時檢查記憶體存取位址,藉此換取大幅效能提升,達到跟 C/C++ 同等級的執行速度。
- Rust 採行所謂的「共享不可變,可變不共享」原則,有效避免多執行緒執行時的衝突與錯誤,並透過強大的編譯器確保記憶體管理的安全。
- Rust 非常重度依賴編譯器,Runtime 盡可能輕量化及最小化到幾乎沒有,大量優化檢查都是在編譯期確定,編譯時包含許多嚴格檢查,常要費盡心力才成功編譯,讓開發者常想起被編譯器支配的恐懼。但能通過考驗編譯出的程式自帶優秀基因,安全性及效能不用擔心。
- 傳統 JavaScript 生態系的開發工具幾乎都是用 JavaScript 寫的,像是 babel、webpack、eslint、prettier。理由是這類工具的作者常常也是前端開發者,不必為了寫工具多學一種語言。
- 隨著前端專案規模變大,開發流程越來越複雜,編譯打包專案所需的時間開始長到難以忍耐,已非單靠優化程式碼所能改善,JavaScript 是直譯式語言,CPU 密集型計算作業不是其強項,於是 Rust 和 Go 這類兼顧運行效能和開發效率的編譯型語言開始被列入考量。
- esbuild 和 swc 出現後,開發者們驚訝發現,相同功能從 JavaScript 改成用 Rust 實現,效率可以提升 10 到 20 倍。像 next.js 12、parcel 使用 swc 作為編譯器獲得 5 倍效能提升;deno 的靜態檢測、程式碼格式化以及文件生成器也是用 swc 實現;vite 使用 esbuild 作為 dev build 的工具,大幅提升編譯效能。
- Rust 還可以直接編譯成 WASM,用 Rust 編寫 Web 應用程式也成為一個可行方案。像 Yew 便是一個建立多執行緒前端網頁應用程式的 WebAssembly 框架。另外,TAURI 則是使用 Rust 打造,類似於 Electron.js 的跨平台應用程式框架,Tauri 使用 Rust Binding 不同系統的 WebView 及系統 API,體積縮小到 3MB 起跳。註:Electron 應用程式大約 80-120MB,我自己則偏好用 ASP.NET Core Minimal API 寫桌面小工具。
- 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就是有引爆點了