HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

用 Rust 拯救 60 岁老程序员:用 Ada 写了几十年的飞机程序,现在终于可以改用 Rust 了

  • 2023-09-01
    北京
  • 本文字数:2753 字

    阅读完需:约 9 分钟

大小:1.39M时长:08:06
用Rust拯救60岁老程序员:用Ada写了几十年的飞机程序,现在终于可以改用Rust了

针对具有更高安全需求的行业,AdaCore 表示将为其 Rust fork 提供长期支持。

 

对于安全问题较为重视的行业如今都对 Rust 语言抱有兴趣,就连微软最近也承认 Rust 可能是安全系统编程的最佳选项。但对于汽车、航空航天及国防等其他行业来说,开源语言那快速变化的特性又总会让人望而却步。

 

AdaCore 公司专门为这些比较特殊的行业提供软件开发与验证工具。AdaCore 最初诞生时专门支持 Ada 语言——这是一种由美国国防部于上世纪 80 年代初开发的编程语言,用以替代更早那些复杂且极易出错的语言。

 

AdaCore 公司产品经理兼技术策略师 Tony Aiello 表示,“从意愿上讲,人们其实越来越渴望把 Rust 引入那些以安全认证为重点的长期项目当中。我们感受到了这波趋势,也从客户那里了解到不少需求。他们目前的主要顾虑是当下的开源工具发展太快,而能够从开源社区处获取到的专业支持还不完善,导致他们迟迟不敢在 Rust 上迈出这重要的一步。”

 

Aiello 这里说的顾虑,是指客户担心开源选项不能像传统服务商那样在几天内修复 bug,或者帮助企业解决工具链中可能出现的深层技术问题。他承认,大多数开源项目都无法在几天之内响应上报的问题。

 

“但这种快速响应能力在航空航天和国防领域已经非常重要,特别是考虑到此类系统都有很长的使用寿命。我们面对的往往是飞行了几十年的飞机,这些机体上搭载的软件栈也大多稳定运行了几十年。”

 

作为另外一种需要长期支持的应用方向,人们对于 Rust 在嵌入式设备上的表现也抱有兴趣。

很多人都吵着要使用 Rust,对这种新的内存安全语言充满热情。即使是在航空航天和国防等具有严格安全要求的领域,这样一份对于工作的热情和冲劲也同样难能可贵。

 

古老的 Ada 编程语言

 

Ada 源于美国军方的一个计划,旨在整合美军系统中运行着上百种不同的程序设计语言编写的程序。其名是为了纪念埃达·洛夫莱斯(Ada Lovelace)而使用 Ada 命名。

 

也就是说 Ada 早期是美国军方的专用计算机语言,后来逐渐被应用到商业航空、铁路运输、科学航天器等领域。在 Ada 文档中的最佳案例上,其中有一个就是波音 777,该机型的软件 99%是用 Ada 完成,其中制动系统完全用 Ada 来完成。

 


Ada 虽然在军事和航空领域应用广泛,但在商业领域使用场景有限。世界公认的 Ada 专家 Bruce Krell 曾言,自 1983 年 Ada 问世以来,他始终致力于 Ada 编程,专注于国防和航空领域。然而,自 1994 年他离开航空航天领域后,再未有机会使用 Ada。因为他遇到的所有商业工作都以 C++、Java 和 C#完成。他坦言,初入商业世界时,他感受到了一种文化冲击,对 C/C++和零软件工程的综合依赖犹如回到了恐龙时代。

 


至于具体有哪些项目使用了 Ada,从事 Ada 编程和教学 30 年,白发苍苍的 Jim Rogers 在 Quora 上回复道,如你所见 Ada 已被用于构建商用、民用飞机、军用飞机、卫星及其运载火箭的软件。F-22 战斗机的航电软件全部用 Ada 编写。“以前有一位老教授维护了一份清单,但他在 2014 年退休了,这份清单就从此再也没人能维护了。”

从 Ada 到 Rust

AdaCore 综合计算各类操作系统和硬件之间的组合,AdaCore 现可支持 50 多种不同平台。

 

Ada 的语法源自 Pascal,而且跟 Rust 也有很多共同点,特别是内存安全。二者都属于强类型语言,就是说会严格限定存放在变量当中的数据类型,由此防止因类型不匹配而导致的错误。

 

Aiello 还补充道,Rust 的类型强度高于 C 甚至 C++。与 Rust 一样,Ada 也是一种静态类型语言,就是说会在编译时(而非运行时)检查数据类型,从而防止错误的发生。

 

GNAT Pro 是 AdaCore 打造的开发平台,其中包含编译器、链接器、调试器和语言运行时。Aiello 表示,GNAT Pro 订阅用户可以使用 Rust 语言开发出可安全认证的嵌入式应用程序,并享受到 AdaCore 提供的技术支持。

 

Aiello 在采访中解释道,“我们提供所有服务选项并随附保障承诺,这跟大家以往的开源工具链使用体验完全不同。在实践当中,专业开发团队一旦在使用我们的工具时发现 bug,则可立即向我们提交工单,AdaCore 会尽快为您完成修复。”

打造 Rust Fork

AdaCore 之所以选择分叉 Rust,是为了更好地提供长期支持并实现向下兼容性。AdaCore 在其中采用了 Rust 编译器、build 加包管理器(Cargo),以及面向 x86_64 Linux 及各 Linux 交叉目标的调试器(gdb)。该公司表示,GNAT Pro for Rust 25 计划于明年 10 月正式推出,届时将提供与 gprbuild 的全面集成,同时带来先进的 Ada-Rust 双向绑定以支持更多平台。

 

“从某种意义上说,这将是一项相当独特的服务,也把我们与典型的开源软件市场区分开来。在典型的开源市场中,用户往往不清楚旧版本的编译器会出哪些问题。一旦在旧版本中发现 bug,问题可能长期得不到修复。因为每位贡献者都在继续前进、展望未来,所以对以往的缺陷并不是特别关注。这在某些开发环境中有其合理性,但却不适合那些需要长生命周期和稳定认证的应用场景。”

 

AdaCore 还通过 GNAT Pro Assurance 提供 Rust 技术支持。只要客户需要,这项计划就会持续通过分支为整个工具链提供长效支持。

 

为了支持这套 Rust fork,AdaCore 还会定期从更新流中提取反馈,不断听取客户对于功能的具体需求,确定将哪些内容整合到其版本当中。

 

Aiello 总结称,“我们会获取整个代码仓库,为其创建副本,并以此为基础持续更新多个分支。当我们将 Rust 移植到新平台时,也会全面推动支持包的上游化,保证移植成果能够反哺开源社区。

 

对比 Rust,Ada 无疑可以算作一种“上古”编程语言。虽然 Ada 不会消亡,但年轻人也并不愿意去学它。如果 Ada 的应用领域从此逐渐能用 Rust 语言代替,看起来并不是坏事。

 

使用 Ada 的程序员,普遍也都不年轻了。但那些年老的 Ada 程序员看到 AdaCore 支持 Rust,心中却五味杂陈,跟我们想象中的欢欣鼓舞不太相同,他们实际上很担心 Ada 的覆盖范围会进一步收窄。

 

一位退休的 Ada 程序员表示很担忧 Ada 从此会被忽视。“一个典型的例子:当 Rational 在 80 年代中期出现时,他们击败了其他 Ada 开发环境。然后他们开始支持其他语言(都是出于良好的商业原因),对 Ada 支持开始减弱,最终,他们停止发展他们的 IDE, Rational Ada 也交给其他人了。”

 

另一位 Ada 程序员也对此表示赞同,他甚至预测不久后 AdaCore 会更名,以淡化 Ada 的重要性。“他们之前也支持多语言,比如 C 和和 C++ ,但(据我所知)他们从未支持 C 和 C++ 的进步(即对 C 和 C++的发展做出贡献),但现在他们对 Rust 的支持程度显然不一样。”

 

参考链接:

https://github.com/AdaCore/gprbuild

https://en.wikipedia.org/wiki/Ada_(programming_language)

https://thenewstack.io/how-adacores-rust-fork-may-make-the-language-more-adoptable/

http://archive.adaic.com/projects/atwork/boeing.html

https://www.quora.com/Is-it-possible-to-write-code-on-a-plane-with-Ada-programming-language

https://www.reddit.com/r/ada/comments/10xvmka/adacore_joins_the_rust_foundation/

2023-09-01 16:469056

评论

发布
暂无评论
发现更多内容

正在走进现实的“飞行汽车”,能否颠覆地面交通?

脑极体

你问我答:容器平台改造后的安全是如何解决的?

BoCloud博云

云计算 容器 微服务 PaaS 博云

大数据管理:构建数据自己的“独门独院”

华为云开发者联盟

大数据 数据湖

Docker私有化部署gitlab gitlab-runner

Leon

gitlab 持续集成 runner

【基础架构】不同场景下的数据存储技术,你用对了吗?

嘉为蓝鲸

网络 存储 系统 raid 磁盘挂载

鼓舞人心!主席支持数字经济!央行数字货币研究所为世界制定区块链相关国际标准

CECBC

区块链 金融

为什么企业自主开发软件时,都会使用统一的模块化框架式开发平台?

Learun

敏捷开发 程序设计 开发工具 软件设计 技术方案

浅析LR.Net工作流引擎

Philips

敏捷开发 工作流 软件开发流程 开发工具

内存型数据库Redis,是如何实现持久化的?

Zhongger

redis

喷一喷坑爹的面向UI编程

架构师修行之路

实战解读丨Linux下实现高并发socket最大连接数的配置方法

华为云开发者联盟

Linux TCP socket 高并发

又踩Maven的两个坑

xiaoboey

maven Unknown lifecycle phase settings.xml 无效 PowerShell

或许是史上最好的AQS源码分析了,你确定要错过?!

InfoQ_d2212957090d

CPU中的程序是怎么运行起来的

良知犹存

cpu

北京城市副中心将试点法定数字货币

CECBC

数字货币 货币

架构师课作业 - 第十二周

Tulane

[翻译] Go Concurrency Patterns: Pipelines and cancellation[Go并发模式]

卓丁

channel pipeline

云图说 | 一分钟带你扫盲云容器黑话

华为云开发者联盟

容器 节点 集群

深入Spring Security魔幻山谷-获取认证机制核心原理讲解

朱季谦

spring security

深兰科技的征途,AI的赛场与战场

脑极体

使用amoeba实现mysql读写分离

小Q

Java MySQL 编程 程序员

Redis 数据同步机制--主从模式

是老郭啊

redis 主从配置 主从同步 redis主从 主从复制

快来看看!AQS 和 CountDownLatch 有怎么样的关系?

程序员小航

Java AQS 源码阅读 CountDownLatch JUC

LeetCode题解:225. 用队列实现栈,两个队列, 压入 - O(n), 弹出 - O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

产业互联网成区块链与数字货币的分水岭

CECBC

区块链 数字货币 产业互联网

太赞了!华为工程师终于总结出了Linux归纳笔记,提供开放下载

小Q

用 Python 实现一个简易版的 Pong 游戏 (一)

Matrix Chan

Python Turtle Python游戏

一个银行客户经理的“变形记”

华为云开发者联盟

人工智能 金融科技

深入浅出java虚拟机

AI乔治

Java 架构 性能优化 JVM JVM原理

DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第七

华章IT

MySQL 数据库 redis Clickhouse

XSKY全新一代SDS一体机五大场景之存储+灾备

XSKY星辰天合

用Rust拯救60岁老程序员:用Ada写了几十年的飞机程序,现在终于可以改用Rust了_编程语言_核子可乐_InfoQ精选文章