前言
博主在最近的开发过程当中由于一些原因尝试使用了RustRover。在最一开始,我还在VSCode和RustRover混着使用,而到后来就常驻在RustRover了。本文主要介绍下RustRover这款由JetBrains开发的Rust专用IDE,并且阐述为什么博主将工作环境由VSCode转到RustRover。
什么是RustRover
JetBrains从2000年成立至今,其产品想必大家之前都有接触过,无论是其开发的Java的IDEA,还是Python的PyCharm,C/C++的CLion,都有众多的开发者拥护(还有WebStorm、GoLand等等)。而RustRover则是JetBrains推出的的一款专门针对Rust语言的IDE,支持代码补全、自动添加依赖、运行/调试/测试等等功能。熟悉JetBrains全家桶的开发者估计也会对其界面非常的亲切。
RustRover可以通过上下文感知来进行代码补全,同时支持快速修复、智能重构等功能。
支持快速修复、以及自动添加所需的crate到依赖项列表。
支持显示宏展开,快速访问语言和crate文档,以及“JetBrains式”的搜索功能。
成熟的运行、调试、测试和分析代码界面。
成熟的项目管理以及依赖项管理功能。
Rust IDE的发展历程
多数Rust开发者最开始接触的IDE应该都是VSCode。VSCode对Rust的支持主要是通过社区维护的扩展来实现。如早些时候的Rust for Visual Studio Code,再到当前普遍受到大家使用的Rust Analyzer,提供了全面的Rust代码补全、定义跳转、类型显示、符号搜索、快速修复、测试编译等功能。
2023年9月,VSCode + Rust Analyzer的地位出现了新的挑战者。JetBrains正式推出RustRover,最初发布时,其还存在一些功能局限,且只有单一的商业订阅选项。2024.2版本的更新则是一个重要的里程碑,根据社区的反馈建议,其引入了对Web前端技术和数据库的支持,极大扩展了应用范围。同时提供了个人商业用途和组织商业用途选项,降低了开发者的使用成本。此外,该版本还支持了简体中文UI、代码补全等功能。后续包括fmt等功能的持续改进,使得越来越多的开发者开始关注RustRover。
转向RustRover的契机
最近,我将我的项目开发环境已经基本转为了RustRover。在此之前,由于长期在写C、Rust的项目,我一直是坚定(?)的VSCoder。直到最近,我突然出现了一起诡异的开发卡点:在一个复杂项目里,我新增的依赖项无法被Rust Analyzer索引到了。不知道大家有没有经历过这么一个崩溃的瞬间,你无论敲出这个依赖项的任何一个函数或者结构体,你都无法使用代码补全功能,也无法被Rust Analyzer正确推理出当前由这个依赖项函数所返回的类型,这一刻我像突然不知道怎么走路。
这时我突然想到可以使用RustRover试试。由于博主入职新公司,换了一个mac的开发机,这台新电脑还没有装过RustRover。在以前,我也偶尔会使用IDEA来写Rust,其实是一个很奇妙的事情,不过我非常喜欢其帮忙分析重复项代码、以及智能重构的功能。因此我之前在主力使用VSCode时,偶尔也会使用JetBrains系IDE来帮忙分析我的Rust代码。而这次纯粹是死马当活马医了。没想到的是,使用RustRover非常顺利的索引到了依赖项,这使得我又可以再次骑上快马,写好代码。
投向RustRover的怀抱
在之后,我不得不开始审视我应该选择哪个IDE来进行我后续的开发工作。不得不这么做的原因是IDE真的会吃掉非常大的内存,无论是Rust Analyzer还是RustRover,内存的占用都是以GB为单位的。我们简单比较下VSCode和RustRover的区别。
VScode. VS RustRover
| 维度 | VSCode | RustRover |
|---|---|---|
| 定位 | 轻量级编辑器,依赖扩展 | 专业 IDE,集成全功能 |
| 性能 | 轻量高效,适合低配设备 | 重型应用,对硬件要求高 |
| 功能完整性 | 基础功能足够,高级功能需插件补充 | 内置完整功能,支持 Rust 特性可视化 |
| 扩展性 | 社区扩展丰富,高度自定义 | 官方插件为主,扩展性较弱 |
| 价格 | 完全免费 | 非商业免费,商业需付费 |
| 适合场景 | 个人开发、开源项目、轻量需求 | 企业开发、复杂项目、追求效率 |
| 学习成本 | 低(界面简洁,配置灵活) | 高(功能复杂,需适应 IntelliJ 体系) |
VSCode本身被开发者们还是定义为轻量级编辑器,扩展由你自由选择。这样的好处就是,当你不需要太多插件功能时,你能够轻量的开发并运行你的IDE,你可以进行随意组合。但是坏处就是有时把这些插件全都加上,我觉得会变得更加的笨重。同时作为插件扩展,无法像RustRover一样,能够有更深入定制化的功能融合。但同时,RustRover的功能完整性,也导致RustRover即使你在开发小型项目时,也得吃你那么多的内存,有更高的硬件性能要求。
我最终选择了RustRover,综上来说,当前我的开发机能够支持我运行RustRover,同时我的项目比较复杂,我无法接受Rust Analyzer有时候的这种不确定性(刚刚提到的事故,我其实碰到过2次以上)。另外RustRover还有吸引我的地方,其实前面也有提到:
- 代码分析:可以实时帮你分析重复的代码段,对于无情重构选手来说非常有益;
- 智能重构:选中某一代码段,可以自动帮你重构为一个方法。因为我是无情重构选手;
- 依赖项管理:可以自动添加依赖项这个功能说实话只能算锦上添花,不过当时第一次用到这个功能的时候还是有小惊喜在的。而最好用的功能应该是无用依赖项分析的这个能力。如果是VSCode,你可能需要额外去安装工具来进行分析。
- 成熟的Rust IDE界面:比如鼠标悬浮自动显示宏展开(VSCode你得打开执行面板),覆盖率分析视图等等。甚至扩展插件在RustRover中也有VSCode不一样的UI适配等小惊喜。
没有银弹
RustRover并非是当前Rust IDE的最佳方案,例如前面所说,它可能会吃掉你环境更多的内存。同时一些VSCode会遇到的问题,在RustRover中也会遇到,例如有时候无法正确识别build的out_dir路径,调试时无法正确的停留在断点处,代码分析也时常会误报等等,这些仍然是Rust IDE仍然可以优化的空间(别吃那么多硬件资源也是好的)。还有,像自动添加依赖项这个有些炫技的小技巧,也仅支持“流行的”crate,其实也说明了RustRover的一些功能也并非是万能好用的。
结语
这就是本篇内容的所有分享,分享此篇主要还是希望能够让更多开发者了解到,Rust IDE已经并非只有VSCode + Rust Analyzer这一套开发方案。RustRover发展至今已经足够好用,并且在一些场景可能更适合你当前正在开发的项目。如果有对上述提到的RustRover中的一些优点感兴趣的朋友,不妨尝试使用起来:)Rust IDE到目前也还是有极大发展的空间,希望开发生态能够越来越好,让更多开发者享受到便利。