Fleet的台子,我不能落后!

4,013

Fleet的台子,我不能落后!

Fleet是什么

Fleet在经历了封闭式预览之后,终于推出了公开预览版本。根据Jetbrains表述,Fleet是由 JetBrains 打造的下一代 IDE,它是基于IntelliJ平台,采用了全新的用户界面和分布式架构,从头构建的。

Fleet有着几个鲜明的特点:

轻量级编辑器:在定义上,它是一个轻量级的文本编辑器,可以满足快速浏览和编辑代码的需求,同时可以轻松转换成IDE,这也就是Fleet提供Smart Mode开关的原因。而这种模式的区分,依赖的是代码处理引擎和编辑器的分开架构。

image-20221020110913094.png 智能的IDE:当开启了Smart Mode之后,会对项目进行全局索引,通过对项目的分析,来为我们提供智能辅助。例如基于项目和上下文感知的代码补全(在试用下来之后,这个功能让我叹为观止,我们后面再聊)、代码定义、用法导航、实时代码审查修复。

fleet代码自动补全.png

分布式的架构,分布式的工作:分布式的工作是目标,分布式的架构是基础。Fleet在设计上灵活性十足,代码的编写、处理、运行都是分布式,也更好的跟远程机器进行连接。

image-20221020112052927.png

无微不至的协作:共享终端和调试会话、执行代码审查、探索代码,以及进行许多其他操作 – 全部无需任何设置。在使用的过程中,发现了这个比较有趣的功能,虽然之前的其他的IDE版本已经提供了Code with me,但是Fleet的协作模式,还是让我产生了极大的好奇。比如文件管理怎么做?版本并发控制呢?

image-20221020112504365.png

试用Fleet

下载安装

我选择的是先下载了Tool BoxToolbox App下载

image-20221021094914438.png

安装完成之后,选择安装Fleet

image-20221021095008622.png

目前Fleet推出的是预览版本

功能介绍

此处并不想过多的介绍,真实的体验大家可以实际下载尝试一下,Fleet尝试综合各个IDE的优点,对于此,我一直持乐观态度,一个善于总结出优点的组织或者人,如何能让人不乐观呢?

我只想问,这样的UI,谁会不爱?反正我爱!

fleet预览.png

关于性能

轻量级体现在哪里?计算快?内存小?我一直认为这是一个伪命题。在当前的这种计算机架构体系下,快和小不过是中和罢了,看看Fleet的表现。

image-20221021100407228.png

在启动Fleet,打开一个MVC项目之后,运行内存大概600Mb,如此看下来,内存确实很小,但实际上我没有开启Smart Mode,对于项目来说,不过是一个高级点的文本编辑器。

当开启了Smart Mode之后,我发现Fleet的内存确实没有大的变化,但是却偷摸起了一个Fleet_backend进程,而这个进程耗着比较大的内存。

image-20221021100744167.png

如此看下来,仿佛优化了内存,但又没有优化。实际上,这个跟Fleet的架构有关系。

Fleet的架构

Fleet架构.png

首先,不出所料的,Fleet是基于高性能、可靠的JVM平台构建。但却不是简单的单一语言Java来构建,例如图中的FSD是用RUST构建的。

FSD

Fleet System Daemon,主要负责构建命令。包含着构建、运行代码,终端执行,其他环境的系统命令。

前端

Fleet在本质上是一个文本编辑器,那么它期望具备的所有的文本编辑的功能,更不用说,文件解析,语法标识、文本补全,编辑。而这些功能,Fleet把它交给了前端来提供。

所以这个架构下的前端,并不是基础的用户界面。

工作区

这个区域是设计比较巧妙的地方,它处理工作会话相关的任务。例如,代码协同中的多人修改下的文件会话状态管理。从这个角度看来,工作区,显然可以再远程执行。

智能模式和后端

Fleet的基础文本编辑的解析、补全、查找,显然无法满足我们这样优秀的工程师的需求。更高级的代码上下文的智能代码补全,重构,检查等等,就需要一个智能模式。

智能模式开关.png

说一百句,不如试一次。我仍然强烈建议你下载尝试一下。并且Jetbrains,出了一个免费的Space,可以很好的无缝跟Fleet连接。如果感兴趣,我们接下来会做一个教程来使用Space。在结束今天的Fleet话题之前,我想偷摸跟你聊聊一个有趣的话题,Fleet的分布式事务问题。

Fleet的分布式事务问题

无论是Fleet的无缝合作模式,亦或者其他的IDE的code with me,在并发或者网络波动的情况下,就有一个文件的幂等问题,也就是牵扯到了分布式事务的问题。

场景

假设有两个用户A和B同时操作文本,他们有如下场景:

场景一:A对文件进行了重命名,B需要在自己的电脑上看到

场景二:A对文件重命名,B修改了文本中的内容

场景三:A使用了Fleet的括号匹配通过(,自动生成一对括号(),B删除了(

在聊这些之前,我们先看看,Fleet目前的工作模式。

Fleet工作模式.png

我们可以理解,每一台FRONTEND都有一个Kernel,在负责文件状态的转换和交换。workSpace就是我们提到的工作区,无论是远程的还是本地了,我们都可以理解这样一个去中心的分布式架构,状态变成了分布式的传输,那么自然而然的就需要分布式事务来控制状态。

场景分析

场景一:A对文件进行了重命名,B需要在自己的电脑上看到。

Fleet分布式事务场景一.png

场景二:A对文件重命名,B修改了文本中的内容

Fleet分布式事务场景二.png

无论用户A的操作和用户B的操作在本地的应用状态是如何的,最终都会同步到工作区,在工作区进行定序,之后在各个端进行无条件的重放。这样用户A和B都能得到一个最终的结果。

场景三:场景三:A使用了Fleet的括号匹配通过(,自动生成一对括号(),B删除了(

Fleet分布式事务场景三.png 好了,至此Fleet介绍完了,实际上在上面就介绍完了,作为Jetbrains的忠实老粉,我还是期待正式版Fleet的登场的,下期Space再见,拜了个拜。