编程语言比较
为什么团队转向 Rust
Rust 的情况有两句话:没有垃圾收集器的内存安全,以及将所有类别的运行时故障转变为构建故障的编译器。其背后的案例是制度性的:包括 Linux 内核(自 2022 年起)、微软的 Windows 组件和 Firefox 等浏览器代码等主要项目都采用 Rust,正是因为它可以防止错误、释放后使用、缓冲区溢出和数据竞争,而正是这些类在 C 和 C++ 中产生了数十年的 CVE。但诚实的采用是有选择性的:当服务寿命长、安全关键或处于热门路径时,迁移会带来回报;而当小型 CRUD 应用程序在借用检查程序上花费数周时间而不是获得回报时,迁移就不会带来回报。使用 Rust 取得成功的团队往往会首先在边界上采用,其中它的保证和 FFI 故事最有效。
要点
- 安全声明并不理想:Rust 在编译时消除了释放后使用和缓冲区溢出类,并且其 RFC 跟踪的演变异常严格。
- 采用锚点具有可信度:Linux 内核支持、Windows 组件、Firefox 组件以及curl 的实验性 Rust 添加都将其置于 C 历史地位。
- 无 GC 系统代码意味着尾部无需担心暂停按钮:面临严格延迟期限的服务不会等待收集器扫描。
- 类型系统是一种建模工具:状态机、解析文档和不变量存在于枚举和类型中,而不是运行时崩溃。
- 生态系统展现了它的青春:crates.io 是精简且年轻的,因此依赖风险和维护流失仍然需要您自己的安全审查。
- Rust 采用在存在边界的情况下会成功:绑定 C 库、替换热循环、强化解析器。当它必须大规模取代一切时,随之而来的是鞭打。
- Cargo 确实是一流的工具链:测试、文档、基准测试和依赖管理以很少有生态系统能够匹配的方式随编译器一起提供。
- 招聘现实检查:Rust 开发人员比较稀缺,而且通常更喜欢系统工作。具有简单 CRUD 需求且没有系统授权的团队不应该采用 Rust 来流行。
一线手记
两句话吸引了我:没有垃圾收集器的内存安全,以及将最糟糕的事件类转变为构建错误的编译器。我仍然只承诺在已经存在边界的情况下采用 Rust。
常见问题
Rust 真的内存安全吗?
是的,为了安全 Rust:通过标记和审查不安全块和 FFI 边界,借用检查器可以防止在编译时主导 C/C++ CVE 源的错误类别。
Rust 会在所有地方取代 C 吗?
不会。数十年的 C 基础设施、嵌入式工具链和内核代码不会消失,Rust 采用的目标是安全最重要的边界。
Rust 什么时候是一个坏主意?
小型 CRUD 应用程序、一次性脚本和没有系统要求的团队:借用检查器斜坡和招聘利基成本比安全性为您节省的成本还要高。
Linux内核为什么采用它?
因为 use-after-free 和 race 类的内核 bug 永远不会停止出现。在编译时阻止它们的语言是最便宜的长期补丁。
Kinetikatech 如何在编程语言比较方面为您提供帮助
这类问题我们已处理过数百次:用于系统工作、脚本编写和服务的语言,比较生产中实际重要的内容:安全保证、原始速度、可以雇用的人以及部署和修补所产生的服务的痛苦程度。通过服务器管理和网站维护,您将获得完整闭环:我们评估、实施、全天候值守,并在关键时刻 30 分钟内响应。