在过去的几年里,用于嵌入式开发的编程语言的数量开始激增。开发人员可以使用汇编、C、C++、Python、MicroPython、Java和Rust等语言。(甚至还有一些工具可用于为应用程序建模并为开发人员生成代码)。对于新项目,嵌入式开发人员应该使用哪种编程语言?这篇文章将探讨一些为嵌入式开发人员选择正确编程语言的建议。
建议#1–避免死亡或正在死亡的语言
随着时间的推移,编程语言不再流行,这是不可避免的。发明了新的做事方法,发明了新的语言来解决当今的编程问题。曾经常用的语言逐渐消失,取而代之的是新的语言。
请注意,汇编语言是全球第8大最受欢迎的编程语言!但是,你知道有多少人积极地用汇编语言编写应用程序?在大多数情况下,汇编语言已经死了。当然,我们偶尔会编写汇编来优化某些功能,但我们并不是每天都在编写汇编语言。因此,请确保你选择的语言尚未死亡或尚未正在逐渐消失。
建议#2–选择面向对象的语言
今天几乎每个系统都可以用数据驱动、面向对象的体系结构来描述。我相信许多嵌入式系统自然而然地落入了这种设计范式,没有必要折磨我们的设计来获得它们。但是,选择支持面向对象编程概念的编程语言对于构建可扩展和可重用的软件系统至关重要。
当我们查看嵌入式系统的编程语言列表时,我们会注意到前五种语言存在一个小问题;C和汇编不是面向对象的语言!它们不提供嵌入式开发人员实施现代软件架构所需的现代工具集。此外,这些语言需要大量额外的工作才能获得自然内置到其他语言中的功能。
建议#3–仅使用标准化语言
构建必须经过多年维护和更新的商业产品的人不应该用非标准化的语言,除非他们能够承担与不断升级软件相关的技术债务。在像Rust一样标准化语言之前,该语言的规范是不断变化的。随着语言的发展和确定做事的最佳方式,它在不断变化。这意味着你可能使用一个编译器得到结果A,然后使用另一个编译器得到结果B。同样的语言,不同的结果,都是因为语言不标准化!
尽管新语言令人兴奋,但对于大多数企业来说使用标准化语言是有意义的。我认为使用具有标准的语言并积极更新这些标准以发展语言及其功能是有意义的。像C++这样的语言是一个不错的选择。C++有一个定义明确的标准,标准每三年更新一次。结果,为开发人员提供了新技术和新功能来改进他们的软件,使语言活起来。它还提供了一个一致的标准,这样团队就不必承担变更的技术债务,如果他们不想这样做。相反,他们继续使用他们采用的标准版本。
建议#4–平衡语言运行时权重
嵌入式开发团队的一个关键考虑因素是他们语言的运行时权重。
如果你检查C/C++,你会发现运行C应用程序所需的代码大小远低于1KB。运行代码的开销也可以忽略不计甚至不存在,C/C++具有轻量级的运行时权重。如果你检查Python或MicroPython,你会发现情况并非如此。MicroPython解释器通常构建到–KB之间!运行解释器的开销相对较小,但解释器的权重相当高。
如果内存成本被认为便宜或不重要,那么重量级运行时可能没什么大不了的。在这种情况下,使用像MicroPython这样的语言可以带来很多好处。例如,几乎每个人都知道Python或者可以很快学会它。此外,它的适应性强,编码标准比人们想象的要多。升级应用程序代码也可以像更新一些脚本模块一样快。
在任何一种情况下,嵌入式开发团队都应该仔细考虑与他们选择的语言相关的开销。例如,python、Java、Labview等可能比其他语言具有更高的运行时成本。
建议#5–使用适合你的语言
归根结底,你(团队)需要决定哪些功能和语言最适合你的需求。例如,如果整个行业都在转向Python,但汇编语言更有意义,因为你提供了手动优化的库,那么选择汇编语言。另一方面,如果你有一堆用C编写的遗留代码,并希望继续利用现有资产,那么请使用C。(或者包装你的C代码并使用C++!)。
不要让我们这个时代的语言时尚说服你改变。相反,使用有意义的方法并考虑我们在本文中讨论的建议。
嵌入式开发人员和团队确实可以选择丰富的编程语言来开发他们的嵌入式软件。他们选择的语言将取决于他们编写的软件类型、公司的需求以及他们在维护代码时产生的技术债务。在选择要使用的语言时,本文中的建议应提供一些额外的考虑。当有疑问时,C/C++,尤其是C++,可能是一个很好的默认值。