Emacs,Neovim革命和VSCode大猩猩的价值

2021-01-17 22:31:27

这是如何在Emacs中打开文件的一章:有关Lisp,技术和人类进步的简短故事,于2021年1月3日出版。

在2018年,Bryan Cantrill进行了精彩的演讲,在其中他与Rust编程语言分享了他的最新经验。更深刻地讲,他探索了经常被忽视的软件方面:我们使用的软件的价值。稍微解释一下:

值定义为相对重要性的表达。我们正在比较的两件事可能都是很好的属性。真正的问题是,当您必须在两个选项中做出选择时,您会选择什么?您做出的选择反映了您的核心价值。

他继续将某些编程语言的核心价值与我们对系统软件(如操作系统内核,文件系统,微处理器等)的核心价值进行对比。这是一个非常好的谈话,您应该注意它。

考虑价值很重要,因为价值是我们做出决定的核心。

与系统软件不同,文本编辑器或IDE所要求的值在很大程度上取决于您要求的人。这些是更多的个人工具,可以满足各种需求。

在继续进行下一步之前,我想指出,如果您关心前面讨论的任何主题,则可能会强烈不同意。

我们可以在Emacs开发邮件列表中的以下(交换性的)交换中感受到稳定的扣环,这也提供了有用的历史观点。

Emacs比人们今天使用的操作系统更旧。 (它几乎和第一个Unix一样古老,几乎与后来的Unix相似。)它比内核Linux Linux早得多。

最早的设计元素并非针对我们今天使用的设计。而且自从我们写了这些书之后,人们就开发了其他软件,这些软件与Emacs不太适合。因此,有充分的理由重新设计其中的一些。

但是,人们实际上正在使用Emacs,因此,Emacs中发生的极大不兼容的更改与纽约市地铁中发生的极大不兼容的更改一样难以想象。

接下来的交流在体现自由与稳定的同时,也表明了对进步的不愿意。这既不是好事也不是坏事;就是这样

如果Emacs明天成为“现代”应用程序,那么在Lispstill中扩展的编辑器仅对少数程序员有吸引力,就像Lisplanguage本身一样。大多数寻求简单现代体验的程序员可能会坚持使用Atom和Sublime。

追求“现代外观”的大部分动力来自对Emacs更好地在专有平台上玩游戏的渴望。相反,Emacs的目标是支持GNU / Linux之类的平台。尊重您自由的平台,也不会推动企业UI / UX的“现代性”愿景。

(也许,如果我们确实朝着现代化方向前进,我们应该在诸如GNOME而不是MacOS或Windows之类的背景下考虑现代化。Emacs当然可以成为GNOME的更好公民。)

鉴于许多抱怨“ Emacs外观”的人没有提交补丁来自行解决问题,因此资源将从实际功能转移到“现代性”。

到我们在主要专有平台上对主要代码进行重构以“现代化” Emacs时,“现代”现在又一次发生了变化,我们的资源被投入到投资回报率不高的项目中。

基本上,我看不到“现代化”的项目进展顺利。我们将花费大量的时间和精力在不断变化的目标上,即使我们成功了,基于Lisp的愿景仍然具有有限的吸引力。此外,我认为“现代化”的Emacs不会推动自由软件的发展,因为还有其他个人可以使用的更流行的随意自由文本编辑工具。

我是Emacs用户,阅读Emacs邮件列表可以提醒我,我的价值观与维护者和核心贡献者的价值观有很大不同。我不太重视自由或稳定,对进步和速度有着内在的亲和力。

评估进步的一部分是不断地重新评估:我们当前的流程或技术是否达到了最佳状态?有什么可以改进的?我们如何衡量改进?别人如何解决这些问题?我们在这一领域是否有可以利用的进步?

现在让我们谈谈Vim。我认为Vim与Emacs的一些价值观相互交织,但最终由于专注于提供真正有效的编辑功能而导致根本分歧。

可能会注意到扩展性不在列表中。那是故意的。 Vim当然可以扩展到一定程度,但是与Emacs相比却不大。 Vim有一个“插件系统”,而Emacs是一个系统。您的代码在被评估时即成为其中的一部分。由于我坚持采用“是/否”指示值,因此我将其设为“否”。

Vim开发速度很慢,非常稳定,但仍有许多错误需要修复。添加新功能始终意味着出现新的错误,因此现在几乎不会添加任何新功能。我确实为Vim 7.3添加了一些功能,这确实引入了很多新问题。即使有几个人说该补丁很好用。

2013年底,一些人试图将新的并发基元合并到Vim中。这将使插件作者能够创建全新的功能类型,并通过扩展使Vim更好。

Neovim的作者(Thiago de Arruda)试图向Vim添加对多线程插件的支持,并受到了阻碍。

我不确定如何将修补程序合并到Vim中。 Bram Moolenar是唯一拥有提交访问权限的人,他不喜欢错误修正之外的大多数更改。我和我的联合创始人试图添加setTimeout& setInterval tovimscript。仅仅六个星期的全职工作和向后弯腰就不够了。最终我们只是被忽略了。

我为许多开源项目做出了贡献,而Vim社区一直是最难与之合作的。我编写C已有近二十年了,Vim代码库是我见过的最糟糕的C。该项目肯定显示了它的年龄,我希望有一些新的东西可以代替它。

尽管他们理解他们的某些价值观最终与优先考虑稳定性的Vim维护者的价值观不符,但他们仍然试图推动变革,因为他们珍视Vim的理念,体现了Vim的某些价值观。

Neovim是基于Vim的文本编辑器,旨在提供可扩展性和可用性,以鼓励新的应用和贡献。

改进测试,工具和CI,以简化维护,进行大胆的重构,并大大减少贡献者的摩擦

将内核与UI分离,可以将Vim内核嵌入浏览器或IDE(或任何计算机程序)中,也为更强大和多样化的GUI铺平了道路

嵌入Lua运行时并提供并发原语以打开门,从而获得更平滑,更有效和更强大的插件

广泛的重构:使C代码达到现代标准(C99,利用新的编译器功能),用libuv替换特定于平台的IO代码,删除对旧系统和编译器的支持,包括自动格式化,并修复静态分析警告和错误

他们能够在很短的时间内(而且我不会轻易使用)来彻底改变Vim。在Vim开发中可以看到这种影响,随着Neovim的发展,该功能得到了很大的发展,其功能和过程最终在Vim中得以重新实现。

通过利用LuaJIT将所有Vimscript转换为Lua,从而提高了执行性能,这是一个非常非常快的运行时

用户界面:每个核心平台上所有与UI相关的代码均已从核心中删除,取而代之的是一个一致的API(TUI和GUI均使用该API),从而使多种分离显示实现成为可能(UIs实际上是插件!)

这些项目是巨大变革的结果,这些变革是由少数几个拥有共同愿景和价值观的个人经过不断的努力而产生的。至关重要的是,它包括积极改善软件的人性化:筹集资金以支持开发,降低贡献摩擦,释放贡献者,协调和合并工作,记录流程。换句话说,非软件工程师在技术公司中的工作是无价之宝。不利于我们的是,开放源代码这些任务经常被忽略。

难怪Neovim的成就之所以发生是因为Neovim的开发过程侧重于可维护性和速度,而与此相反,可以说Emacsh的当前进展尽管有其发展过程。

例如,由于Emacs高度重视自由,因此对Emacscore(或官方存储库中的软件包)进行贡献需要向FSF分配版权。要将软件包合并到主存储库中,致力于该项目的每个人都必须经过该过程。即使在非常愿意的,真正的核心Emacsmaintainer,几乎每个人都使用的毫无争议的有价值的软件包的情况下,此过程也可能花费数年。

这也使某些人无法为Emacs做出贡献。请查看Reddit上有关Emacs版权分配的生动讨论,以获得更多背景信息。

也不难发现来自已经并且将继续为社区和生态系统做出巨大贡献的人们的批评。

VSCode于5年前发布,因此在很短的时间内,它就吸引了全球一半的软件开发人员。

通过在Electron,NodeJS和Chromium之上构建项目,它具有巨大的影响力,这些项目从开源社区和投资额大的公司那里获得了数百万个人小时的贡献。

它具有出色的扩展语言TypeScript(就非平凡项目的可维护性而言,我认为它优于Emacs Lisp)

它在Emacs没有的地方也很耀眼:如果您是从事典型现代项目的程序员,而大多数只是想完成工作,那么通常&mldr都可以。您安装VSCode,打开源代码文件,被要求安装该特定语言的扩展名,然后开始安装。您将获得聪明的完成,静态分析,整理,高级调试,重构工具,与git的深度集成,此外,还可以获得出色的性能和紧密的用户体验。

具有讽刺意味的是,LSP(最初由Microsoft为VSCode开发)是主要的功能之一,不仅带来了渐进性和可访问性,而且还为Emacs带来了集成。

此类体验是Doom和Spacemacs的卖点,Doom和Spacemacs是由不懈的维护者推动的两个倡议。这些项目为Emacs带来了可访问性和集成性,在我看来,这些项目以及LSP,Magit和Org都是当今吸引人们使用Emacs的最大原因,但是从他们的问题跟踪器来看,提供此服务有多么困难很明显通过结合生态系统中的部分获得凝聚力经验。

由于Emacs具有很好的延展性,因此各个软件包之间的相互干扰非常容易,取决于不赞成使用,以不兼容的方式更改或删除的其他软件包的功能。例如,当前没有一种方法可以使软件包依赖于另一个软件包的特定版本,或者无法同时加载单个软件包的多个版本。

随着Neovim也将成为一个有前途的公司,这可能是Emacs第一次在自己的地盘上进行实际竞争。

Protesilaos Stavrou在“ Emacs是我的“最喜欢的Emacs软件包”中”谈到了平台Emacs的重要性。虽然Emacs软件包在隔离时可以很有价值,但结合起来,它们会放大使它们成为可能的平台。整体变得大于其各个部分的总和。

说Org代表我的认知功能的10%并不是一件容易的事。 Magit确实是“思想飞速的Git”,而且我还没有看到比Eshell更集成,更丰富的交互式Shell。

但是,即使是一个非常热情的Emacs用户,我也很难将它推荐给大多数只想完成工作的人。有些人认为,那些不愿意从头开始构建计算环境的人无论如何都不应该使用像Emacs这样的“强大工具”。我看不出有这种情况的根本原因,并且认为让年轻人尝试,使用和贡献Emacs对Emacs来说不是一件好事。

对于Emacs的未来发展,我看到的最严重的问题之一是,我们逐渐但稳步地失去了对Emacsinternals有很多了解并拥有丰富的黑客经验的老朋友,而(欢迎)新人则更喜欢在应用程序级别上工作Lisp中的代码。如果这种趋势持续下去,我们将很快失去进行深层基础结构更改的能力,即将无法添加需要在C级别进行不重要更改的新功能。

不管是好是坏,Emacs都过分满足其维护者以及克服其进入壁垒的贡献者的需求和优先事项。作为分散的,以志愿者为基础的项目,人们通常会挠痒痒或进行自己感兴趣的事情。这是公平的:他们可以做其他任何事情,但他们选择牺牲自己的时间,并根据自己的价值观尽最大努力推动Emacs。他们不欠任何人,应该感谢。

在2015年的一次主题演讲中,Russ Cox在论证为什么Go编程语言完全是开源的同时,描绘了积极而有意的努力,以降低进入门槛并刻意改善Go的人文性,以便尽可能多的人使用和使用Go语言。对此做出了贡献。

Go的创建旨在提高Google开发人员的生产力,并使其能够更快地开发产品并更轻松地维护它们,从而为公司带来竞争优势。为什么要与世界分享?

Russ认为,这样做的商业理由是Go是成功的唯一途径。

语言需要大量的人编写大量的软件,因此,当您需要特定的工具或库时,很可能已经有人比您更了解该主题,并且花了比您更多的时间来编写该语言,大。

语言需要大量的人员报告错误,以便快速识别和解决问题。由于用户群庞大,因此Gocompiler比以前松散地基于Plan 9的Ccompiler更加健壮和符合规范。

一种语言需要大量的人将其用于多种不同的用途,因此该语言不会过分适合一个用例,并且在技术格局变化时最终无用。

一种语言需要许多想学习它的人,因此人们就有了一个市场来写书,讲课或举办这样的会议。

如果Go留在Google内部,那么所有这些都不会发生。 Go会在Google内部,任何一家公司或封闭环境中窒息而死。

从根本上来说,围棋必须是开放的,围棋需要您。没有所有人,如果没有所有人都将Go运用于世界各地各种项目,Go就不会成功。

自1976年成立以来,Emacs便有了很大的发展,当时它是可编程TECO文本编辑器的宏集合,而该文本编辑器本身就是1962年的代码。

那时是另一个世界。当用户键入键盘时,实时更新显示文本是一项最新的创新。

从那时起,创建了Emacs Lisp,出现了Emacs分支,添加了graphicUI,实现了词法范围,引入了基本的网络和并发原语,等等。

可以说,稳定性和渐进式进化是Emacs幸存并仍在蓬勃发展的原因。但是,稳定性必然与进步相反。可能使它成功的真正原因是使它变慢了。

但是,它对进步的影响不如自由。因为自由,当面对使用技术的问题时

后者]]将始终被选中。鉴于大多数技术进步都是通过资本主义机制发生的,因此“自由”替代品通常在很大程度上落后。

[& mldr]我认为自由比技术进步更重要。专有软件提供了许多技术上的“进步”,但由于Iwon不会放弃使用它的自由,就我而言,这根本就没有进步。

如果我在1984年重视技术进步超过自由,而不是开发GNU Emacs和GCC和GDB,我会去AT& T工作,并改进其非自由软件。我可以取得很大的进步!

是否同意他,RMS有一点。检查和更改在计算机上运行的软件的能力使我们可以控制。

例如,苹果似乎越来越反对其用户的隐私(并看好其开发人员)。在我撰写本文时,已经发现macOS的较新版本具有反恶意软件功能,该功能几乎在每次运行任何程序时都发送跟踪信息。这些信息是通过第三方CDN未加密发送的,因此,这不仅被视为侵犯隐私,而且还被视为危险的数据泄露:任何在网络上监听的人都可以大致了解您使用的应用程序,使用的频率,何时使用从哪里使用它们。

仍然可以采取一些措施来改善这种情况以及其他情况,但这最终超出了我们的控制范围。 macOS是专有操作系统,可以轻松阻止用户将来采取这些步骤。

我选择以容忍侵犯我的隐私的方式来付出损害自己自由的代价,这样我就可以拥有一台可以正常工作的计算机,并使我为实现自己的生活目标而富有成效。我们必须选择自己的战斗,而我们赖以生存的山丘在很大程度上取决于我们的价值观。

意识到这些事实仍然不足以使我切换到GNU / Linux来满足我的个人计算需求。至少现在...

我们正越来越多地发现自己处于一个必须在极端之间进行选择的世界:您想要一台尊重您的隐私的计算机还是现代,功能强大的计算机?

维护者和核心贡献者可能以与大多数用户和临时贡献者不同的方式来使用它,因此它们具有不同的优先级。例如,直到2012年被盗之前,RMS一直使用9英寸的上网本,因为“它可以在BIOS级别上使用免费软件运行”(如今,他使用的是11年历史的T400s)。最近的Emacs用户调查2020可能有助于确定当前的使用模式,并希望对Emacs的发展方向产生影响。

Emacs不需要Neoemacs,而Vim需要Neovim。与Vim不同,Emacs始终拥有丰富的活跃贡献者生态系统,并且维护人员在一定程度上还可以听取用户的反馈。在Emacs的整个历史中,仍然存在着根植于意识形态和价值观的张力,这是分叉的:Lucid / XEmacs,Guile Emacs,Aquamacs,Mac port,Remacs。

分叉很难实现。一个成功的人不仅需要最初的动力和热情,还需要一群人的不懈,持续的艰苦努力,更不用说从大量用户那里买入了。正如有人对我说的那样,您必须是“疯子的特殊”才能启动Emacs分支。

我希望Emacs不会发现自己“完全适合不再存在的世界”。不过,我理解并赞赏这种情况的困难。人们的价值观各不相同,而且容易犯错。一切都需要付出很大的努力。我们的情况也是如此。

归根结底,构建软件是一项复杂而深入的人类活动,一切都取决于上下文,很少有简单的答案。莫

......