Backstage News

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

Read this post in other languages:

我们最近宣布了一款一直在开发的新产品,这款产品的名称为 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 后台探秘,第六部分 – UI 和 Noria

在本系列博文中,我们将以多个部分为您介绍构建 Fleet 这款由 JetBrains 打造的下一代 IDE。 第一部分 – 架构概述 第二部分 – 编辑器详解 第三部分 – 状态管理 第四部分 – 分布式事务 第五部分 – 代码补全的故事 第六部分 – UI 和 Noria 在本系列的第五部分中,我们讨论了 Fleet 的一项服务 – 代码补全。 现在,该谈谈我们自己的 JVM 声明式 UI 框架 Noria 了。 我们使用 Noria 构建了 Fleet。 来看看 Noria 背后的想法、主要概念和其他精彩功能。 一切开始的地方:Noria 窗口 UI 是如何构建的? 首先,我们有一台具备图形功能的显示器,它能够呈现应用程序的状态,也负责使我们的 UI 成为 GUI。 我们可能还有一个或多个输入设备,例如键盘、鼠标或触控板,用来传递命令和控制应用程序的行为。 在这些布置中,应用程序实际上是一个事件循环,负责回应用户和其他计算机系统组件(计时器、文件系统、网络等)发起的事件。 首先,回应是屏幕上显示的可见变化。 除了事件循环之外,GUI 应用程序通常还有某种窗口、其负责的屏幕区域以及该区域的一些绘图功能。 窗口通常由底层操作系统或它上面的窗口管理器提供。 操作系统可以提供图形 API 或将绘图委托给图形框架。 Fleet 既是 GUI 应用程序,也是 JVM 应用程序。 它可以

介绍 Fleet 公共预览

自从最初宣布 Fleet 以来,我们得到了来自大家的极大兴趣,有超过 137,000 人报名参加私人预览。我们之所以从封闭式预览开始,是为了能够以渐进的方式处理反馈。我们要感谢每一个参加这次私人预览的人,我们也想向没有收到邀请的人致以歉意。幸运的是,您不再需要等待了。 Fleet 仍处于起步阶段,还有大量的工作要做。然而,今天我们宣布首次公共预览 Fleet,所有人都可以使用。我们向公众开放预览的原因有两个方面。首先,我们认为让所有注册者再等下去是不对的,但单独邀请这么多人对我们来说也缺乏意义。面向公众开放预览对我们来说更容易。第二,也是最重要的,我们一直是一家以开放态度打造产品的公司。我们不希望 Fleet 在这方面有任何不同。 不过,在您下载它之前,请继续阅读完这篇文章,因为有一些重要的事情您应该知道。 Fleet 是什么 对于那些之前可能没有听说过它的人来说,Fleet 是我们新的分布式多语言编辑器和 IDE。它是基于我们在后端的 IntelliJ 平台,采用了全新的用户界面和分布式架构,从头开始构建的。要了解更多详情,请查看 Fleet 产品页面。 现在可以期待什么 由于我们计划支持的技术清单很长,我们准备了一个图表,显示 Fleet 目前提供支持的语言和技术,以及每个技术的状态。这应该能让您更好地了解接下来可

Fleet 后台探秘,第五部分 – 代码补全的故事

在本系列博文中,我们将以多个部分为您介绍构建 Fleet 这款由 JetBrains 打造的下一代 IDE。 第一部分 – 架构概述第二部分 – 编辑器详解第三部分 – 状态管理第四部分 – 分布式事务第五部分 – 代码补全的故事 在本系列的第三部分和第四部分中,我们探讨了状态管理中涉及的复杂抽象架构概念,以及它们如何在 Fleet 的分布式组件之间进行同步。接下来,我们将研究更熟悉的代码补全功能,看一看它是如何在 Fleet 中实现的。 Fleet 在代码补全领域并不是一项巨大突破,但其架构和分布式特性在各处都留有印记。想象一下:一个典型 Fleet 用户,有幸(或不幸)使用多种编程语言。这类软件开发者会在 Go 和 JavaScript 上苦苦挣扎,更喜欢 Kotlin 和 Rust,还要在文本文件中记笔记。有没有哪种代码补全解决方案能够涵盖所有情况呢?我们来找出答案。 最终用户看到的代码补全 我们先来做一些文本记录。看一看到目前为止的代码补全: 这种行为内置于 Fleet 的编辑器中:它会分析文档,考虑哪些单词是代码补全的良好候选。听起来还算合理,虽然您可能以为是机器学习在根据您先前记下的其他笔记来施展魔法。 接下来,我们转向 Kotlin 编程。 这种补全行为并没有什么特别突出的地方。基本上就是文本记录中的相同