Fleet的台子,我不能落后!
Fleet是什么
Fleet在经历了封闭式预览之后,终于推出了公开预览版本。根据Jetbrains表述,Fleet是由 JetBrains 打造的下一代 IDE,它是基于IntelliJ平台,采用了全新的用户界面和分布式架构,从头构建的。
Fleet有着几个鲜明的特点:
轻量级编辑器:在定义上,它是一个轻量级的文本编辑器,可以满足快速浏览和编辑代码的需求,同时可以轻松转换成IDE,这也就是Fleet提供Smart Mode开关的原因。而这种模式的区分,依赖的是代码处理引擎和编辑器的分开架构。
智能的IDE:当开启了Smart Mode之后,会对项目进行全局索引,通过对项目的分析,来为我们提供智能辅助。例如基于项目和上下文感知的代码补全(在试用下来之后,这个功能让我叹为观止,我们后面再聊)、代码定义、用法导航、实时代码审查修复。
分布式的架构,分布式的工作:分布式的工作是目标,分布式的架构是基础。Fleet在设计上灵活性十足,代码的编写、处理、运行都是分布式,也更好的跟远程机器进行连接。
无微不至的协作:共享终端和调试会话、执行代码审查、探索代码,以及进行许多其他操作 – 全部无需任何设置。在使用的过程中,发现了这个比较有趣的功能,虽然之前的其他的IDE版本已经提供了Code with me
,但是Fleet的协作模式,还是让我产生了极大的好奇。比如文件管理怎么做?版本并发控制呢?
试用Fleet
下载安装
我选择的是先下载了Tool Box
,Toolbox App下载
安装完成之后,选择安装Fleet
目前Fleet推出的是预览版本
功能介绍
此处并不想过多的介绍,真实的体验大家可以实际下载尝试一下,Fleet尝试综合各个IDE的优点,对于此,我一直持乐观态度,一个善于总结出优点的组织或者人,如何能让人不乐观呢?
我只想问,这样的UI,谁会不爱?反正我爱!
关于性能
轻量级体现在哪里?计算快?内存小?我一直认为这是一个伪命题。在当前的这种计算机架构体系下,快和小不过是中和罢了,看看Fleet的表现。
在启动Fleet,打开一个MVC项目之后,运行内存大概600Mb,如此看下来,内存确实很小,但实际上我没有开启Smart Mode
,对于项目来说,不过是一个高级点的文本编辑器。
当开启了Smart Mode之后,我发现Fleet的内存确实没有大的变化,但是却偷摸起了一个Fleet_backend进程,而这个进程耗着比较大的内存。
如此看下来,仿佛优化了内存,但又没有优化。实际上,这个跟Fleet的架构有关系。
Fleet的架构
首先,不出所料的,Fleet是基于高性能、可靠的JVM平台构建。但却不是简单的单一语言Java来构建,例如图中的FSD是用RUST构建的。
FSD
Fleet System Daemon,主要负责构建命令。包含着构建、运行代码,终端执行,其他环境的系统命令。
前端
Fleet在本质上是一个文本编辑器,那么它期望具备的所有的文本编辑的功能,更不用说,文件解析,语法标识、文本补全,编辑。而这些功能,Fleet把它交给了前端来提供。
所以这个架构下的前端,并不是基础的用户界面。
工作区
这个区域是设计比较巧妙的地方,它处理工作会话相关的任务。例如,代码协同中的多人修改下的文件会话状态管理。从这个角度看来,工作区,显然可以再远程执行。
智能模式和后端
Fleet的基础文本编辑的解析、补全、查找,显然无法满足我们这样优秀的工程师的需求。更高级的代码上下文的智能代码补全,重构,检查等等,就需要一个智能模式。
说一百句,不如试一次。我仍然强烈建议你下载尝试一下。并且Jetbrains,出了一个免费的Space,可以很好的无缝跟Fleet连接。如果感兴趣,我们接下来会做一个教程来使用Space。在结束今天的Fleet话题之前,我想偷摸跟你聊聊一个有趣的话题,Fleet的分布式事务问题。
Fleet的分布式事务问题
无论是Fleet的无缝合作模式,亦或者其他的IDE的code with me,在并发或者网络波动的情况下,就有一个文件的幂等问题,也就是牵扯到了分布式事务的问题。
场景
假设有两个用户A和B同时操作文本,他们有如下场景:
场景一:A对文件进行了重命名,B需要在自己的电脑上看到
场景二:A对文件重命名,B修改了文本中的内容
场景三:A使用了Fleet的括号匹配通过(
,自动生成一对括号()
,B删除了(
在聊这些之前,我们先看看,Fleet目前的工作模式。
我们可以理解,每一台FRONTEND都有一个Kernel,在负责文件状态的转换和交换。workSpace就是我们提到的工作区,无论是远程的还是本地了,我们都可以理解这样一个去中心的分布式架构,状态变成了分布式的传输,那么自然而然的就需要分布式事务来控制状态。
场景分析
场景一:A对文件进行了重命名,B需要在自己的电脑上看到。
场景二:A对文件重命名,B修改了文本中的内容
无论用户A的操作和用户B的操作在本地的应用状态是如何的,最终都会同步到工作区,在工作区进行定序,之后在各个端进行无条件的重放。这样用户A和B都能得到一个最终的结果。
场景三:场景三:A使用了Fleet的括号匹配通过(
,自动生成一对括号()
,B删除了(
好了,至此Fleet介绍完了,实际上在上面就介绍完了,作为Jetbrains的忠实老粉,我还是期待正式版Fleet的登场的,下期Space再见,拜了个拜。