C 和 C++ 流行的主要原因是,由于缺乏垃圾收集要求,运行时对于两者都是确定性的。当您必须提供运行时保证时,这使其成为一个不错的选择。更不用说多年来 C 一直被认为是首选的“高级汇编语言”。
另一个有趣的观察是大多数嵌入式设备不需要甚至无法访问复杂的 GUI 层——手机是一个明显的例外。我专业从事的大部分嵌入式工作都在有线电视机顶盒领域,所以我可能对事物有一个倾斜的看法。而“不”,我不认为机顶盒是硬嵌入式环境。我们成长过程中只有一张“屏幕上”的原始内存映射,而且资源很少。长话短说,屏幕上的图形是一种固定位宽的位旋转练习——这是 C 语言中指针真正闪耀的另一个地方。
Java 还没有进入更“简单”的市场,我真的一点也不惊讶。尽管Java ME应该解决这个问题,但解释器还是太重了。它在手机(例如BREW)中非常普遍,并且正在慢慢进入机顶盒和电视市场(例如<tru2way>和GEM),但它还没有出现,我真的不确定永远都是。
正如其他人所提到的,FORTH是一种“解释型”语言,已在许多嵌入式环境以及相当多的引导加载程序中使用。解释语言绝对可以在实时环境中使用。不过,并非所有 FORTH 的实现都被解释。LISP 也已嵌入。
我认为可嵌入语言的主要标准是:
- 确定性内存管理
- 访问明确定义的位大小(仍然不确定 LISP 如何适合这里)
- 简单的执行环境
- 完全功能或通用
- 平面内存模型
最后一点在我看来是最有趣的——这也是为什么我相信很多语言在嵌入式市场都会遇到麻烦的原因。纯函数式语言很适合并发,通常在平面内存模型中工作。通用语言运行良好,因为它们通常不禁止任何特定的线程模型,这为 RTOS 运行时实现者提供了很大的灵活性。虚拟内存环境几乎不可能实现,因此它们具有确定性和快速性。这使得需要虚拟内存支持的语言很难真正正常运行。