Go语言能够大多种不同通道上支持并行输入、输出与处理。如果能够正确使用,这一能力将使得整套传感器及执行器组合得到良好协调。然而这种特性的风险在于,各通道之间也许并不能意识到对方的存在。如果编程人员有所疏忽,那么缺乏协调的系统就可能带来不可预测的行为。从技术角度讲,这显然不是什么好事。
Rust
Rust语言由Mozilla公司开发而来。与Mozilla旗下的其它软件类似,Rust属于开源项目且拥有非常迅猛的演进速度。Rust语言拥有诸多源自Go的特性,不过它也解决了Go当中存在的一大主要问题。
由于Go语言无法自动在不同数据结构“通道”之间进行信息共享,因此最终开发出的程序有可能存在所谓“竞态条件”。直白地讲,这是一种无法控制的状态,处于这一状态下的系统会由于不同进程在运行时处于激烈冲突而导致工作无法完成。Rust语言当中包含的函数能够消除竞态条件,从而使其更为可靠地构建起高度并发程序。
同样的,Rust语言对于运行平台的性能也存在一定要求,不过如果大家的开发团队希望开发一款涉及大量并发机制的应用,那么Rust与Go都是值得认真考量的编程语言选项。
Parasail
如果大家对于自己物联网应用程序的并行处理能力拥有一定要求,那么Parasail语言也是个值得一试的选项。在之前介绍Go与Rust语言时,我们已经提到了编程概念当中的并发机制。如果大家不清楚并发与并行的区别(或者您的开发团队无法明确解释二者的差异),那么请在着手编码之前认真查寻相关资料,保证自己的彻底明确之后再做决定。
Parasail是一款编译型面向对象语言,其始终处于演进当中因此能够通过与Java、Python、C#甚至是Ada(真的很难相信会在一种现代语言当中看到Ada的名头)类似的语法进行编程。千万别会错意,如果大家打算构建一个物联网项目,那么利用Ada进行编程绝对是个不错的选择。不过如果大家需要使用具备高度并行性的嵌入式代码,那么Parasail则是最理想的语言选项。
B#
我们今天提到的很多语言都属于大型系统语言,因此要让其在嵌入式平台上顺利运行,我们需要对其进行具体调整。然而B#则不同,它的设计初衷就是一类着眼于小处的高效嵌入式控制语言。嵌入式虚拟机(简称EVM)允许B#语言运行在多种不同平台之上,且内存占用量仅为24 k——远低于我们之前提到的其它软件包运行要求。
B#语言与C#在某种程度上比较类似(如果大家或者下辖技术团队曾经开发过微软.NET项目,那么对C#肯定不会陌生)。不过相较于C#,B#剔除了相当一部分在嵌入式项目中用不到的特性,并加入了对实时控制功能的支持——这一点在实际使用环境下显然非常重要。
如果大家的项目如果大家的开发项目未来会运行在轻量级嵌入式平台之上,其规模与复杂度皆低于Raspberry Pi,那么B#绝对是个值得认真考虑的编程语言选项。
汇编语言
如果大家希望严格遵循比较传统的设计思路,或者需要尽可能让自己的项目显得比较紧凑,那么汇编程序就是达成目标的不二之选。汇编语言能够构建并打包纯粹的机器码,从而保证大家在处理器之上拥有最为理想的执行效率。好消息是其对性能的要求被控制在最低水平,而且技术高超的行家能够利用汇编语言实现很多在其它编程机制中根本不存在的优化技巧。
不过坏消息是,汇编语言的编程工作无法借力于网络:大家几乎找不到任何实用工具来帮助自己揪出开发成果中的各类错误。除此之外,汇编语言代码以及相关程序编写技能往往没有任何承接性。具体来讲,我们能够针对一种处理器编写出相关代码,但这并不代表我们能够面向其它处理器编写出拥有同样功能的代码。
对于铁杆程序员以及希望拥有终极优化效果的产品来讲,汇编语言能够将其体积控制在最低水平且保证其中不包含任何其它环境因素。不过可以肯定的是,汇编语言绝对不是构建原型方案的最佳方式——如果大家拥有较为充裕的空间及处理性能,那么请优先使用高级语言,现代语言中的诸多优势还是能够帮上忙的。
Forth
Forth是另一种专门针对嵌入式系统编程工作做出设计与优化的语言。虽然它的主要定位在于实现系统层级上的编程,但Forth还拥有另一大不可替代的优势:它有点像是编程世界中的黑话。举例来讲,假如说某个群体以世界语作为母语,并倾向于使用它来跟我们交流,那么不懂世界语就会让我们处于非常尴尬的境地。而在编程世界当中,Forth就是这样一种等同于世界语的存在。