最近一段時間 Rust 似乎開始從默默無聞走向聚光燈下,從微軟宣布探索採用 Rust 替代 C/C++,到 Linux 內核維護者表示願意接受 Rust 作為驅動開發語言,再到 AWS 公開表示贊助 Rust,同時連續 4 年被票選為 Stack Overflow 最受歡迎語言的光輝事迹又被搬出來。頻頻高亮曝光,讓「Rust 到底能不能成?」、「以後不用學 C/C++ 了?」、「Rust 入門使用真的很難嗎?」等討論不絕於耳。
這其中開發者討論得比較多的一個點是「都 2019 年了,Rust 還沒有一個專門的 IDE 可以用來開發」,不用多辯駁我們都知道 IDE 對於一個編程語言的採用來說太重要了,像下圖這樣的開發者心聲,其實表達出的僅僅是沒有 IDE 不利的一個方面,也就是對新手不友好,而功能齊全的專業 IDE 實際上完全不僅僅只對新手產生影響:
(@Tinian )
有開發者回應,表示現在 Rust 確實沒有比較專業的 IDE,但是已經有了語言伺服器這種底層基礎與各種插件支持,甚至「IDE 專家」JetBrains 在其當前提供的 IntelliJ Rust 插件成熟之後也會讓其像 GoLand 一樣獨立出來。
(@志田未來 、@dwingo 、@墨名次 、@warriorsfl)
就著這個話題,我們整理了一份比較有代表性的 Rust 可用 IDE 與相關插件等工具的列表,分享給開發者。
Rust 語言伺服器(RLS)基於 LSP(Language Server Protocol),即語言伺服器協議,LSP 由紅帽、微軟和 Codenvy 聯合推出,可以讓不同的程序編輯器與集成開發環境(IDE)方便地嵌入各種編程語言,允許開發人員在最喜愛的工具中使用各種語言來編寫程序。
它通過用於開發工具和語言伺服器間通信的 JSON-RPC 標準,能夠讓編程工具提供實時反饋的詳細信息並以此實現多種強大功能,比如符號搜尋、語法分析、代碼自動補全、移至定義、描繪輪廓與重構等。Rust 語言伺服器集成了這些邏輯作為後端,並通過標準的 LSP 提供給前端工具,它被設計為與前端無關,可以被不同的編輯器和 IDE 廣泛採用。
這個就是 Rust 官方為 Visual Studio Code 提供的 Rust 語言伺服器前端參考實現,它支持:
值得一提的是 snippets(代碼片段)和構建任務這兩個特性。
snippets 是擴展為通用樣板的代碼模板。輸入時,Intellisense 會將代碼段名稱包括在內作為選項,可供快捷鍵選中。提供了以下 snippets:
for
- 創建循環unimplemented
unreachable
print(ln)
assert(_eq)
macro_rules
- 聲明宏if let Option
- 在某些情況下執行 if let
語句spawn
- 創建線程extern crate
- 插入 extern crate
語句此 Rust 插件提供了使用相關的 cargo 命令進行構建、運行和測試的任務,可以使用 ctrl + shift + b 進行構建,可通過命令面板中的「運行任務」查看其它任務。這些任務內容寫在 task.json 中,插件不會覆蓋現有任務,因此可以自定義任務。
IntelliJ Rust 是 IntelliJ 的 Rust 插件,採用 Kotlin 開發,功能特性包括:
支持原生代碼提示
支持強大的快捷鍵功能
代碼快速格式化
snippets
該插件有較好的兼容性,兼容 2019.2 版本之後的所有基於 IntelliJ 的 IDE。可用功能集之間存在以下差異:
(*) 表示:IDEA 社區版、PyCharm 社區版、PyCharm Edu 和 IntelliJ IDEA Edu 版。
從上表中也可以看得出來,CLion 是集成了最多功能支持的 IDE,也因此,許多開發者基於 IntelliJ 的 Rust 開發環境直接就是:IntelliJ Rust+CLion。
CLion 是專門用於 C/C++ 開發的 IDE,它的特性包括:
通過 IntelliJ Rust 插件,CLion 提供了對 Rust 的高度支持,除了基本的功能,它還為 Rust 提供了完善的調試器、CPU Profiler 和 Valgrind 內存檢查等能力。
Eclipse Corrosion 是 Eclipse IDE 中的 Rust 版本,本質上是一個 Eclipse IDE 的 Rust 插件,通過與 Rust 語言伺服器和 Cargo 集成提供了豐富的開發與調試功能。它可以作為完整的 Eclipse 軟體包下載。
除了 Rust 語言伺服器提供的功能外,Corrosion 還可以幫助用戶更好地調試 Rust 程序,比如提供了查看變數、GDB 控制台與斷點等功能。另一方面,由於基於 Eclipse,所以像項目大綱、暗黑主題、問題查看與 Git 集成等特性也支持,Eclipse 用戶可以輕鬆適應。
前面提到 Rust 語言伺服器是作為 IDE 與編輯器的後端提供通用能力,而 Racer 是 Rust 語言伺服器中的一個靜態庫,它提供了代碼自動補全功能。
許多 IDE 等工具可以輕鬆集成這樣的底層功能,目前包括以下工具都有集成 Racer 的相關實現:
Eclipse
Emacs
Gedit
Gnome Builder
Kate
Sublime Text
Vim
VS Code
Atom
Kakoune
Rust 官方實現了一個 Vim 插件 rust.vim,愛折騰的開發者可以用來配置 Vim 下的 Rust 開發環境。rust.vim 提供了 Rust 文件檢測、語法高亮、格式設置與語法檢測工具 Syntastic 集成等功能。特性包括:
工具的整理先到這裡結束了,感興趣的開發者可以分別單擊項目標題查看詳細介紹,找到自己最得心應手的 Rust 開發環境。
其實國外也已經有開發者整理了一份更為全面的 IDE 與插件等工具對 Rust 支持狀態的概述表單:
大致可以通過上邊這個圖表了解到支持情況,詳情可以查看:
Rust 很強大,希望你也能上這條銹跡斑斑的船。
---
另外,因為不免遺漏,所以本文工具列表將持續更新;歡迎提供相關工具線索,我們會持續補全。值得一提的是,文中提到了 Vim 極客式的配置插件,自然會有開發者要說到 Emacs、Sublime 與 Atom 也有類似的實現,歡迎提交線索。
[admin
]