当前位置: 首页 > article >正文

Rust 语言:变革关键任务软件的新力量

软件无处不在,从手表、烤箱、汽车,甚至可能是牙刷中都有它的身影。更重要的是,软件控制着关乎生死的系统,如飞机、医疗设备、电网系统和银行基础设施等。如果软件工程师稍有疏忽,软件缺陷和漏洞可能导致数十亿美元的损失,甚至危及生命。2019 年,由于软件故障,两架波音 737 Max 飞机在数月内坠毁,造成 300 多人死亡,这导致所有 737 Max 飞机停飞一年半以上,直接成本估计达 200 亿美元,间接成本飙升至 600 亿美元以上。当涉及必须确保正确无误的软件时,仅依靠工程师编写无缺陷和漏洞的代码是远远不够的。在本文中,我们将探讨 Rust—— 一门极度关注性能和安全性的语言,如何彻底改变关键任务软件,以及为何企业急于从关键系统中淘汰不安全的语言。

Rust 的起源故事

Rust 的诞生源于解决实际问题。其创造者 Gren 厌倦了每次因软件故障导致电梯停运时,都要爬 21 层楼梯。于是,他心中萌生了设计一种更强大编程语言的想法。经过多年努力,他设计出了 Rust,最初的设想是让电梯能持续稳定运行,而这一理念在许多其他需要可靠软件的领域也被证明至关重要。

关键任务软件

关键任务软件对组织或政府的运营至关重要,必须高度可靠和安全,包括主要金融交易基础设施、供应链管理系统和医疗保健系统等。如果这些应用程序出现故障或中断,可能会导致严重后果,如财务损失、数据丢失或泄露以及声誉受损。2012 年 8 月 1 日,纽约证券交易所的主要做市商骑士资本集团部署了一个新的交易算法,然而,部署后不久,一场灾难性的软件故障导致该算法在短短 45 分钟内错误地快速执行了大量意外交易,造成了约 4.4 亿美元的损失,最终导致该公司濒临破产。

还有一类更敏感的关键任务软件,即安全关键软件,包括军事防御系统、核电站控制系统、航空控制系统、工业自动化和汽车安全系统等。这些系统一旦出现故障或中断,可能会导致灾难性的环境破坏、人员重伤甚至死亡。20 世纪 80 年代推出的 Theak 25 新型放射治疗机,由于软件中的竞态条件,偶尔会向癌症患者输送过量的辐射,导致严重灼伤,至少有 6 起记录在案的患者死亡事件。这些事件促使医疗设备监管发生变革,对软件验证和确认标准提出了更严格的要求。

标准、资质和认证

安全关键软件和关键任务软件必须符合严格的标准,有数百条具体规则和指南,以确保软件按预期运行。这些标准来源广泛,国际标准化组织(ISO)和国际电工委员会(IEC)是国际标准化领域的两大主要机构。针对航空、医疗设备和金融系统等不同类别制定了不同标准,每个标准都对故障情况下的保障措施和保证程度有不同要求。由于关键任务软件的严格审查过程和高风险性质,多年来,软件行业用于构建此类软件的编程语言已缩减至寥寥几种。20 世纪 80 年代初,美国国防部开展了有史以来最广泛、最昂贵的语言设计工作,创建了 Ada 语言,专门用于关键任务应用。Ada 语言以第一位程序员 Ada Lovelace 命名,取代了国防部多年来在这类系统中使用的 450 多种语言。该语言设计注重极强的类型系统、显式并发,并依靠编译器来发现错误。但 Ada 也并非完美无缺,它在大学中并不常见,年代久远,工具和支持有限,而且由于应用场景狭窄,学习 Ada 的吸引力不如其他语言,许多 Ada 开发者正在退休,却没有足够的新开发者对该语言感兴趣,以维护或继续开发这些系统。

替代 Ada 的方案

除了 Ada,编写关键任务软件的另一种选择是使用 C 或 C++,然后由独立机构或组织进行评估和批准。然而,这个代码认证过程耗时且成本高昂。例如,英国政府在 20 世纪 90 年代成立的汽车行业软件可靠性协会,为汽车、国防和航空电子领域使用 C 和 C++ 设定了标准。其最新版本的 C 标准有 200 条规则和 21 条指南,C++ 标准有 175 条规则和 4 条指南。为达到汽车和航空领域最严格的标准,认证每行代码可能需要 2 到 4 小时。目前开发关键任务软件的现实并不理想,一方面,使用 Ada 面临人才短缺问题;另一方面,使用 C 或 C++ 则伴随着繁琐、缓慢且昂贵的认证过程。

Rust 在关键任务软件中的角色

Rust 的出现带来了新的希望,它有望兼得两者之长,将 Ada 的安全性和全面性与 C 和 C++ 的广泛应用相结合。Rust 天生具有极高的安全性,实际上,在 C 和 C++ 程序认证中使用的三分之二的 MISRA 规则,对 Rust 根本不适用。Rust 的应用也在迅速普及,开发者热衷于用 Rust 编码,它与 C 和 C++ 足够相似,开发者可以快速切换,并且 Rust 与 C 和 C++ 的互操作性极佳,因此可以用 Rust 编写新代码来扩展旧代码,而不会产生复杂问题。这就是为什么许多公司开始在关键任务项目中采用 Rust。

如今,一些重大障碍已被清除,例如,今年 Feris Systems 发布了 Feros Scine,这是一款经过认证的 Rust 编译器工具链,终于为 Rust 在汽车和工业领域的关键任务软件应用打开了大门。同样,为 Ada 编程语言创建了经过认证的 ID 和工具套件,并已扩展到 C 和 C++ 领域的 Ada Core 公司,现在也开始接纳 Rust。去年,他们增加了对 Rust 的支持,目前已向部分客户提供早期访问,预计在 2024 年第三季度正式发布。Feris Systems 和 Ada Core 都是 Rust 基金会的银牌成员,对 Rust 的广泛应用有着既得利益,两家公司都计划为其他需要安全认证的领域提供支持,包括航空电子、铁路和航天工业等。

由于这些监管障碍的消除,我们现在看到 Rust 正被用于关键任务系统。也许使用 Rust 的最大企业是雷诺的电动汽车部门 Amper,他们正与谷歌积极合作开发一款用于软件定义汽车的新操作系统,这类汽车可以通过软件更新不断改进。雷诺计划最早明年交付搭载 Rust 软件的汽车,并发现使用 Rust 能够降低成本、提高安全性并加快开发速度。其他公司,如 Oxide OS,也将 Rust 视为软件定义汽车的未来。与 Rust 招聘人员的交流也证实,许多汽车制造商正在迅速采用 Rust。这是个好消息,因为 Rust 被设计为一种高性能、强大且安全的编程语言,这正是关键任务软件所需要的。


http://www.kler.cn/a/536121.html

相关文章:

  • BUU28 [GXYCTF2019]BabySQli1
  • OSPF基础(2):数据包详解
  • SpringBoot开发(五)SpringBoot接收请求参数
  • MySQL
  • Beans模块之工厂模块注解模块CustomAutowireConfigurer
  • 25.2.5学习记录
  • java中equals和hashCode为什么要一起重写
  • 探索Deepseek核心模型:AI领域的新星
  • 【C++】C++概述
  • Node.js中http模块(二)
  • 一文吃透!DataStage 全面概述与核心知识要点大公开
  • 存储可靠性:从基于磁盘的RAID到分布式纠删码(EC),多副本
  • 计算机网络-SSH基本原理
  • 书籍《新能源汽车动力电池安全管理算法设计》和《动力电池管理系统核心算法》脑图笔记
  • Maven 构建命令详解
  • leetcode刷题日记 1
  • anaconda使用
  • apisix网关ip-restriction插件使用说明
  • Spring Boot实现多数据源连接和切换
  • Linux Windows macOS如何安装Ollama
  • QQ自动发送消息
  • TypeScript 快速上手 ------- 学习笔记分享
  • SMU winter 2025 Personal Round 2
  • RabbitMQ:windows最新版本4.0.5安装方案
  • Rust unresolved import `crate::xxx` 报错解决
  • C++11—可变参数模板