作者 | 核子可乐、Tina
针对具有更高安全需求的行业,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/
本文转载来源:
https://www.infoq.cn/article/GjkPGctetjh2Yv9s6Lfe