摘要: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 是简单性和复杂性的最佳平衡。