编译丨诺亚
出品 | 51CTO技术栈(微信号:blog51cto)
谷歌的工程总监Lars Bergstrom在伦敦的Rust Nation UK大会上分享了谷歌将Go或C++编写的项目迁移到Rust语言的经验。
他表示,使用Rust的开发团队相比于使用C++的团队,在工作效率上大约高出两倍。
早在2016年Dropbox和2018年Figma就已经开始尝试用Rust重写代码以确保内存安全,但当时业界对于Rust在生产力和语言可靠性方面的疑虑并未完全消除。
然而随着时间推移,尤其是在软件安全性日益成为国家基础设施关键问题的大背景下,非内存安全语言带来的挑战引起了更广泛的认识转变。美国和其他国家政府机构也强调了软件中内存安全的重要性。
微软Azure首席技术官Mark Russinovich在2022年9月提出,原本可能选择C/C++进行开发的软件项目应考虑改用Rust,这一建议不仅适用于新项目,还扩展到对旧的、非内存安全语言编写的代码进行重构的需求。
今年早些时候,微软甚至发出了求助呼吁,希望开发者协助将自家的C#代码移植至Rust,并且互联网安全研究组(ISRG)的Prossimo项目正在将一些核心开源组件,如NTP、DNS、TLS等重要库重写为Rust版本,旨在提高内存安全性。
尽管C++之父Bjarne Stroustrup以及其他人士对此有所抵触,Stroustrup在回应2022年11月NSA关于内存安全的备忘录时指出,通过合适的工具,C++也能在较低成本下达到与Rust相当的内存安全保证。
然而,像谷歌这样的Rust实践者提供的反例则显示,坚持使用现有C++基础设施的成本优势可能并不成立。
谷歌内部将Go代码转换为Rust的过程中,发现重构后的项目开发所需的时间和人力并没有增加,反而显示出诸多优点。
Bergstrom提到,将Go代码重写为Rust时,同等规模的团队可以在相同时间内完成工作,这意味着从Go转向Rust并不会导致生产力下降;相反,他们观察到了Rust代码带来的好处,比如服务内存使用量减少以及随着时间推移,用Rust重写的服务缺陷率逐渐降低,从而提高了程序正确性。
更重要的是,相较于C++代码转为Rust的情况,Rust开发者的生产效率优势更为明显。
此外,各方观点也指出,虽然内存安全性是软件安全的重要组成部分,但并非所有安全问题都能归结于内存安全。
卡内基梅隆大学软件工程研究所等机构强调,所有编程语言都有其权衡之处,选择何种语言应取决于它是否适合特定应用场景。
某些情况下,强调内存安全的语言可能会牺牲性能和时间要求,而且无论选用哪种语言,开发者都必须掌握正确的语法、语义、结构、习惯用法及工具,否则可能会出现其他类型的漏洞或缺陷。
尽管如此,Rust通过避免内存相关的安全隐患,在许多场景下被视为提升软件安全性的有效手段之一。