奧推網

選單
科技

放棄笨重的 IDE,轉而嘗試 Emacs

摘要: IDE 對於開發者而言,重要性不言而喻,但隨著功能愈發強大,它們對硬體的要求也日益提高,甚至越好用的 IDE 就越笨重。

連結:

https://renato。athaydes。com/posts/switching-from-heavyweight-ides-to-emacs。html

宣告:本文為 CSDN 翻譯,未經允許禁止轉載。

作者 | Paulo Renato de Athaydes譯者 | 彎月 責編 | 鄭麗媛

出品 | CSDN(ID:CSDNnews)

IDE(Integrated Development Environment,整合開發環境)是一種幫助程式設計師高效開發軟體程式碼的工具,它透過多種方式協助我們,我幾乎無法想象沒有 IDE 要如何完成開發工作。

但是,IDE 提供的幫助並不是免費的。最近,我一直深受 IDE 的困擾。我的業餘愛好專案使用的是一臺 2019 年左右購買的 MacBook Air ,它的效能並不足以執行我最喜歡的 IDE Jetbrains 的 IntelliJ IDEA 社群版,所以這段體驗不太愉快。

在這篇文章中,我想提出一個問題:IDE 真的有必要做的這麼笨重嗎?連幾年前價值一千美元的電腦都不能執行 IDE?

問題

IntelliJ 是一款很棒的產品,我從未考慮過換成任何其他產品,所以我優先考慮的是換一部頂配的膝上型電腦和最好的工具。我的開發裝置是頂配的 Mac M1,它還配備了 64GB 記憶體和 10 個 CPU 核心,所以在上面執行 IDE 毫無壓力。

但當我在家開發業餘愛好專案時,我使用的膝上型電腦就相對較弱了。於是,問題出現了:在使用 IntelliJ 編寫程式碼和執行測試僅一個小時後,我的電腦就變得滾燙,風扇的聲音越來越大,十分刺耳。

在 IDE 建立“索引”期間,它需要掃描所有需要索引的內容,在這段時間(大約一分鐘左右)內,我幾乎無法使用任何 IDE 的功能。

我還有一臺 Dell XPS 13,執行的是 Linux,配置很不錯,但情況依然如此,風扇的聲音還更大。

平時,我可以觀看高畫質影片、聽音樂、瀏覽網頁等等,就是無法執行 IDE,可是隻能在頂配的計算機上編寫程式碼,這個要求未免也太高了。

這個問題似乎與我使用的語言和技術棧無關。例如,我在使用 Java、Groovy 和 Dart 時或多或少都遇到過這個問題。此外, 我還注意到,在同時使用 Kotlin 和 Java 的專案中,情況更糟。

因此,我可以肯定,這個問題似乎與特定的語言或外掛無關。雖然我是 JetBrains 及其工具的粉絲,但我不得不說 IntelliJ 實在太笨重了,甚至無法在 2020 年初購買的膝上型電腦上正常執行。

最近,我一直在向 Jetbrains 報告問題,最後一次他們告訴我關閉一些外掛,因為通常一些糟糕的外掛會引發問題。他們說得沒錯,因為最近我禁用了一些平時不怎麼使用的外掛(WASM、Scala、Makefile、Clojure-Kit、JMH、Gradianto),情況有所緩和,但問題依然沒有得到解決。

IntelliJ 替代品

Jetbrains 正在開發 Fleet,這是一款更新、更輕量級的編輯器,雖然目前看來還不錯,但在我的膝上型電腦上還是感覺很笨重,畢竟它與 IntelliJ 使用的是同一個後端。我有可能會試試看,但目前這款 IDE 仍然存在一些非常嚴重的問題(畢竟還處於測試階段),只向高階使用者開放。

大約十年前,我使用過 Eclipse,感覺這是一款很不錯的 IDE,但不幸的是,如今它也變了,根據我最近的嘗試,這款 IDE 對使用者非常不友好。我不會再考慮使用它,它對大多數非 JVM 語言的支援、特別是對新語言的支援不太好,因此已經失寵很長一段時間了(Eclipse 曾是有商業頭腦的語言設計師的首選 IDE)。

至於 Vim,很不幸,我從未想過嘗試這款工具。我知道有幾個基於 Vim 的 IDE,比如 neovim,都很有吸引力。但我偶然間發現,在編輯器的選擇上,我會堅定地站在 Emacs 這一邊。也許,有一天,我會改變主意,但短期內還沒有任何跡象。

許多人可能想問:為什麼不使用 VS Code?其實,我已經嘗試安裝了,但我還是不太喜歡這款 IDE。在我看來,這款 IDE 的快捷方式並不符合我的習慣,而且它基於 Electron,相對也很笨重。我承認 VS Code 看起來不錯,我也知道它是當今最受歡迎的編輯器,但不適合我。

Emacs

鑑於如上種種原因,最終我選擇使用 Emacs。

這是一款歷史悠久的文字編輯器,與 Vim 並駕齊驅,甚至比我還年長,但它還在不斷髮展。它是 GNU 專案的一部分,可以說是早期自由軟體和開源軟體最成功的案例之一。

與我嘗試過的其他 IDE 相比,Emacs 非常輕巧,有趣的是,建立之初它被當成了重量級 IDE。隨著最近的一些發展為大多數編輯器帶來了高階 IDE 功能,如今 Emacs 已成為一款非常強大的 IDE。

對於從未嘗試過 Emacs 的新手來說,剛開始使用的時候確實需要花費一番心思,現代編輯器大多需要手動配置,否則就只能忍受內建的功能。此外,你還需要了解一點 Lisp(Emacs 構建使用了自己的 Lisp 語言,名叫 elisp),但如何你喜歡深入研究並破解 Emacs,那肯定也能成為一種樂趣。

Emacs 有許多開箱即用的發行版,如 Spacemacs 和 Doom Emacs,對於那些想要現代編輯器、但不喜歡手動配置的人來說,選用這些版本感覺更舒服。

幾年來,我根據上個世紀 90 年代後期大多數應用程式都可以使用的基本快捷方式配置了 Emacs,比如 Cmd+S 表示儲存,Ctrl+Tab 表示切換緩衝區等。此外,我喜歡使用的所有語言(Java、Go、C、Rust、Dart、Groovy、Common Lisp 以及 Zig)也得到了很好的支援,包括自動補齊、內聯文件、程式碼導航(跳轉到定義、查詢實現、返回/返回上一個/下一個,等等)、在專案範圍內的查詢檔案/型別/符號、一鍵式測試執行器,以及許多其他的 IDE 基本功能。

不過,經過精心設定之後的 Emacs 依然與開箱即用的 IntelliJ 有很大差距。

舉個例子,在 IntelliJ 中配置 Java 的版本很簡單,不僅包括編譯器,還包括Java 標準的 API 版本(因為 Java 現在發展非常快,這很重要)。如果你使用的版本沒有提供某個功能,它會發出警告,但在 Emacs 上就很難做到這一點,因為我使用的 lsp-java 需要透過 Eclipse 配置 Java 專案。

我需要修改程式碼的格式化程式,並被迫為了更改預設規則而下載 Eclipse,這對我來說非常痛苦。Emacs 預設會刪除換行符,以滿足每行最大寬度的限制,這會導致程式碼一團糟,我真的很想知道這個預設設定是誰的決定?

此外,Emacs 還缺乏 IntelliJ 的一些更重要、更高階的警告,比如在遇到邏輯上不可能的條件時,後者會很貼心地報告邏輯錯誤,還有一些不太常用的功能我都懶得去調查如何設定,比如自動修復警告(我真的很想念 IntelliJ 的 Alt+Enter)以及插入 System。out。println 和 public static void main 之類的自定義程式碼片段(儘管在 Emacs 中實現這些設定一點也不難,而且我已經設定好了)。

不過,Emacs 有一個令人驚歎的 Git 使用者介面 Magit,這個介面感覺恰到好處,Org Mode 可以賦予文字檔案神奇的力量,還有 elfeed 可以讓你輕鬆閱讀新聞(來自 RSS 提要、 HackerNews 和 Reddit),同時無需切換視窗。

Emacs 真的更輕巧嗎?

為了回答這個問題,週末我一整天都在膝上型電腦上使用 IntelliJ 寫程式碼,同時截取了電池的使用情況;第二天,我又使用 Emacs 做相同的工作(在同一個專案上做非常類似的事情),當然也截了圖。

結果如下圖所示:

圖:使用 Emacs 程式設計,請注意下午電池的使用量平滑地下降。

圖:使用 IntelliJ 程式設計,早上電池的使用量很大,晚上我改用 Emacs 前,已經恢復到流暢的使用模式。

我並不是想說,透過上面這兩張圖我才知道 IntelliJ 真的很耗電。在這之前,每次使用 IntelliJ 程式設計,我就會感到電腦明顯變得遲鈍,尤其是在顯示切換工作區的動畫時,簡直卡得一塌糊塗。

使用 Emacs 程式設計,電池只需充電一次就可以用一整天,而使用 IntelliJ 時,上午還沒過半,我就得插上充電器。

然而,我的主要問題是噪音太大,因為風扇為了給 CPU 降溫,一直嗡嗡地轉個不停,而且鍵盤都燙手。總之,基本無法正常使用,至少在我小型膝上型電腦上使用 IntelliJ 寫程式碼會感到非常不舒服。

最後的想法

事實上,Emacs 比任何現代 IDE 都輕巧得多,同時還提供了所有重要的功能,可謂小巧而不簡陋。我希望 JetBrains 能聽到使用者的心聲,併為此做點什麼!

Emacs 很棒,但開發基本靠志願者努力,因此很多東西感覺不太成熟,而且還沒有文件,使用也不方便等等。但就目前而言,似乎 Emacs 才是我的最佳選擇。

評論

評論 1:作為一名 Emacs 使用者,我不得不說 IntelliJ(以及任何現代 IDE)要比配置好的 Emacs(lsp-mode/eglot、corfu/company、tree-sitter等)方便得多,但代價就是需要消耗大量資源。

Emacs 本質上是單執行緒的,不適合進行非同步操作。其大部分邏輯採用的是一種非常慢、JIT 不友好且只有非常初級的 GC 機制語言編寫的。渲染流水線一團糟,內部的資料結構也非常初級。

話雖如此,Emacs 的通用性和可擴充套件性還是非常棒的,一切都在變化。相較於五年前,Emacs 已經改善了許多。也許再過十年,它也能在效能方面與現代 IDE 一較高低。

評論 2:我還在用 Sublime Text,儘管之前用過一段時間 VS Code。在我看來,除非你使用最新的硬體,否則“全能” IDE 都非常卡。就算原始碼有 10 萬行,開啟也不應該花費幾秒鐘。對於我來說,Emacs 或 Vim 太底層了,所以我認為 Sublime 是簡單性和複雜性的最佳平衡。