为什么C、C++和LISP在嵌入式设备和机器人中如此普遍?

22 投票
17 回答
6529 浏览
提问于 2025-04-15 15:15

看起来,嵌入式设备和机器人最常用的软件语言是C、C++和LISP。那为什么最近的新语言没有在这些应用中占据一席之地呢?

比如说,Erlang似乎特别适合机器人应用,因为它让并发编程变得更简单,还可以热更新代码。Python也看起来很有用,至少因为它支持多种编程风格。我甚至对Java没有进入通用机器人编程感到惊讶。

我想有人会说,“一些新语言是解释型的,而不是编译型的”——这意味着编译型语言运行得更快,消耗的计算资源更少。在现在这个时代,我们可以把Java虚拟机放到手机或者SunSpot上,这种说法还成立吗?(而且LISP不也是解释型的吗?)

17 个回答

14

因为嵌入式设备通常资源有限,所以不太适合使用像自动垃圾回收这样的奢侈功能。C/C++让你可以在比较底层的地方工作,编程时更接近机器,这样可以写出在这些设备上非常需要的高效代码。

还有一个高层语言,比如Java和.NET,不太适合的地方就是实时操作。你不能因为垃圾回收器在最糟糕的时刻突然启动而导致程序卡住。

29
  • 正如其他人已经提到的,C和C++之所以被广泛使用,是因为它们属于低级语言。C语言受欢迎的另一个原因是几乎每种计算机架构都有针对它的C编译器。这对很多人来说已经足够了,所以大家通常不太会去花力气支持其他语言。这就有点像说C语言受欢迎是因为它受欢迎,但这就是现实。

  • LISP的变种在机器人领域也很受欢迎,部分原因是LISP在人工智能研究中历史悠久。人工智能是机器人技术的一个主要关注点,因此很多东西都从这个领域延续过来。

  • LISP已经存在很久了——根据维基百科,它的起源可以追溯到1958年。它的历史比大多数其他高级语言都要长,这有两个重要的影响:1)LISP在它常用的领域比其他高级语言更为扎根;2)LISP的解释器已经被开发出来,可以在各种资源有限的硬件上运行(见下一个要点)。

  • 对于LISP的变种来说,开发解释器比许多其他高级语言要简单得多,而且它们可以做到相对高效。例如,Scheme是一种概念上和CPU负担上都很容易解析的语言。

要理解为什么其他语言在嵌入式编程中没有强大的立足点,只需反向考虑C、C++和LISP为何能在这个领域占据重要位置的原因。

  • 它们在这个领域本身并不流行,因此没有人去支持它们。

  • 它们没有被前几代人使用过,所以新手们没有被教导去使用它们。

  • 它们在这个领域的历史不多,代表着未知。未知是令人害怕的(而且很难)。

  • 它们对有限的硬件要求较高。

注意:当我提到有限的硬件时,我指的是:很多嵌入式工作仍然涉及到256字节到32千字节的RAM的系统。拥有128兆字节RAM的智能手机并不算是有限系统。

53

我曾经用Java做过一个机器人。结果它在运行的时候直接撞上了墙。

如果你要让一些程序在后台运行,而你又不能随时去管理它们(比如在Linux系统上),那么这些程序必须知道要给一些高优先级的任务让路,比如运动控制。所以你要么自己用像C这样的底层语言来处理,要么就使用实时操作系统(RTOS)。

撰写回答