根据帖子,谷歌宣布向Rust基金会提供100万美元的资金,以改善C++和Rust之间的互操作性。
这太巨大了!
为什么,你会问?
C++运行着我们今天看到的世界。
它是用于构建后端和嵌入式系统的最流行的编程语言之一。
根据衡量编程语言受欢迎程度的TIOBE指数,C++在名单上排名第三(仅次于Python和C)。
C++速度快,开销最小,开发人员喜欢它。
但是,C++编程伴随着一个不能不解决的大问题。
这个问题是-内存安全。
看看谷歌2019年报告中关于Android系统中修复的漏洞的情节。
这些漏洞中有60%来自代码中的内存问题。
2019年Android安全公告中修复的关键和高严重漏洞类型(来源:谷歌安全博客)
大多数主要科技公司也是如此:
其中一半是释放后使用错误(当程序在释放后没有清除指向该内存的指针时)。
根据微软Azure的Ryan Levick的说法,2004年,每个与内存相关的错误都花费了该行业约25万美元。
因此,C/C++代码中的这些内存错误总体上花费了科技行业数百万美元!
除了财务成本外,互联网上的恶意行为者还利用这些漏洞,并利用它们来攻击真人。
所以,是的,这也比他们意识到的更深层次地影响了非程序员。
之前已经付出了很多努力来尽量减少C/C++代码中与内存相关的错误。
这些包括:
但是,老实说,它们都没有工作得很好,程序员(人)错误仍然会导致关键代码库中的重大内存错误。
Rust作为现代系统编程语言引入,在编译时引入了类型安全和线程安全。
与C/C++不同,Rust通过其所有权模型防止内存错误(如Dangling指针),而无需垃圾收集器。
消除垃圾收集器还可以消除运行时开销,并使Rust速度超快!
使用超规范的编译器,Rust不会让您编译违反安全和内存管理规则的代码。这大大减少了运行时出现的错误。
想要一个现实世界的例子吗?
npm的授权服务最近在Rust中重写,结果呢?——npm的第一个Rust程序在一年半的生产中引起了0个警报。
事情如此有利可图,以至于微软Azure的首席技术官建议停止用C/C++启动任何新项目!
Mark Russinovich的推文(来源:Twitter/X)
与C/C++赋予开发人员使用锁定机制管理线程安全的责任不同,Rust在编译时再次拥有所有权和类型系统。
这使得在使用Rust构建的并发系统中很难引入错误。
Rust附带一个名为rustc的标准编译器,该编译器使用LLVM作为其后端构建。
这允许在不同架构之间进行更好的优化和交叉编译能力。
与其他语言不同,Rust编译器错误也很复杂,非常有帮助。
作者的推文
这与C++不同,C++有多个编译器可供选择。
Rust附带一个名为Cargo的软件包管理器和构建系统,通过Cargo.toml和Cargo.lock文件使依赖性管理成为小菜一碟。
Cargo从名为crates.io的Rust软件包注册表中自动下载和编译项目依赖项,并简化了整个过程。
Rust有一个名为rustdoc的工具,它从源代码中的注释中自动生成文档。
以下功能也使Rust对编写错误更不容易的代码非常有帮助。
澄清一下,Rust并不完美。
例如,程序员仍然可以编写带有逻辑错误和错误处理错误的代码。
Rust还具有陡峭的学习曲线(具有像Lifetimes这样的语法和原则),拥有稳步增长的开发人员社区(与C/ C++建立的社区不同),并且仍处于与现有系统集成的早期阶段。
但谷歌、AWS和微软等科技巨头正在解决这个问题。
谷歌长期以来一直在研究C++/Rust互操作性工具,例如:
谷歌上Rust的一些其他用例可以看到:
最后,其100万美元的资金是朝着在现有软件系统中使用更多Rust并构建新软件系统的目标迈出的一大步!
虽然C/C++很快就会一事无成,但Rust正在迅速取代一个重要的块。