写点什么

用 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:469774

评论 2 条评论

发布
用户头像
Rust是針對C/C++的Memory Unsafe而提出的一種語言。 Rust根本沒有ADA對計算標準的那種管控和維護有任何的顧及, 所以Rust根本沒有ADA應付Safty Critical的功能的。 Rust被Adacore更大可能是因爲系統編程現在很多時候涉及C, 然後ADA要Bind到C才可能聯絡到系統界面。 Rust只不過在這裏是取代了C的位置, 如果ADA要注重存貯安全性, ADA目前有Spark副集
2024-12-22 14:10 · 中国香港
回复
用户头像
Rust 是針對C/C++的, ADA 那種嚴謹的計算標準化的概念在Rust這個語言裏根本沒有任何顧及
2024-12-22 13:59 · 中国香港
回复
没有更多了
发现更多内容

盘点JavaScript哪些常用的字符串对象

你好bk

JavaScript 大前端 字符串 基础知识 12月日更

你了解集合?那你倒是给我说说啊!【1】

XiaoLin_Java

12月日更

字典树之旅02.Trie 的标准实现

极客志

自然语言处理 数据结构 算法 Trie 字典树

技术人创业过程中应保持开放的心态

wood

创业 技术 28天写作

模块1

Geek_59dec2

如何用Python发送告警通知到钉钉?

老表

Python Linux 守护进程 跟老表学云服务器

来来来,手摸手写一个hook

全栈潇晨

React React Hooks

面试官synchronized连环问,学会Monitor之后轻松拿下

李子捌

Java、 28天写作 12月日更

字典树之旅01.开篇

极客志

自然语言处理 数据结构 算法 nlp 字典树

SQS 和 SNS 对比分析

liuzhen007

28天写作 12月日更

聊聊IT行业的项目管理模式

圣迪

项目管理 敏捷 pmp 开发 瀑布

Java jar 如何防止被反编译

xcbeyond

28天写作 12月日更

毕业设计

毛先生

38 K8S之CNI插件与选型

穿过生命散发芬芳

k8s 28天写作 12月日更

架构训练营作业一

supermenG

架构师训练营 4 期

Redis为何这么快?

JavaEdge

12月日更

面试官问我:什么是缓存击穿,该怎么解决?

喵叔

28天写作 12月日更

学习能力

Nydia

在线MySQL,SQL Server建表语句生成JSON测试数据工具

入门小站

工具

团队基建系列 - 组织知识传承3 破局

搬砖的周狮傅

在K8s里部署Eureka集群

xiaoboey

Kubernetes Spring Cloud Eureka Gateway 服务发现

聊聊 Kafka:Producer 源码解析

老周聊架构

Prometheus Exporter (二十一)Ceph Exporter

耳东@Erdong

Prometheus Ceph 28天写作 exporter 12月日更

记录:今年最骄傲的一件事

将军-技术演讲力教练

学生管理系统架构设计

tony

「架构实战营」

MySQL探秘(八):InnoDB的事务

程序员历小冰

MySQL 事务 28天写作 12月日更

[Pulsar] Consumer如何消费消息

Zike Yang

Apache Pulsar 12月日更

一对一沟通有必要吗?

Justin

沟通 28天写作

「架构实战营」模块一《为何架构设计能力难以提升》作业

DaiChen

作业 模块一 「架构实战营」

架构实战营 第4期 模块一作业

架构实战营 模块一 「架构实战营」

毕业总结

毛先生

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