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

☞苹果一夜蒸发约4431亿元,市值濒临跌破2万亿大关;钉钉用户数突破6亿;Windows成2022年恶意软件主要攻击对象|极客头条
☞阿里宣布组织大变动:集团迎来首位 80 后 CTO、张勇亲自挂帅阿里云!
☞阴影之下,国产软件开发工具加快逆境突围

放弃笨重的 IDE,转而尝试 Emacs相关推荐

  1. 【Sys】不能打开要写入的文件:“X:\Y\Z.xx“单击[Abort]放弃安装,[Retry]重新尝试写入文件,或[Ignore]忽略这个文件。

    问题描述 因为装软件的硬盘坏了,插上新的硬盘想去装百度网盘,结果就弹出了这么一个窗口 不能打开要写入的文件:"X:\Y\Z.xx"单击[Abort]放弃安装,[Retry]重新尝试 ...

  2. JAVA学习56_用UltraEdit代替“笨重”的IDE,实现轻巧编程!

    本来下半年才会学习Java,不过因为提前参加软考,所以从前一阵子开始接触Java.学习一门语言,敲代码自然是必不可少的工作了.众所周知,eclipse是一款非常好用的Java编译器,But杀鸡焉用牛刀 ...

  3. 献给和我一样的Java初学者——用UltraEdit代替“笨重”的IDE,实现轻巧编程!

    本来下半年才会学习Java,不过因为提前参加软考,所以从前一阵子开始接触Java.学习一门语言,敲代码自然是必不可少的工作了.众所周知,eclipse是一款非常好用的Java编译器,But杀鸡焉用牛刀 ...

  4. [数据结构与算法] 学习记录合辑 (07) 图

    该合辑为笔者自b站自学的"C++数据结构与算法"课程学习记录,旨在将重要的学习要点.思考内容与部分代码进行记录,以便后续自行翻看,亦可给其他读者带来一些参考 内容基于笔者自身的理解 ...

  5. 我为什么要使用IDE? [关闭]

    在另一个问题中, 马克高度评价IDE,称"有些人仍然不知道"为什么"他们应该使用一个......". 作为使用vim进行编程的人,并且在大多数/所有同事使用vi ...

  6. 为什么每个人都应该尝试Ubuntu下篇 Why Everyone Should Try Ubuntu 分享

    但是老实说,我认为 Ubuntu 拥有长期的生存能力重要于其短期的实用主义.最近几年来,对于改进 Linux 桌面方面,Ubuntu 做得比其他发行版本要多.这就是我已详细讨论的,其带来的实际好处,但 ...

  7. emacs .emacs_使用Emacs应该做的6件事

    emacs .emacs 想象一下使用Python的IDLE界面编辑文本. 您将能够将文件加载到内存中,对其进行编辑并保存更改. 但是您执行的每个动作都将由Python函数定义. 例如,使一个单词全部 ...

  8. 钗黛双收:若你也同Vim难割舍,却又看Emacs情切切

    作者: C. Minos Niu 原文:请猛击. 1 钗黛双收:若你也同Vim难割舍,却又看Emacs情切切 (引子) 这篇文章分享我的一些经历,写给和我一样对娇小的Vim难以割舍,又在抱上Emacs ...

  9. Uber 团队放弃微服务改用宏服务,网友评论炸锅了

    作者 | highscalability 对于微服务,大多数开发者的态度都是鲜明的,要么热爱,要么痛恨,很少有人怀抱着比较"暧昧"的态度.所以,当 Uber 中的一个技术团队宣布, ...

最新文章

  1. svn 提交信息模板
  2. iptables防火墙(二)
  3. 事务回滚什么意思 try_分布式事务 TCC-Transaction 源码分析——事务恢复
  4. Alibaba seata 分布式事务介绍及配置使用
  5. 50道编程小题目之【无重复的三位数】
  6. windows oracle 宕机,windows上的oracle一次宕机恢复
  7. 中国网络借贷行业现状分析及未来前瞻报告2021-2027年
  8. 图书信息管理系统(MVC设计模式)
  9. noip2012 文化之旅 (深搜,最优性剪枝)
  10. react通过hook实现父组件调用孙子组件方法(非redux)
  11. 【视频播放器】potplayer调教教程
  12. 小初高四字成语学习笔记
  13. 蓝牙芯片排行_7月TWS硅麦出货量排行榜出炉
  14. xShow@Home v5.1.20120908 发布
  15. SpringBoot_Web开发基础内容
  16. 计算机基础2008版第四次作业,《计算机基础(2008版)》第5次作业_满分
  17. 未解决极点五笔变半行的问题
  18. Windows SSH服务安装
  19. 信贷违约风险预测(二)简单的数据探索
  20. 附产品原型:这才是我眼中理想的社交产品app

热门文章

  1. 承香墨影的行业周报-0x0011
  2. 纯CSS绘图:我的经典制作-小桥流水人家
  3. css icon设置,CSS之字体图标 icon 的多种实现
  4. MSP430学习笔记-定时器A
  5. NRFL2401学习
  6. 吴恩达深度学习第二周+二分类应用+猫图片识别
  7. linux可以怎么玩(以阿里云Ubuntu服务器为例)(三)——Python零代码搞定个人云盘
  8. 史上最简单的spark教程第二十三章-运行第一个机器学习Java和Python代码案例
  9. react安装postcss-pxtorem
  10. 测试信号处理-模拟滤波器概述