首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铁锈能否在未来取代C或C++程序?

铁锈能否在未来取代C或C++程序?
EN

Software Engineering用户
提问于 2019-07-26 06:48:51
回答 2查看 2.5K关注 0票数 3

我最近读到一个有趣的文章,由于内存溢出错误,波音的动力系统将崩溃,并将飞行变成一个飞行砖块。

这是一个低级内存处理错误。如果使用像Rust这样的编程语言,这个bug可以消除吗?因为Rust自己处理内存,而且它与C语言这样的硬件非常接近。

EN

回答 2

Software Engineering用户

发布于 2019-07-26 08:16:04

实际上,您所指的生成器控制单元中的错误并不是Rust (或任何具有固定大小整数的语言)可以保护的内存处理错误。该单元的内部计数器溢出,这将最终发生在任何固定大小的计数器,以跟踪时间为例,和程序安全特征的单位检测,并将其归类为异常行为。由于异常行为被认为是不好的,该单位被置于“故障安全”模式。没有迹象表明该错误涉及无效的内存访问。

因此,从C/C++转换到Rust并不能防止这类错误,因为在应用程序逻辑中,即使是最安全的语言最聪明的编译器也看不到这种行为可能是有问题的。

我认为锈病不会在短期内接管安全关键地区的主要原因是

  • 遗留代码。如今,软件很少是从头开始编写的。几乎总是有一个前任产品,从该产品中重复使用大量代码可以减少创建新产品的准备时间,从而减少直到新产品开始赚钱的时间。遗留代码通常仍然是用C或C++编写的。
  • 缺乏经过认证的编译器。在一个受监管的行业,你不允许放弃责任,通常你需要积极地证明你的软件不能采取有害的行动。这包括一个证明,即编译器忠实地将源代码转换为机器指令,而不引入源代码中不存在的bug。有一些C/C++编译器的编译器供应商愿意将他们的业务押在这样的声明上,但对于Rust编译器却没有。这将给一家希望转向铁锈的公司带来沉重的负担。
票数 14
EN

Software Engineering用户

发布于 2019-07-26 07:20:14

仅使用内存安全语言可以避免内存处理错误吗?简而言之,是的。它们确实有潜力消除世界基础设施中一个巨大的关键错误来源。(这些语言的编译器和运行时系统的实现仍然可能存在内存处理错误,但这些错误通常是由比一般行业程序员少得多的合格人员编写的,因此风险要小得多。)

这些语言能代替C/C++吗?简单地说,没有。事实上,市场并没有奖励安全性:软件商店通常不对程序错误造成的损害负责,消费者不会接受更高的价格以获得更好的软件质量,太多的私人和公共机构都对容易被黑客攻击的系统感兴趣。此外,程序员喜欢内存-不安全的语言给他们的原始力量。因此,在可预见的未来,我们将被未定义的行为和由此产生的漏洞所困扰,即使现在我们能够承担内存管理系统所涉及的额外成本。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/395230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档