Backstage News

Fleet 后台探秘,第一部分 – 架构概述

Read this post in other languages:
English, Français, 한국어, Deutsch, Русский

我们最近宣布了一款一直在开发的新产品,这款产品的名称为 Fleet,是由 JetBrains 打造的新一代 IDE。 该产品目前处于封闭预览阶段,我们收到了来自尝鲜者的大量反馈,帮助我们改进产品并为在 2022 年的公开预览做好准备。

同时,在我们准备好供公众访问之前,我们想与您谈谈 Fleet 是如何在后台构建的。 在一系列的博文中,我们将深入探讨 Fleet 的各个方面,从顶层的架构视图,到状态管理、解析器、协议、可扩展性,甚至是徽标设计等小细节。 我们希望您喜欢了解这次后台探秘!

Fleet 是用什么技术构建的?

当我们第一次宣布 Fleet 时,Twitter 上发生了一些有趣的对话,讨论它是用什么技术构建的。 一些人认为是用 JavaScript 和 Electron, 其他人则希望不是。 有些人对没有使用“笨重老式的 Java”感到非常高兴。 令人惊讶的是,人们可以仅根据屏幕截图推断出多少!

事实是,Fleet 是在可靠、高性能、美妙的 JVM 平台上构建的。 是。 JVM。 为什么? 因为与流行的看法相反,JVM 实际上是一个性能非常高的平台。 此外,它是跨平台的,在支持多个操作系统时使事情变得更容易。

然而,JVM 并不是专门为 Java 语言提供的主机,也不要求您使用 Swing 作为 UI 库(关于 UI 和 Fleet 如何使用 Skia 的更多内容请见后续博文)。 事实上,您可以在 JVM 上使用各种语言,例如 Kotlin。 这正是我们构建 Fleet 所用的语言 – Kotlin。

然而,作为一个真正的多语言 IDE,Fleet 本身也是多语言的。 没错,Fleet 的一小部分,尤其是 Fleet System Daemon,是用 Rust 构建的!

Fleet 架构

我们现在已经知道 Fleet 是用什么技术来构建的,让我们来看看架构的简要概述。 Fleet 由以下组件构成:

让我们将这些组件逐一分解,以更好地理解它们的作用。

前端

虽然我们可能会认为前端就是用户界面,但实际上它的作用更大。 它不仅是用户界面,而且还提供以下功能:

  • 文件解析
  • 语法高亮显示和基本补全
  • 编辑器功能

Fleet 默认在编辑器模式下启动,您可以在这里获得基本补全和导航,以及您期望从任何强大的编辑器获得的功能。 所有这些功能都是由 Fleet 的前端提供的。

工作区

顾名思义,工作区是处理工作会话相关事务的地方。 诸如状态管理等方面都由工作区来处理。 这个功能可以在 Fleet 的进程中运行,也可以作为单独的进程运行(具体取决于它是否在计算机的本地),因此,允许工作区在远程服务器上运行。

智能模式和后端

如上所述,Fleet 可以作为一个编辑器运行。 但是,如果需要更高级的功能,例如智能代码补全、高级导航、重构和检查等其他功能,那么智能模式就可以发挥作用。

这种智能模式可以由各种选项提供支持,包括默认的 IntelliJ IDEA 代码处理引擎、自定义分析器,甚至是语言服务器(无论这些是否基于 LSP)。

Fleet System Daemon (FSD)

这个组件是用 Rust 编写的,负责构建操作、运行代码、执行终端命令,以及 Fleet 运行环境中的其他操作。所有这些组件一起提供了一个分布式和可扩展的解决方案。 在后续博文中,我们将深入探讨用于构建这些组件的技术,以及用于它们之间通信的协议。

在下一篇博文中,我们将查看状态管理,看看我们如何确保所有这些服务之间的一致性。

敬请关注!

英文博文原作者:

Sue

Hadi Hariri

Discover more

Fleet 后台探秘,第三部分 — 状态管理

在本系列博文中,我们将以多个部分为您介绍构建 Fleet 这款由 JetBrains 打造的下一代 IDE。 第一部分 – 架构概述第二部分 – 编辑器详解第三部分 – 状态管理 在本系列的前几部分中,我们介绍了 Fleet 的总体架构,并探讨了编辑器后台用到的算法和数据结构。 在这一部分中,我们将介绍实现状态管理的方式。 这是一个复杂的主题,因此我们特别准备了多篇博文。 本篇的重点是应用程序状态元素的表示和存储, 下一部分将更细致地探讨 Fleet 中围绕状态管理的事务机制。 Fleet 有很多移动部件,也执行着许多不同的操作,包括: 呈现 UI 元素并与用户互动。与其他服务交互以获取数据和更新 UI 元素。处理文件,例如保存、加载、解析文件以及显示其差异。编排处理代码洞察、补全和搜索结果的后端。 许多操作较为复杂,可能会降低界面的响应能力。 同时,由于 Fleet 是分布式应用程序,可能有多个分布在网络上的前端,使整个过程更加复杂。 尽管如此,我们还是必须持续为用户正确显示所有信息,确保用户可以在前端之间稳定地工作。 在状态管理上,操作分为读取状态和更新状态。 UI 元素读取状态后向用户提供实际数据,用户则通过编辑文档和移动内容来更新状态。 这

Fleet 后台探秘,第二部分 – 编辑器详解

在本系列博文中,我们将以多个部分为您介绍构建 Fleet 这款由 JetBrains 打造的下一代 IDE。 第一部分 – 架构概述第二部分 – 编辑器详解 在本系列的第一部分中,我们概括介绍了 Fleet 架构。 在此第二部分中,我们将介绍编辑器幕后使用的算法和数据结构。 数据结构的聚合 请查看以下屏幕截图,其中展示了 Fleet 中的编辑器窗口 图中包含一行带有语法高亮显示的文本,以及一个提供特定变量用法相关信息的微件。 现在,人们可以通过多种方式显示这些信息,但编辑器方面的问题是它们并非只读。 除了数据可视化以外,数据还可以更新。 诸如更改函数名称这样简单的操作就可能会造成许多影响,例如影响语法突出显示、用法,当然还包括提供的任何其他功能,例如静态分析或实时编译。 为能提供良好的体验,我们需要确保编辑文本和随之呈现的可视化可以尽可能无缝衔接。 为了实现这一点,我们必须以有效的方式存储和处理数据。 然而,存储数据的方式并非只有一种。 事实上,上图就以多种方式存储数据,它们使用各自不同的数据结构,这些数据结构共同构成了我们所说的编辑器。 换言之,可以将编辑器视为数据结构的聚合器! 我们来详细介绍! 绳索全线贯通 对于熟悉处理大量文本的人来说