我们有令人兴奋的消息要宣布!CLion 2019.3,今年的最后一次重大版本更新,已正式发布!改善 IDE 性能和修复主要缺陷始终是我们团队的首要任务。

在此更新中,我们一直专注于提高特定方面的性能、消除 UI 冻结(不是全部,但很多已经消失了!),以及为我们的用户增强了编辑器和集成!

要更新到此版本,请使用 Toolbox App、快照包(在 Ubuntu 上)、我们的网站或 2019.2 最新版本的补丁更新。

立即下载 CLION

如果您只是想快速浏览主要要点,请查看下面的列表。

如果您对具体细节感兴趣,请继续阅读:

IDE 性能

调试器更新

CMake 中的更多机会

在头文件 / 源文件之间切换

代码覆盖率

C++20 概念

您还可以观看以下 Phil Nash 主讲的这个简短的 “最新功能” 视频,以全面了解此版本:

IDE 性能

此版本主要侧重于提高 IDE 性能,尤其是在 IntelliJ 平台 和 CLion 中。在 IntelliJ 平台方面,引入了许多重要的架构更改,以减少 IDE 启动时间

这些更改包括但不限于:

一些按顺序运行的进程的并行化。

以一种使初始类加载更快的方式重新组织类。

优化 macOS 上的字体加载。

在 CLion 方面,我们已经做出了巨大的努力,以消除 UI 冻结。尽管仍然有一些冻结(主要是一些较复杂的 C++ 项目),但许多其他冻结已经消失了。我们计划在下一个版本中保持这种工作标准,我们保证您!

除此之外,我们还通过修改一些基础算法来优化了构建/更新符号步骤。根据我们的计算,取决于特定项目、CPU 和环境的不同,您现在会发现性能提高 10% 到 50% 之间。该团队还致力于通过重新设计 IDE 提供的一些核心功能来提高性能。

首先, Rename 重构现在具有一种模式,它首先询问您是否要重命名非代码引用(例如注释和字符串文字中的实例),然后才搜索所有实例。但是,这需要将 Rename 的就地模式设置为 off (Settings/Preferences | Editor | General | Refactorings | Enable in-place mode)。

在任何 IDE 或智能文本编辑器中,最广泛使用的功能是什么?没错,就是代码补全!为了加快 CLion 中的代码补全速度,我们实施了一个额外的补全器。

它基于 Clangd, 而产生结果的速度比其他在大量使用情况下运用(例如 LLVM ,Boost ,Qt 或 Eigen )的补全器:

Code completion on Eigen

了解有关测试的更多详细信息

调试器更新

CLion 与 GDB 和 LLDB 调试器集成在一起。在此发行版中,我们致力于这个集成,以使其更加用户友好和更高质量。对于LLDB,我们已将捆绑版本更新为 v9.0,并在捆绑的 pretty printers 中进行了重大清理。

因此,现在可以更精确地可视化标准容器。您可以期望在 macOS 上对 libc++ 的支持比对 libstdcxx 更好(让我们知道您是否在 macOS 上使用后者,并指定使用的工具链,以便我们可以考虑进行改进)。

在 Ubuntu 上,唯一的区别在于无序关联容器(unordered associative containers)。在此处查看详细的比较。

对 GDB 和 LLDB 的项目也提供了在根目录读取 .gdbinit / .lldbinit 的支援(CLion 以前只能从用户的主目录读取这些文件)。这样,您就可以调整调试器的行为,而不会影响计算机上的所有项目。

请注意,要启用此行为,您必须在自己的主目录中明确允许 .gdbinit / .lldbinit

用于 GDB:

通用: set auto-load local-gdbinit onadd-auto-load-safe-path /

按项目: set auto-load local-gdbinit onadd-auto-load-safe-path C:\work\myproject\.gdbinit

用于 LLDB:settings set target.load-cwd-lldbinit true

一个典型的用例是为项目中的某些数据类型提供定制的 pretty printer:

最后,添加了新的 远程 GDB 服务器 配置,这使得可以通过 ssh 启用远程调试

与以前添加的远程 GDB 调试配置相比,主要优点是 CLion 将可执行文件上传到远程主机,并在该主机的 gdbserver 下自动启动程序。

阅读我们网络帮助中的详细信息。这意味着现在有 3 个可以从本地运行的 CLion 进行远程连接的选项 – 完全远程模式(在远程构建、运行和执行时) 和 2 个用于远程调试的选项(当仅在远程主机上进行调试时)。

CMake 中的更多机会

CMake 是 CLion 中一个顶级的项目模型。许多 CLion 用户都依赖它,有些用户甚至将他们的项目转换为 CMake 即可在 CLion 中工作。非常感谢您的大力支持!在此版本中,我们解决了 CLion 中 CMake 集成的两个最大缺点。

解决这个问题的一种方法,当然是使用 Ninja 生成器!此外,现在可以在 CMake 中使用任何生成器

只需将其传递给 CMake 配置文件设置中的 CMake 选项:

Ninja generator

该实现基于 CMake File API,因此,当使用 CMake 3.15 或更高版本时可用。 我们要感谢在功能发布后不久就尝试了它的所有 EAP 用户。我们获得的反馈帮助我们在正式发布之前解决了许多问题。

我们要解决的另一个问题是缺少为 CLion 中新创建的项目全局配置某些 CMake 设置的功能。例如,用于生成路径或某些环境设置的模板。

现在,您可以使用 CMake Defaults!使用 File | Other Settings | Preferences/Settings for New Projects…

最后,我们解决了此发行版中的另一个不愉快的问题 – 如果某些 CMake 配置无效且无法重新加载,CLion 现在不会失败,而是可以成功重新加载所有有效配置。这种情况的典型用例是当您未连接远程配置并且您要重新加载多个本地配置时。以前,整个重新加载过程只会失败,但是现在本地配置将成功重新加载。

在头文件 / 源文件之间切换

为了在头文件和源文件之间切换,CLion 现在提供了一种更有效、更准确启发操作,称为 Go to Header/Source

使用它代替更通用的 IntelliJ 平台 的Go to Related Symbol 操作。

新操作将尝试查找单个目标文件,如果该文件在 500 毫秒内失败,它将显示一个交互式弹出窗口,其中会添加新项(更重要的是在后台计算,因此不会冻结 UI !)。然后,您可以选择要导航到的位置。

Go to Header/Source 搜索依赖于几种启发法,例如,最近切换的文件始终位于列表的顶部,并且具有相同目录中匹配名称的文件的优先级高。

Go to Header/Source

您现在只需要记住一个限制 – 搜索仅限于直接包含者/被包含者,因为这避免来自不同目标的相同符号的干扰。

代码覆盖率

尽管此版本主要集中于错误、技术负债和性能挑战,但仍具有一些新功能。程式碼覆蓋率 –问题跟踪器中最常见的请求之一 – 通过整合 llvm-cov / gcov 工具来解决。

您可以使用 Coverage 运行单元测试和常规配置,只是不要忘记通过特殊的覆盖编译选项。这必须手动完成,因为 CLion 不会自动修改您的 CMake 文件和编译选项。

可以在单独的 Coverage 工具窗口中检查测量结果,也可以在编辑器中直接进行 – 覆盖范围在左间距中用颜色指示。

Code Coverage

阅读我们网络帮助中的详细信息。

C++20 概念

在最后两个发布周期中,我们试验了基于 Clangd 的语言引擎。我们的想法是合并另一个实验分支 – Saar Raz 有 Concepts (概念)支持的 clang 分支 – 并在其之上构建一些独特功能。

这个概念最初是在我们于 2019 年 5 月在特拉维夫举行的 Core C++ 会议上与 Saar讨论的,而现在与 CLion 2019.3,我们已准备好提供此次合作的结果。

在 CLion 中,基于 Clangd 的引擎现在可以帮助正确解析和高亮显示 C++20 Concepts。

还有来自 Clang 的一些代码检查,以及 CLion 团队实施的 Unused Concept 检查。

最令人印象深刻的工作还是代码补全,因为 CLion 现在可以完成受约束的模板类型参数,以及受 std::is_base_of<MyBase, T>std::is_same<Other, T>same_as<T, U> 约束的类型:

Concepts completion

除此之外,还支持 Rename 重构,Go to DefinitionFind Usages 导航操作。您可以在我们的详细博文中找到更多示例,并了解如何在编译器中启用 C++20 Concepts 的支持。

我们要感谢 Saar Raz 在 Clang 所做的出色工作以及与我们团队富有成效的合作!

其他修复和改进

拼写检查器是 IDE 的重要组成部分,它有助于使注释、字符串文字和代码内文档保持正确和更易读。

CLion 2019.3 版本可以拼写检查 CMake 文件和 Doxygen 注释:

Spell Checking

除了 WSL,CLion 现在还支持 WSL2。IDE 中的配置过程保持不变,不过请记住,这两个子系统之间的用户体验有所不同。新版本添加了一个新的检查从构造函数或析构函数调用的虚拟函数,以捕获虚拟函数可能访问尚未初始化或已被破坏的资源的情况:

Microsoft 格式和命名规则作为预定义的代码样式选项也被添加了,从而使用 Google、LLVM、Qt、GNU、Stroustrup 和其他样式增强了列表。由于 CLion 基于 IntelliJ 平台,因此还改善了 VCS ,并解决了许多 UI 问题。对于使用过 CLion 作为 Rust IDE 的用户,我们很高兴与您分享 IntelliJ Rust 插件进行了重大更新(我们计划在其上发布单独的博客文章,因此敬请关注!)。

就是这样!

希望您不会因为阅读过多而感到疲倦,并很高兴现在能尝试一下新版本!

我们很高兴听到您对此版本的任何反馈!

立即下载 CLION

您的CLion团队 JetBrainsThe Drive to Develop