语言服务器是新的框架
Svelte 3于 2019 年发布时,最受期待的功能就是对 TypeScript 的支持。而当2020 年终于宣布支持 TypeScript 时,大家的反响更是令人欣喜。
但秘密在于——Svelte 的核心代码不需要做太多改动。它只是在其核心职责中添加了语言工具。Svelte 多年来一直拥有 TypeScript 预处理器——但直到 VS Code 扩展发布后,它才被认为拥有“TypeScript 支持”。
我认为这表明了一种更广泛的趋势:
在JavaScript 的第三时代,所有框架都会提供自己的语言服务器。
作为证据,你会看到这种模式也出现在其他框架中:
- Vetur是所有 Vue.js 开发人员的标准工具
- React 强烈建议使用ESLint 检查来强制执行 Hooks 规则(这可能是一种轻描淡写的说法;如今,如果没有 ESLint 检查器,可能没有 React 专业人士会相信自己能够正确编写 Hooks)
- Angular 有Angular 语言服务(感谢Mike)并且 Ember 正在开发它(感谢Alex)
- Tailwind Labs 的第一位员工是 Brad Cornes,他开发了 Tailwind IntelliSense 插件
- GraphiQL、Relay Compiler和Apollo VS Code可以被视为 GraphQL 开发的语言服务器
Linting、类型检查、始终运行的编译以及其他形式的编写时检查和优化并非新鲜事物。事实上,当开发团队编写单元测试和 Lint 规则时,他们实际上是在为自己的应用创建定制的语言服务器。新功能在于,提供实时反馈现在已成为所有框架的共同责任。这种标准化提高了启动新项目和在项目之间移动时的生产力。
为什么
出现这种情况的直接原因很简单:成本。
IBM发现越早发现错误,修复成本就越低,于是创造了“左移”一词(Neil指出,这项研究可以追溯到20 世纪 80 年代 Barry Boehm 的研究)。如果将软件开发生命周期从左(设计)到右(生产)进行排列,其理念是,如果将错误“左移”,那么通过更早地发现错误,就能节省实际成本(这一点存在争议——而且很难找到证据!)。
当然,成本的另一面是开发者体验。成本是老板付的钱,体验是我们自己的感受。我们总是倾向于那些引导我们走向成功深渊的工具。
你可以将这个想法翻译成现代术语:
然后绘制框架缓慢向左移动的过程:
记得我说过成本是直接原因。我相信还有一个更深层次、更根本的原因。
汤姆是对的(现在仍然如此)
2017 年,Ember 核心团队的 Tom Dale 观察到了这一演变的第一部分,即“编译器是新的框架”。
我目前的“投资论点”是,我们所谓的 Web 框架正在从运行时库转变为优化编译器。当谈到如何利用手工编写的 JavaScript 及其配套的运行时库来提升性能时,我们已经达到了收益递减的临界点。
他不仅惊人地正确(Svelte 从一开始就是作为编译器构建的),而且这个过程也尚未完成(Next.js 可以说是 React 的优化编译器,但 React 团队本身正在研究选择性水合和混合客户端/服务器模型)。每个框架基本上都会发明自己的元语言(React、Svelte、ActiveRecord),以在更流行的通用语言的限制下解决开发人员的体验问题,而这种语言最终都需要被编译。
我只是将这个思路延伸到它的自然结论:我们所说的 Web 框架正在从运行时库转变为具有一流语言服务器支持的优化编译器。
我不知道这个观察有多独特,但当我第一次意识到它时,感觉很有启发。在你观察了一些框架和开发者平台的演变之后,你开始看到同一部电影一遍又一遍地上演。为了提供更好的开发者体验,你最终会创建一种语言。一种语言需要一个编译器。编译器最终需要一个语言服务器。
卖铲子
语言服务器承担着许多繁重且毫无差别的工作——文件监控、处理、报告、为每个 IDE 提供插件支持等等。如果我们都要构建语言服务器,为什么每次都要重新发明轮子呢?
当然,如果语言服务器是框架的新标准,那么拥有语言服务器层通用轨道的人将会做得很好。微软首先为 VSCode开发了语言服务器协议,并于 2017 年对其进行了标准化。这是一个慷慨的举措,确保该协议可以与非微软 IDE(如Eclipse、IntelliJ甚至vim)以及非微软语言(如Python)兼容。由于 LSP 具有讽刺意味的是与语言和工具无关的特性,因此也大大降低了整整一代与语言和编辑器无关的初创公司(如Sourcegraph和Kite )的门槛。
对于那些想要使他们的开发工具项目成功的人,这是我的建议:花时间了解语言服务器的工作原理。
作者注:TS 核心团队的 Orta留下了精彩的评论,其中提供了更多资源来了解 Anders Hejlsberg 的 LSP 和即将推出的“构建服务器协议”!
注意:这是我第二次 React Rally 演讲的论文的三分之一。
文章来源:https://dev.to/dx/language-servers-are-the-new-frameworks-1lbm