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

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 被设计为一种高性能、强大且安全的编程语言,这正是关键任务软件所需要的。

相关文章:

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

软件无处不在,从手表、烤箱、汽车,甚至可能是牙刷中都有它的身影。更重要的是,软件控制着关乎生死的系统,如飞机、医疗设备、电网系统和银行基础设施等。如果软件工程师稍有疏忽,软件缺陷和漏洞可能导致数十亿美元的损…...

Linux特权组全解析:识别GID带来的权限提升风险

组ID(Group ID,简称 GID)是Linux系统中用来标识不同用户组的唯一数字标识符。每个用户组都有一个对应的 GID,通过 GID,系统能够区分并管理不同的用户组。 在Linux系统中,系统用户和组的配置文件通常包括以…...

安卓/ios脚本开发按键精灵经验小分享

1. 程序的切换 我们经常碰到这样的需求:打开最近的应用列表,选取我们想要的程序。但是每个手机为了自己的风格,样式都有区别,甚至连列表的滑动方向都不一样,我们很难通过模拟操作来识别点击,那么我们做的只…...

机器学习在癌症分子亚型分类中的应用

学习笔记:机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题:Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊:Cancer Cell发表时间:20…...

DeepSeek本地部署保姆级教程

由于DeepSeek近期遭受攻击,又加上用户访问量较大,导致总是服务不可用,让人十分窝火。有没有好的解决办法呢?答案是自己在电脑端部署一套,这样就不用和别人抢着用了。另外本地部署的好处还有保护隐私与减少延迟。 如果…...

无惧户外复杂环境,安科瑞 AKH-0.66/K-HW 开口式互感器准确测流

​安科瑞 吕梦怡 18706162527 1.产品特点 AKH-0.66/K-HW 系列互感器具有防水功能,可在户外使用,切面端口采用橡胶垫环绕可有效阻止雨水进入。互感器采用注塑技术,将互感器线圈直接在模具中进行注塑,同时二次侧引线采用防水端子…...

玩转Docker | 使用Docker部署httpd服务

玩转Docker | 使用Docker部署httpd服务 前言一、准备工作环境确认检查操作系统准备网站目录和配置文件二、拉取httpd镜像三、运行httpd容器运行容器命令检查容器状态四、验证httpd服务浏览器访问测试错误排查五、容器管理与维护查看容器状态停止和启动容器更新网站内容和配置六…...

MacOS 安装NVM

MacOS 安装NVM 方法一:使用Homebrew安装nvm 打开终端(Terminal),输入以下命令安装Homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装nvm…...

Qt 数据库SQLite 使用【01】基本功能

1.开发背景 Qt 开发过程中难免需要存储数据,可以选择保存到本地文件,但是查找比较麻烦,所以就有了数据库,主要是方便查找数据,增删改查等操作,而 SqLite 属于数据库中轻量级的存在,适合本地数据…...

http状态码:请说说 503 Service Unavailable(服务不可用)的原因以及排查问题的思路

503 Service Unavailable(服务不可用) 是一种HTTP状态码,表示服务器当前无法处理请求,通常是由于临时性原因导致服务中断。以下是它的常见原因和排查思路: 一、503错误的常见原因 1. 服务器过载 场景:服务…...

58页PPT学习华为面向业务价值的数据治理实践

目录 1. 正文解读... 1 2. 华为数据质量管控的质量度量框架是怎样的?... 2 3. 如何在企业中实施类似华为的数据质量管控...

电脑开机提示按f1原因分析及终极解决方法来了

经常有网友问到一个问题,我电脑开机后提示按f1怎么解决?不管理是台式电脑,还是笔记本,都有可能会遇到开机需要按F1,才能进入系统的问题,引起这个问题的原因比较多,今天小编在这里给大家列举了比…...

DeepSeek模型构建与训练

在完成数据预处理之后,下一步就是构建和训练深度学习模型。DeepSeek提供了简洁而强大的API,使得模型构建和训练变得非常直观。无论是简单的全连接网络,还是复杂的卷积神经网络(CNN)或循环神经网络(RNN),DeepSeek都能轻松应对。本文将带你一步步构建一个深度学习模型,并…...

ProxySQL实现mysql8主从同步读写分离

一、ProxySQL基本介绍 ProxySQL是 MySQL 的高性能、高可用性、协议感知代理。 简单介绍下ProxySQL及其功能和配置,主要包括: 最基本的读/写分离,且方式有多种;可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由&…...

Day38-【13003】短文,树的基本概念,用广义表表示树

文章目录 第五章 树与二叉树第一节 树的基本概念用广义表,也就是集合表示发,来表示树 第五章 树与二叉树 第一节 树的基本概念 因为树是一种层次结构,所以它是一种非线性结构,在实际应用中具有广泛的用途。 日常生活中&#xff…...

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出,在同一时间不能有多个地方写入,因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI,轮询PLC指令 在锁内耗时,就是TCP读写的实际耗时为5-8ms,在主VI六个…...

MySQL第四次作业

新建数据库 新建表 student表 2.course表 3.sc表 修改Student 表中年龄(sage)字段属性,数据类型由int 改变为smallint alter table student modify sage smallint; 为Course表中Cno 课程号字段设置索引,并查看索引 create index index_cno on cou…...

栈和队列的实现(C语言)

1:栈 1:概念和结构 栈:一种特殊的线性表,其只运行在固定的一段进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。 压栈:在栈里面插入…...

(四)QT——QMainWindow——界面菜单设计

目录 前言 QMainWindow 结构 菜单栏 工具栏 状态栏 停靠部件 核心部件 UI 文件创建窗口 总结 前言 QMainWindow 是 Qt 框架中的一个类,主要用于创建桌面应用程序的主窗口。它提供了一个标准的窗口布局,包含菜单、工具栏、状态栏和中心小部件等功…...

MySQL InnoDB引擎 脏读、不可重复读和幻读

在 MySQL 的 InnoDB 存储引擎中,脏读、不可重复读和幻读是并发事务操作时可能出现的数据不一致问题,不同的事务隔离级别对这些问题有不同的处理方式。 1、脏读(Dirty Read) 定义:一个尚未提交的数据变更的事务&#…...

初阶数据结构:树---堆

目录 一、树的概念 二、树的构成 (一)、树的基本组成成分 (二)、树的实现方法 三、树的特殊结构------二叉树 (一)、二叉树的概念 (二)、二叉树的性质 (三&#…...

判断192.168.1.0/24网络中,当前在线的ip有哪些

需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 [rootopenEuler ~]# cat 1.sh #!/bin/bash for ip in $(seq 1 254); do ping -c 1 -W 1 "192.168.1.$ip" > /dev/null 2>&1 if [ $? …...

初始JavaEE篇 —— Spring Web MVC入门(上)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 RequestMappingg 注解介绍 Postman的介绍与使用 PostMapping 与 GetMapping 注解 构造并接收请求 接收简单参数 接收对象…...

STM32的HAL库开发-通用定时器输入捕获实验

一、通用定时器输入捕获部分框图介绍 1、捕获/比较通道的输入部分(通道1) 首先设置 TIM_CCMR1的CC1S[1:0]位,设置成01,那么IC1来自于TI1,也就是说连接到TI1FP1上边。设置成10,那个IC1来自于TI2,连接到TI2FP1上。设置成…...

nodejs:express + js-mdict 网页查询英汉词典,能播放.spx 声音

向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict , 实现在线查询英语单词,并能播放.spx 声音文件 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ …...

【蓝桥杯嵌入式】5_PWM

全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、PWM占空比可调 以往届的赛题举例 将PA6、PA7分别设置为TIM16_CH1和TIM17_CH1 打开TIM16和TIM17,并设置PWM输出模式及其频率 设置占空比初…...

ESM-IF1:从AF2的预测结构中学习逆折叠

作者研究了从蛋白质骨干原子坐标预测蛋白质序列的问题。迄今为止,机器学习解决此问题的方法一直受限于可用的实验测定蛋白质结构的数量。作者使用AlphaFold2为1200万个蛋白质序列预测的结构,从而将训练数据扩充了近三个数量级。相比现有方法,…...

kafka服务端之控制器

文章目录 概述控制器的选举与故障恢复控制器的选举故障恢复 优雅关闭分区leader的选举 概述 在Kafka集群中会有一个或多个broker,其中有一个broker会被选举为控制器(Kafka Controler),它负责管理整个集群中所有分区和副本的状态。…...

Redis双写一致性(数据库与redis数据一致性)

一 什么是双写一致性? 当修改了数据库(MySQL)中的数据,也要同时更新缓存(redis)中的数据,缓存中的数据要和数据库中的数据保持一致 双写一致性,根据业务对时间上的要求,…...

feign Api接口中注解问题:not annotated with HTTP method type (ex. GET, POST)

Bug Description 在调用Feign api时,出现如下异常: java.lang.IllegalStateException: Method PayFeignSentinelApi#getPayByOrderNo(String) not annotated with HTTPReproduciton Steps 1.启动nacos-pay-provider服务,并启动nacos-pay-c…...

开源2+1链动模式AI智能名片S2B2C商城小程序:突破流量与创意困境的新路径

摘要:本文深入剖析当前互联网行业中流量集中于巨头以及创意边际效应递减的困境,并探讨开源21链动模式AI智能名片S2B2C商城小程序在应对这些困境时所展现的独特优势与应用策略。通过对行业现状的分析以及该小程序功能特点的研究,旨在为企业在艰…...

python编程-内置函数compile(),exec(),complex(),eval()详解

1. compile() 函数 ‌用途‌:将一个字符串源代码编译为字节码对象,这样可以直接被Python解释器执行,或者通过exec()或eval()函数来执行。 ‌参数‌: source:一个字符串或AST(抽象语法树)对象&am…...

websocket自动重连封装

websocket自动重连封装 前端代码封装 import { ref, onUnmounted } from vue;interface WebSocketOptions {url: string;protocols?: string | string[];reconnectTimeout?: number; }class WebSocketService {private ws: WebSocket | null null;private callbacks: { [k…...

解锁C/C++:链表数据结构的奇幻之旅

目录 一、引言二、链表基础概念2.1 链表是什么2.2 链表的类型三、C 语言实现链表3.1 定义链表节点3.2 创建链表3.3 链表操作3.3.1 遍历链表3.3.2 插入节点3.3.3 删除节点3.3.4 查找节点3.4 完整示例代码四、C++ 实现链表4.1 定义链表节点类4.2 创建链表4.3 链表操作4.3.1 遍历链…...

x64、aarch64、arm与RISC-V64:详解四种处理器架构

x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...

nuxt3中报错: `setInterval` should not be used on the server.

那是因为在后端渲染没有浏览器的执行环境,一些浏览器环境提供的对象和方法都无法使用,代码判断下就行。 if (import.meta.client) {setInterval(() > {}, 1000) }Import meta Nuxt API...

python编程-集合内置函数和filter(),集合常见操作

在Python中,列表、集合、字典是三种常用的数据结构,它们各自拥有一些内置函数,用于执行各种操作。 一、列表的常用内置函数 #‌1、append(obj)‌: 在列表末尾添加新的对象。list_a [1, 2, 3] list_a.append(4) print(list_a) # 输出: [1,…...

三极管的截止、放大、饱和区

三极管的几个区,都有什么用: 截止区:晶体管不导通,用于开关电路的“关”状态。 放大区:晶体管用于信号放大,集电极电流与基极电流成正比。 饱和区:晶体管完全导通,用于开关电路的“…...

python爬虫--简单登录

1,使用flask框架搭建一个简易网站 后端代码app.py from flask import Flask, render_template, request, redirect, url_for, sessionapp Flask(__name__) app.secret_key 123456789 # 用于加密会话数据# 模拟用户数据库 users {user1: {password: password1}…...

苹果公司宣布正式开源 Xcode 引擎 Swift Build145

2025 年 2 月 1 日,苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生:2014 年,苹果在全球…...

齿轮减速机和平行轴减速机有何区别?

减速机是传动系统中重要的组成部分,常用的减速机有四大系列,分别是平行轴减速机、同轴减速机、直角减速机和齿轮减速机。那么大家知道齿轮减速机和平行轴减速机投什么区别吗? 齿轮减速机的轴不一定是平行的,还可能存在相交轴或交错…...

基于Hexo实现一个静态的博客网站

原文首发:https://blog.liuzijian.com/post/8iu7g5e3r6y.html 目录 引言1.初始化Hexo2.整合主题Fluid3.部署评论系统Waline4.采用Nginx部署 引言 Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目,旨在提供一个简单、快速且易于扩展的静态博客生…...

MIT6.824 Lecture 1-Introduction

balance:性能和容错 Faulty tolerance: Availablity、Recoverability、NV storage(非易失性存储,比较贵)、Replication(多个数据副本) consistency: Put(key,…...

【Redis实战】投票功能

1. 前言 现在就来实践一下如何使用 Redis 来解决实际问题,市面上很多网站都提供了投票功能,比如 Stack OverFlow 以及 Reddit 网站都提供了根据文章的发布时间以及投票数计算出一个评分,然后根据这个评分进行文章的展示顺序。本文就简单演示…...

1Panel应用推荐:WordPress开源博客软件和内容管理系统

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…...

GGML、GGUF、GPTQ 都是啥?

GGML、GGUF和GPTQ是三种与大型语言模型(LLM)量化和优化相关的技术和格式。它们各自有不同的特点和应用场景,下面将详细解释: 1. GGML(GPT-Generated Model Language) 定义:GGML是一种专为机器学习设计的张量库,由Georgi Gerganov创建。它最初的目标是通过单一文件格式…...

MySQL主从复制原理及工作过程

一、主从复制原理 1、MySQL将数据变化记录到二进制日志中; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中; 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库 详细步骤&…...

Unity VideoPlayer播放视屏不清晰的一种情况

VideoPlayer的Rnder Texture可以设置Size,如果你的视屏是1920*1080那么就设置成1920*1080。 如果设置成其他分辨率比如800*600会导致视屏不清晰。...

发布:大彩科技DN系列2.8寸高性价比串口屏发布!

一、产品介绍 该产品是一款2.8寸的工业组态串口屏,采用2.8寸液晶屏,分辨率为240*320,支持电阻触摸、电容触摸、无触摸。可播放动画,带蜂鸣器,默认为RS232通讯电平,用户短接屏幕PCB上J5短接点即可切换为TTL电…...

Oh3.2项目升级到Oh5.0(鸿蒙Next)具体踩坑记录(一)

目录 1.自动修复部分 Cause: The project structure and configuration require an upgrade. Solution: 1. Use Migrate Assistant to auto-upgrade the project structure and configuration. 2. Manually upgrade the project structure and configuration by following th…...