英特尔liJ 平台 2020 年路线图

GoLand 开发团队公布了 2020 年首个主要版本 GoLand 2020.1
的路线图,介绍了在改进性能、支持 Go
Modules、以及代码辅助功能方面将会开始的一些计划。

JetBrains 发文介绍了其 IntelliJ 平台 2020 年的路线图。

速度更快

和构建 GoLand 的 IntelliJ 平台一样,此 IDE
将不断提高启动性能和索引速度。以下是即将执行的计划的简短摘要:

  • 在我们的项目仍在建立索引时解锁更多 IDE
    操作,以便可以立即执行它们,而无需完成索引的构建
  • IDE
    会向用户通知有关索引出现异常的信息。例如,索引花费时间太长的文件、索引重新建立频率太高的文件以及异常导致的索引重建

有关更多详细信息,请阅读 IntelliJ 平台 2020 年路线图。

文章主要介绍了当前 JetBrains 在改进 IntelliJ IDEA 和基于 IntelliJ 平台的
IDE
方面所做的一些工作,主要包括性能和对现代开发工作流的支持两个方面。改进结果将会在明年发布,其中一些会发布在春季的 2020.1
版本中。

流畅的 UI

开发团队计划从当前的架构解决方案开始迁移,因为此架构要求大多数操作需要修改
IDE 的内部数据结构才能在 UI
线程上运行,其中包括基本操作(将字符插入文档中)和大规模操作(重新命名具有数千种用法的方法)。这种架构的好处是简单的编程模型,但明显的缺点是
UI 响应能力在许多情况下都会受到影响。

为此,GoLand 的上游项目 IntelliJ 将重构 IntelliJ 平台的基本 UI 组件和
API,以采用新的线程模型,从而为用户打造一个流畅且无延迟的 UI。

欧洲杯竞猜平台 1

支持 Go Modules

计划以几种不同的方式改进对 Go Modules 的支持:

1.GO-7632 — 支持来自 Go
1.13 的GOSUMDBGOPRIVATE环境变量。

2.GoLand 2020.1
将在升级依赖项的主要版本后对导入进行重命名。这项对于“重命名”的重构将帮助用户在 go.mod 文件中从 “module
name” 重命名变为 “module name/v2”,并相应地更新项目中的所有导入路径。

3.支持通过 Find Usages 搜索依赖项的引用。

4.对于 replace 语句计划添加以下内容:

  • 提交之前,有关 go.mode 文件中的本地路径替换的通知
  • 代码完成,可以在 替换为本地依赖项 和通过从 VCS
    克隆进行替换 之间进行选择。
  • 如果要从 VCS 克隆,则 IDE 将显示一个对话框,建议输入远程 URL
    和目标本地路径。克隆完成后,GoLand
    将生成一个适当的“替换”指令,并将克隆的模块附加到项目。

性能

索引性能

与 IDE
性能有关的两个主要痛点是启动性能,索引耗时较长的工具被认为是重量级的。JetBrains
表示,明年关注点将转向索引性能方面。

针对此问题官方采取了多管齐下的方法。首先,支持使用预建的索引块,这样每个用户
IntelliJ
实例都不必执行索引java.lang.String类的工作。计划明年逐步提供支持,从
JDK 开始,然后涵盖 Maven Central 的库以及其它 IDE
中的解释器和包。同时还在研究支持团队或企业内项目源代码的索引块共享的方法,虽然这一块目前还没有任何具体计划。

其次,计划通过在索引时提供更多的 IDE 操作来减少索引的破坏性。

第三,将检测并通知用户有关索引异常的信息,包括索引花费时间太长的文件、索引重新建立频率太高的文件以及异常导致的索引重建,目的是提供解决这些问题并提高
IDE 在项目上的性能的清晰步骤。

同时也计划支持进行旧性能优化,以确保索引系统不会执行任何不必要的工作并且不会产生可避免的开销。

读/写锁线程模型重新设计

UI
卡死(freeze,冻结)是一个很大的问题。今年虽然已经构建了用于报告此类卡死问题的基础,并进行了架构更改以修复许多相关问题,比如文件系统事件的异步侦听器,但是接下来的一年中,计划迈出更大的一步:将需要写锁定的操作移出
UI 线程。

早在 IntelliJ IDEA
早期就做出了一项架构决定,该决定要求大多数操作需要修改 IDE
的内部数据结构才能在 UI
线程上运行,也就是包括基本操作(将字符插入文档中)和大规模操作(重新命名具有数千种用法的方法)。这种架构的好处是简单的编程模型,但是明显的缺点是
UI 响应能力在许多情况下都会受到影响。

欧洲杯竞猜平台 ,多年以来,官方一直在寻找方法来解决此架构的局限性,主要是将大型操作拆分为在后台运行并应用于
UI 线程的部分。一个更基本的解决方案是完全摆脱 UI
线程的要求,但是直到最近,还不知道如何在不对自己的代码和第三方插件进行重大重写的情况下做到这一点。

不过现在,JetBrains
已经有了一个允许逐步迁移的架构解决方案,并且正在开始实施。明年将重构
IntelliJ 平台的基本 UI 组件和
API,以采用新的线程模型。一旦新模型稳定并且可以看到改进,将在所有 IDE
中切换到新模型,从而使 UI 平滑且没有滞后。

无需重启即可加载和卸载插件

该特性已经在 IntelliJ IDEA 2019.3
中预览,它使开发者不用重新启动就可以安装主题和键盘映射插件,无缝升级。2020.1
版本中会将此支持扩展到所有类型的插件。计划将为大部分捆绑的插件提供支持,并且会为第三方插件开发人员提供支持说明。

这项工作更有意义的地方在于,它的最终目标是 IDE
可以根据开发者打开的每个项目的大小自行调整大小,比如仅针对使用 Spring
的项目加载 Spring 插件,仅针对 Angular 项目加载 Angular
插件。这样如果不使用某项技术,那么就不会看到与此相关的任何 UI
元素,也不会看到支持该技术的插件对性能或内存使用量产生任何影响。

代码辅助功能

为了帮助开发者更快地编写代码,开发团队将专注于改机代码编辑功能,这些功能几乎不需要用户交互。

  • 扩展 基本代码完成 和 智能代码完成 功能
  • 新的 quick-fixes 和 Intention actions
  • 新的 Postfix 模板 和 Live 模板
  • 生成构造器(Generate
    Constructor)的应用领域将扩展到超出结构类型的限制
  • 针对 代码格式化 的各种改进
  • Rename, Extract  和 Implement
    Interface 的重构将尽可能完善,以提供预期的行为

工作流支持

协同编辑

协同编辑是问题跟踪器中投票最高的请求,目前 JetBrains
也在跟进这一功能。在目前采用的方法中,将有一个主 IDE
在运行源代码的计算机上运行,​​其他用户能够将其 IDE
作为“瘦客户机”连接到主
IDE,而无需直接进行源代码访问。每个连接的用户都将具有自己的状态,包括打开文件集与插入号位置等,并且可以根据需要选择“跟随”另一个用户。

瘦客户机用户将有权访问核心 IDE
功能,例如导航、补全和调试,但不能访问完整的功能集,例如,在初始版本中,瘦客户端可能无法执行版本控制操作。

协同编辑支持基于 Rider 协议,因此很可能首先在
Rider 中发布,然后扩展到其它 IDE。不过这是一项长期工作,IntelliJ IDEA
2020.1 版本中暂时还是看不是相关成果的。

支持云执行

相当长一段时间以来,许多 JetBrains
产品都支持在容器内运行和调试代码,但是,在不同产品中这些功能的实现之间并没有太多相关性,甚至基本功能(如
Docker 支持)的 UI 也不一致。

现在 JetBrains
引入了目标环境的概念,该概念提供了一种可双向复制文件并在目标环境中启动进程的方法。在
IntelliJ IDEA 2020.1 中,受支持的环境将包括本地计算机、Docker 容器和通过
ssh 连接的计算机。

在后续发行版中,计划统一支持围绕新架构的现有 Docker
和远程解释器。除此之外,还将提供更深入的云集成。

重新设计项目模型

项目模型是 IDE
表示项目结构的方式:哪些文件属于该项目、它们如何相互依赖、使用哪些库……项目模型有一定的局限性,首先,它不支持任意混合不同类型的项目。例如,AppCode
可以打开 Xcode 项目,Rider 可以打开 Visual Studio
解决方案,但是无法在同一 IDE 框架中打开 Gradle 项目和 Xcode
项目。其次,项目模型在目录级别上工作,而不在文件级别上,并且它不能表示同一目录中具有不同依赖项的不同文件,这使得很难将诸如
Bazel 之类的构建系统集成到 IDE 中,同时也给其它场景带来了问题。

重新设计的项目模型(内部称为“工作区模型”)将消除这些限制。同时它还带来了其它好处,例如在项目打开期间提高性能、与
Maven 和 Gradle 进行更顺畅的同步以及更好的编程模型。

JetBrains 还表示接下来将发布更多计划信息,详情查看:

https://blog.jetbrains.com/idea/2019/12/intellij-platform-roadmap-for-2020

无需重启即可加载和卸载插件

在 2019.3
中,我们无需重启就可以安装和卸载任何主题和键盘映射插件,以实现无缝升级。2020.1
版本中会将此支持扩展到所有类型的插件。计划将为大部分捆绑的插件提供支持,并且会为第三方插件开发人员提供支持说明。

这项工作更有意义的地方在于,它的最终目标是 IDE
可以根据开发者打开的每个项目的大小自行调整大小,比如仅针对使用 Spring
的项目加载 Spring 插件,仅针对 Angular 项目加载 Angular
插件。这样如果不使用某项技术,那么就不会看到与此相关的任何 UI
元素,也不会看到支持该技术的插件对性能或内存使用量产生任何影响。

支持云执行

在之前的版本中,GoLand
已支持在非本地计算机或容器内运行和调试代码。但在不同环境中这些功能的实现往往有所出入。

GoLand 2020.1
引入了目标环境的概念,该概念提供了一种可双向复制文件并在目标环境中启动进程的方法。在
2020.1 中,受支持的环境将包括本地计算机、Docker 容器和通过 ssh
连接的计算机。

在后续发行版中,计划统一支持围绕新架构的现有 Docker
和远程解释器。除此之外,还将提供更深入的云集成。因此,如果需要在云的新
VM 上运行该进程,无需指定要连接的特定计算机的详细信息。

详情请查看:

(文/开源中国)    

相关文章