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

Dav*_*lle 20 lisp python embedded erlang robotics

嵌入式设备和机器人最需要的软件语言技能似乎是C,C++和LISP.为什么没有更多的近期语言进入这些应用程序?

例如,Erlang似乎特别适合机器人应用程序,因为它使并发编程更容易,并允许热交换代码. 如果没有其他原因支持多种编程范例,Python似乎是有用的.我甚至对Java没有涉足通用机器人编程感到惊讶.

我确信有一个论点是"一些较新的语言被解释,而不是编译" - 这意味着编译语言更快,并且使用更少的计算资源.在我们可以将Java虚拟机放在手机或SunSpot上的时候,情况仍然如此吗?(并不是LISP解释?)

amo*_*amo 49

我曾经建立了一个基于Java的机器人.垃圾收集到了墙上.

如果您要运行的流程无法进行微观管理(例如,基于Linux的系统),那么他们必须知道如何屈服于某些高优先级流程,如运动控制.所以要么你自己用C语言这样的低级语言,要么就是使用RTOS.

  • +1"垃圾收集到墙上" - 让我微笑 (46认同)
  • 您应该已阅读许可协议(http://www.java.com/en/download/license.jsp),特别是此部分:"您承认许可软件不是为设计,构造,操作而设计或打算使用的或维护任何核设施." 如果对核设施不利则对我的机器人不利:p (5认同)
  • @James:那不是开玩笑.它实际上发生在我身上,这是一个非常严重的原因,为什么在使用任何在移动机器人上至少没有软实时功能的控制器之前我会三思而后行.至于为什么Java不像你建议的那样经常与RTOS一起使用,根据我的经验,机器人没有很多备用CPU周期,所以语言的逻辑选择是增加最小开销的.(我指的是专业制造的机器人;业余爱好者通常拥有更强大的CPU - 这就是为什么LEGO可以用Java编程的原因.) (4认同)
  • +1"垃圾直接收集到墙上".让我大笑!:-) (3认同)
  • 我撞毁了一台计算机,因为我在其传感器使用的坐标系上被误导了.书柜没有受伤,机器人上有几处划痕. (2认同)
  • 我记得在 National Instruments cRIO、vxWorks、Java 上编程。绝对可怕的响应时间。但我不会说永远不要使用解释性或非确定性系统,只是说您需要明确定义的代码域。Python 是一个福音,因为我们可以实时加载控制逻辑。但是我们在较低级别的代码(电机换向、通信)中保留了任何重要的内容。 (2认同)

Ste*_*e S 27

  • 正如其他人已经指出的那样,使用C和C++是因为它们是低级的.C流行的另一个原因是几乎每个架构都有一个针对它的C编译器.这对很多人来说已经足够了,所以额外的努力通常不会用于其他语言.这有点像说C很受欢迎,因为C很流行,但是嘿,这就是事情的运作方式.

  • LISP变体在机器人技术中很受欢迎,部分原因是LISP变体在AI研究中一直很受欢迎.AI是机器人技术的一个主要焦点,因此很多东西都会从这个领域转移.

  • 据维基百科称,LISP已存在很长时间了 - 1958年.它比大多数其他高级语言有更多的历史,这有两个重要的含义:1)LISP比其他高级语言更稳固地建立(在它常用的领域)和2)LISP解释器已经制作在各种资源有限的硬件上运行(参见下一个要点).

  • 对于LISP变体,解释器比许多其他高级语言更容易实现,并且它们可以合理地有效.例如,Scheme在概念上和在CPU中都是一种非常容易解析的语言.

要知道为什么其他语言都没有,在嵌入式编程站稳脚跟,只是采取的是C,C++和LISP的原因相反有一个强大的立足点.

  • 它们在这个领域尚未普及,因此不会付出努力来支持它们.

  • 前几代人没有使用它们,因此不会教新手使用它们.

  • 他们没有太多的历史(在这个领域).他们代表未知.未知是可怕的(而且很难).

  • 他们对有限的硬件征税.

注意:当我谈论有限的硬件时,这就是我的意思:许多嵌入式工作仍然涉及具有256 字节和32千兆字节RAM的系统.具有128 MiB RAM的智能手机不是有限的系统.

  • @Steve,在C中你可以编写可以在那个空间运行的程序.如果替代方案是原始组件,则C很好. (3认同)
  • 您无法将一些其他语言的解释器安装到我们使用的一些微控制器中。实时控制系统中的时间限制排除了任何形式的动态内存分配。它仍然是位摆弄性能优化和定点数学的世界。它不是“C”,因为“C”很受欢迎,它是“C”,因为它是唯一可以完成这项工作的东西。 (3认同)

小智 14

因为嵌入式设备大多数资源有限,不欢迎使用自动垃圾收集器等奢侈品.C/C++允许您在相当低的级别上工作并在机器附近编程,以便您在这些设备上获得非常需要的有效代码.

Java和.NET等高级语言不能很好地运行的另一个领域是实时操作.由于垃圾收集器在最糟糕的时刻刚刚开始,你不能突然停下来.

  • 我的Lisp机器使用标准芯片用于SCSI,以太网等.驱动程序都是用Lisp编写的.Lisp用于所有网络代码,包括IP栈,DECNet,RPC和NFS等协议.Lisp是一种低级系统编程语言 - 它具有系统编程的所有功能.CPU适应了Lisp,但其余的硬件并没有那么多.例如,总线是标准的VMEBus,Nubus或类似的.磁盘是标准的,磁带驱动器,CDROM,激光打印机等所有标准的东西.仍然从Lisp访问. (5认同)
  • 虽然AI研究人员不会在C/C++中工作,但LISP将用于AI部分. (2认同)

Cli*_*ord 12

在嵌入式系统的20年中(包括8年的商业机器人项目),我从未见过Lisp在任何地方使用过,也不会认为它是"普遍的".我见过更多的阿达.我会说这是一个利基,但如果你碰巧在那个利基市场工作,它可能看起来很普遍.

使用C和C++是因为它们是需要最少运行时支持的系统级语言.例如,它们可以在没有操作系统的情况下运行 - 实际上通常用于实现操作系统.

当开发新的处理器体系结构或设备时,C和C++通常是该平台可用的第一个"高级"语言工具(并且通常是唯一可用的) - 通常从第一天开始,并且越来越多地基于GNU GCC.其他语言的可用性不完整或不存在.C和C++技能几乎可以保证在项目和体系结构中可重用.

  • 商用机器人通常不是AI测试台.让它们可靠而不是试验先进的启发式方法更为重要.学术机器人更有可能以某种方式运行Lisp. (3认同)

Jam*_*ack 11

您可以在Mindstorm机器人上使用Java进行机器人技术,MS可以推动机器人技术,但在很大程度上由于资源有限而使用C/C++,并且LISP用于AI,因为很长一段时间这是一个研究和研究人员是LISP的主要用户,因此他们使用了他们所熟悉的语言.

这就是为什么FORTRAN在物理学中如此普遍的原因,例如,人们使用他们所知道的语言,当项目变得商业化时,除非你想从头开始重写,否则你保留原始代码.

  • Fortran也非常擅长数值计算,优于C. (3认同)

Tho*_*sen 11

我曾经在NASA上使用Lisp这个有趣的片段:http: //www.flownet.com/gat/jpl-lisp.html

1994年,JPL开始研究自动航天器控制系统Remote Agent(RA).RA完全是用Common Lisp编写的,尽管转向C++的政治压力不大.有一次尝试将系统的一部分(规划器)移植到C++.这种尝试必须在一年后放弃.基于这种经验,我认为可以说,如果不是Lisp,Remote Agent就会失败.


zig*_*tar 5

我的猜测是使用C/C++是因为它们更接近硬件并允许资源感知编程.这通常适用于所有嵌入式项目,而不仅仅是机器人.

然后我猜LISP经常被选中,因为它似乎仍然是人工智能研究中的主要语言.我想,LISP可能用于机器人的更高级别的工作.

  • 猜测?大概?你想? (2认同)