过去两年,Rust程序语言风头正劲,而C/C++ 则略显疲态。Google近日分享了他们将项目从Go和C++ 程序代码迁移至Rust的经验,结果令人惊讶:Rust开发者的效率竟然可以达到C++ 团队的两倍。

Google Android平台工具的工程总监Lars Bergstrom在伦敦举行的Rust Nation英国峰会上分享了这一消息。

过去几年,业界对于Rust的安全性和可靠性一直存在疑虑。Bergstrom指出,由于担心“unsafe”这个关键字,许多人认为使用C++ 更为稳妥。然而,随着人们逐渐意识到非内存安全语言带来的挑战,以及美国等国家政府将目光投向软件在关键基础设施扮演的角色,这种观念正悄然发生改变。

Bergstrom强调,如今美国等国家政府都愈发重视软件在关键基础设施中的作用,而绝大多数大型程序代码库的安全漏洞都源于内存安全问题。由于Rust程序代码在恰当的使用下能有效避免此类问题,内存安全俨然成为了国家安全议题之一。

微软Azure首席技术官Mark Russinovich早在2022年9月就建议新项目使用Rust取代C/C++。如今,这种趋势正从全新项目扩展到老旧程序代码的重写。今年早些时候,微软号召开发人员协助将C# 程序代码移植至Rust。网络安全研究小组 (ISRG) 的Prossimo项目也正致力于用Rust重写关键库的核心开源部分 (例如NTP、DNS、TLS),以提升内存安全性。

当然,并非所有人都认同这一趋势。C++ 创始人Bjarne Stroustrup认为,通过适当的工具,C++ 也可以实现与Rust等内存安全语言相同的保障,且成本更低。美国国家网络总监办公室发布的软件安全报告也引来了一些评论,指出内存安全只是软件安全挑战的一部分,不应该被过分夸大。卡内基梅隆大学软件工程研究所强调,每种程序语言都各有优劣,选择应以适合项目为原则。

然而,Google等Rust拥护者的实践案例则反驳了Stroustrup关于成本优势的说法。Bergstrom表示,将Go程序代码 (被认为是内存安全但性能较低) 转写成Rust的过程中,Google取得了显著的成效,“迁移过程所需团队规模和时间几乎与Go开发相当,并没有降低效率。更重要的是,内存使用率降低了,漏洞率也随之减少,程序代码正确性得到提升。”

更令人惊讶的是,将C++ 程序代码迁移至Rust的效率提升更加明显。

“在所有案例中,用Rust构建和维护服务的所需工作量都减少了一倍以上,”Bergstrom指出,“这对我们来说意义重大,因为C++ 程序代码的维护成本很高,需要庞大的团队投入大量精力,并且存在诸多风险。”

Bergstrom还提到,Google正进行类似的Java到Kotlin的迁移项目。根据内部匿名调查,两种情况下开发者掌握新语言并达到原有开发效率所需的时间大致相同。大约三分之一的开发者在两个月后,以及一半的开发者在四个月后表示他们在新语言中的工作效率与旧语言相当。

此外,超过一半的开发者认为Rust程序代码更容易审查。Bergstrom分享了一个调查中最令团队惊讶的问题:“人们对自己团队的Rust程序代码的正确性有多么自信?” 调查结果显示,有85%的开发者给出了肯定的答复。Bergstrom表示,这是一个非常高的数字。