Rust的记忆安全能力使它成为一种令人兴奋的语言,但正如生活中的许多事情一样,说起来容易做起来难。虽然Rust是一个有趣的语言选项,但至少有五个显著的障碍阻止了它在嵌入式开发中的采用。让我们探索其中的一些障碍。
障碍1——商业支持
如今,大多数开发嵌入式产品的团队都利用商业支持工具来加速开发。例如,你的微控制器供应商可能会为你提供低级驱动程序、文件系统、RTOS、配置工具等等。这些提供的工具可以帮助你通过为你完成底层提升来加速开发。到目前为止,只有少数微控制器供应商(这是慷慨的)支持Rust。他们仍然在为他们的客户,你和我,提供对C的支持。除此之外,我们只能靠自己。
开发人员可以使用一些工具,如svd2rust,将指定微控制器外围设备的SVD文件转换为外围机箱。该工具可以很好地创建嵌入式开发人员可以使用的机箱,但它确实存在潜在问题,例如:
l 质量的显著差异取决于供应商
l 生成的详细而复杂的代码
l 缺少可能导致调试时间延长的错误消息
l 缺乏可配置性,这是一种一刀切的方法
l 它使用泛型和元编程可能会导致更长的编译时间
如果供应商不提供支持,那么就要靠你和你的团队来解决问题。虽然这可能令人兴奋,并带来许多经验教训,但它可能会对产品时间表和预算产生负面影响。
障碍2——培训成本
Rust不是一门微不足道的语言。虽然它与之前的许多语言(包括C语言)有着共同的想法和概念,但学习曲线更陡峭。当一家公司希望采用一种新语言时,他们会雇佣已经知道这项技术的工程师,或者培训他们的团队。对嵌入式使用Rust感兴趣的嵌入式开发团队将发现自己身处一个小型利基社区。在这个社区中,没有多少合格的嵌入式软件工程师了解Rust。这意味着要为少数了解Rust的开发人员支付溢价,或者投资培训现有的内部团队。
训练一个团队使用Rust并不是一个坏主意。然而,从一种编程语言转换到另一种编程编程语言必须为公司提供投资回报。尤其是当切换到像Rust这样不成熟的语言时。结果必须带来投资回报,比如更好的安全性、更强大的系统等。希望使用Rust的团队应该客观评估Rust是否是正确的选择。
障碍3——保守地采用技术
你有没有注意到新技术在嵌入式开发环境中被采用的速度有多慢?在设计物理产品与纯应用程序时,风险与安全、制造和适当的功能有关。使用纯应用程序,投诉会导致24小时软件更新。
以实物产品为基础的企业往往面临更高的失败风险。因此,企业主和管理者往往更厌恶风险,并选择他们知道行之有效的技术。(看看太空飞行器发射业务。它们因为避险而停滞了多久?)。此外,还经常对现有技术、工作流程和人才进行投资。对于一家已建立的企业来说,变革的成本可能是巨大的,而获得的收益却很小。如果你是一家小型初创企业,你还没有最初的投资,所以采用一项新技术很有意义,因为你无论如何都必须建立你的技术基础设施和流程。
失败的风险通常会促使企业使用风险较低的可用技术来实现其业务目标。因此,许多公司可能会考虑Rust,并决定使用C或C++,因为采用Rust这样的新技术并不能比行业中已经建立的技术带来任何真正的好处。
障碍4–工具链集成
如今,许多嵌入式开发人员已经构建了系统、工作流程和工具,他们以集成的方式使用这些系统、工作流和工具来开发嵌入式软件。使用Rust将迫使开发人员重新思考和返工他们的整个开发过程,因为Rust可能无法很好地使用这些现有的工具链。
你可能会发现,虽然新Rust似乎是一条很好的道路,但它可能会导致你倒退,在开发新工具和技术时,失去对系统的了解。结果可能还可以,但我们都知道,失去时间就是失去机会。
障碍5——缺乏标准化
C和C++有一些标准,你可以去了解什么是官方支持的语言,什么不是。Rust没有正式的规范或标准。Rust语言团队指导语言设计,所有更改都经过一个已建立的征求意见(RFC)过程。RFC和Rust文档有效地充当了该语言的非正式规范。
如果没有正式的语言规范,Rust在安全关键应用程序和其他领域的商业支持将不存在。Rust编译器被称为rustc,是免费的开源编译器,但没有商业版本。Rust社区开发编译器,Rust团队监督其开发。虽然这似乎不是什么大不了的事,但缺乏标准化意味着Rust可以轻而易举地改变方向。虽然这对进步和创新很有好处,但对那些依赖产品一致性的嵌入式用户来说就不太好了。
结论
作为一个行业,这些障碍将是Rust不会被快速采用的重要因素。也有一些公司采用它并取得成功,也会有其他人接受它并失败。
Rust是一种令人兴奋的语言,希望它能慢慢获得市场份额。然而,在接下来的五年里,还是会有更多的嵌入式开发团队采用C++,而不是Rust。