摘要:IDE 對于開發者而言,重要性不言而喻,但隨著功能愈發強大,它們對硬件的要求也日益提高,甚至越好用的 IDE 就越笨重。
鏈接:
https://renato.athaydes.com/posts/switching-from-heavyweight-ides-to-emacs.html
作者 | 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 是簡單性和復雜性的最佳平衡。