Warum sind C, C++ und LISP so weit verbreitet in der embedded-Geräte und-Roboter?
Scheint es, dass die Sprache der software-Fähigkeiten am meisten gesucht für embedded-Geräte und die Roboter C, C++ und LISP. Warum haben die neueren Sprachen machten den Weg in diese Anwendungen?
Beispielsweise Erlang scheint besonders gut geeignet für Roboter-Anwendungen, da es ermöglicht die gleichzeitige Programmierung einfacher und ermöglicht hot-swapping von code. Python scheint sinnvoll zu sein, wenn aus keinem anderen Grund als seine Unterstützung der Programmierung mehrere Paradigmen. Ich bin sogar überrascht, dass Java nicht hat, machte einen Streifzug von der Allgemeinen Roboter-Programmierung.
Ich bin sicher, ein argument wäre, "Einige neuere Sprachen interpretiert, nicht kompiliert" - was bedeutet, dass die kompilierte Sprachen sind schneller und mit weniger Rechenleistung. Ist dies immer noch der Fall, in einer Zeit, wir können eine Java Virtual Machine auf ein Handy oder einen Sonnenfleck? (und nicht LISP interpretiert, wie auch immer?)
- Wow... ich kann nicht glauben, dass das "machen dies zu einem community-wiki" Polizei nicht gestoppt. Ich werde sagen, dass es zuerst - stellen Sie dies ein community-wiki, da es sich nicht um eine "richtige" Antwort.
- Es ist Lisp jetzt nicht LISP.
- Lisp nicht unbedingt interpretiert werden müssen. Steel Bank Common Lisp (sbcl.org) hat einen optimierten native-code-compiler.
- Während Sie vielleicht sehen, dass diese Sprachen in der embedded-Entwicklung, und vielleicht educational robotics. Die meisten Industriellen automation in ladder logic. Ich kenne ein paar Läden, die C benutzen, aber Sie sind wenige und weit zwischen.
- Immer weniger Orte sind mit ladderlogic. Die SPS implementieren Leiter Sprachen fallen aus der Gunst und sind vor allem gehalten, die in durch ältere Ingenieure, die das nicht wollen oder können nicht lernen, ein neues system.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich einmal einen Roboter gebaut auf Java-Basis. Es garbage Collection direkt in einer Wand.
Wenn du gehst, um Prozesse laufen, dass man nicht micromanage (z.B. ein Linux-basiertes system), dann werden Sie wissen müssen, um Rendite, um bestimmte Prozesse mit hoher Priorität, wie motion-control. Also entweder machst du es selbst in einer low-level Sprache wie C, oder verwenden Sie ein Echtzeit-BETRIEBSSYSTEM.
Als andere haben darauf hingewiesen, bereits C und C++ verwendet werden, da Sie low-level. Ein weiterer Grund für die C ' s Popularität ist, dass nur etwa jede Architektur wird ein C-compiler speziell für Sie. Das ist gut genug für eine Menge Leute, so dass zusätzliche Aufwand nicht oft in anderen Sprachen. Das ist irgendwie wie wenn man sagt: C ist beliebt, weil C ist beliebt, aber hey, das ist, wie die Dinge funktionieren.
LISP-Varianten sind beliebt in der Robotik, im Teil, weil LISP-Varianten haben in der Vergangenheit populär gewesen, in der KI-Forschung. AI ist ein wichtiger Schwerpunkt in der Robotik, so viel von dem Zeug bekommt über die aus diesem Bereich.
LISP gewesen herum für eine lange Zeit -- 1958 laut Wikipedia. Es hat mehr Geschichte als die meisten anderen high-level-Sprachen, und das hat zwei wichtige Konsequenzen: 1) LISP ist mehr fest etabliert (in den Gebieten wird es Häufig verwendet) als andere high-level-Sprachen, und 2) die LISP-interpreters bereits gemacht worden, um die Ausführung auf alle Weise von Ressource-begrenzten hardware (siehe nächsten Punkt).
Dolmetscher sind einfacher zu implementieren, für LISP-Varianten sind als bei vielen anderen high-level-Sprachen, und Sie können gemacht werden, einigermaßen effizient. Schema, zum Beispiel, ist eine wirklich einfache Sprache zu analysieren, sowohl konzeptionell und in der CPU-Belastung.
Sehen, warum andere Sprachen nicht haben ein starkes Standbein im embedded-Programmierung, nimm einfach das Gegenteil der Gründe dafür, dass C, C++ und LISP tun haben ein starkes Standbein.
Sind Sie nicht bereits sehr beliebt in diesem Bereich, so ein Aufwand ist nicht in, Sie zu unterstützen.
Wurden Sie nicht genutzt, die von früheren Generationen, so Neulinge werden nicht gelehrt, Sie zu benutzen.
Haben Sie nicht viel Geschichte (in diesem Bereich). Sie repräsentieren die unbekannten. Der unbekannte ist beängstigend (und schwer).
Sind Sie anstrengend auf limitierter hardware.
HINWEIS:, Wenn ich reden über begrenzte hardware, das ist, was ich meine: viele embedded-Arbeit beinhaltet Systeme mit zwischen 256 bytes und 32 kB RAM. Ein Smartphone, das hat 128 MB RAM ist nicht nur ein system.
Da embedded-Geräte verfügen meist nur über begrenzte Ressourcen, wo es nicht willkommen ist um Luxus wie eine automatische garbage collector. C/C++ können Sie auf ziemlich niedrigem Niveau und Programm schließen, um die Maschine so, dass Sie wirksam-code als sehr viel benötigt auf diesen Geräten.
Ein weiterer Bereich, wo high-level-Sprachen wie Java und .NET nicht gut spielen ist real-time-Betrieb. Sie können sich nicht leisten, sich plötzlich ins stocken geraten, da der garbage collector nur getreten, an der denkbar ungünstigsten moment.
In 20 Jahren in embedded-Systemen (einschließlich 8 Jahre an einem kommerziellen Robotik-Projekt), habe ich noch nie gesehen Lisp überall eingesetzt und würde nicht sehen es als 'verbreitet'. Ich habe gesehen, weit mehr Ada zum Beispiel. Ich würde sagen, dass es eine Nische, aber wenn Sie geschehen, um die Arbeit in dieser Nische ist, könnte es Aussehen vorherrschend, Sie.
C und C++ verwendet werden, da Sie Systeme, die Ebene fähig, die Sprachen, die nur einen minimalen Laufzeit-Unterstützung. Sie können zum Beispiel ausgeführt, ohne dass eine OS - und in der Tat Häufig verwendet, um zu implementieren Betriebssysteme.
Wenn eine neue Prozessorarchitektur oder ein Gerät entwickelt, C und C++ sind in der Regel die erste "high-level" Sprache und tools für die Plattform (und bleiben oft die einzig verfügbaren) - in der Regel vom ersten Tag an, und immer öfter GNU GCC basiert. Verfügbarkeit in anderen Sprachen ist lückenhaft oder nicht existent. C und C++ Fähigkeiten sind diejenigen, die ziemlich sicher wiederverwendbar sein, über die Projekte und Architekturen.
Können Sie tun-Robotik mit Java auf die Mindstorm-Roboter und MS hat einen push für das tun der Robotik, aber zu einem großen Teil in C/C++ verwendet wird, aufgrund der begrenzten Ressourcen, und LISP verwendet wird, für AI, weil für eine lange Zeit war dies ein Bereich, der Forschung und der Forscher waren die größten Nutzer von LISP, so dass Sie verwendet die Sprache, die Sie kannte.
Dies ist der gleiche Grund, warum FORTRAN so weit verbreitet in der Physik, zum Beispiel, die Menschen verwenden die Sprache, die Sie kennen und wenn das Projekt wird gewerblichen, es sei denn, Sie möchten, neu zu schreiben, halten Sie die original-code.
Ich einmal fiel, über dieses interessante snippet auf die Verwendung von Lisp bei der NASA: http://www.flownet.com/gat/jpl-lisp.html
Meine Vermutung ist, dass C/C++ verwendet werden, da Sie näher an der hardware und ermöglichen resource-aware programming. Dies gilt generell für alle embedded-Projekte, nicht nur in der Robotik.
Dann vermute ich, das LISP oft gewählt, weil es scheint immer noch die vorherrschende Sprache in der künstlichen-Intelligenz-Forschung. LISP ist wahrscheinlich für die höhere Ebene, die Arbeitsweise der Roboter, nehme ich an.
Der Hauptgrund für die Prävalenz von C und C++ ist, dass die Laufzeit ist deterministisch, sowohl aufgrund der fehlenden garbage-collection Anforderungen. Dies macht es eine gute Wahl, wenn Sie haben, um Laufzeit garantiert. Nicht zu erwähnen, dass C wurde als der "höheren Ebene assembly-Sprache" der Wahl für viele Jahre.
Andere interessante Beobachtung ist, dass die meisten embedded-Geräte nicht brauchen oder haben sogar Zugriff auf eine komplexe GUI-Schicht-Mobiltelefone sind eine offensichtliche Ausnahme. Die meisten embedded-Arbeit, die ich getan haben Professionell wurde in der Kabel-set-top-box-arena vielleicht habe ich einen schrägen Blick auf die Dinge. Und "Nein", ich denke nicht, dass die set-top-box eine Festplatte embedded-Umgebung. Wir wuchsen aus, die nichts mehr als ein raw-Speicher anzeigen, was "on screen" und sehr wenig in der Art der Ressourcen. Um eine lange Geschichte kurz, auf Bildschirm Grafiken sind eine übung in bit-twiddling mit fester bit-Breite - dies ist ein weiterer Ort, dass Zeiger in C wirklich glänzen.
Ich bin wirklich nicht zu Wundern, dass Java nicht vorangekommen, in der mehr "bare bones" - Markt noch. Der Dolmetscher ist einfach zu schwer, obwohl die Java ME sollte, diese zu lösen. Es ist ziemlich weit verbreitet in Handys (z.B., BREW) und wird langsam seinen Weg in die set-top-Boxen und TV-Märkte (z.B., <tru2way> und GEM) aber es ist noch nicht da und ich bin wirklich nicht sicher, ob es das jemals sein wird.
Wie andere erwähnt haben, HER ist ein "interpretiert" Sprache, die verwendet wurde in einer Reihe von embedded-Umgebungen, wie auch in schon ein paar Bootloader. Interpretierte Sprachen können auf jeden Fall verwendet werden, in Echtzeit-Umgebungen. Nicht alle Implementierungen HER interpretiert werden obwohl. LISP wurde eingebettet.
Ich denke, dass die wichtigsten Kriterien für eine embedable Sprache sind:
Der Letzte Punkt ist der interessanteste, meiner Meinung nach - das ist auch der Grund, warum ich glaube, dass viele Sprachen werden Schwierigkeiten haben, in den embedded-Markt. Reine funktionale Sprachen sind eine Natürliche Ergänzung für die Parallelität und arbeiten in der Regel in einem flat-memory-Modell. General purpose Sprachen gut funktionieren, weil Sie meistens nicht, aber irgendwelche besonderen threading-Modell, das Ihnen viel Flexibilität, die RTOS-runtime-Implementierer. Virtueller Speicher-Umgebungen sind verdammt nahe unmöglich zu implementieren, so dass Sie deterministisch und schnell. Dies macht es sehr schwierig für Sprachen erfordern, dass der virtuelle Speicher-Unterstützung zu wirklich korrekt funktionieren.
Lisp ist/war in einige der Forschung und einige kommerzielle Roboter. iRobot zum Beispiel nutzt es. Hier ist ein älterer Artikel über die Common Lisp-Variante namens L (<- Link).
Lisp verwendet wird, wenn es Bedarf für spezielle höhere level-Bibliotheken, zum Beispiel für die komplexe Planung von Operationen. Es gibt viele Bibliotheken geschrieben über die Zeit und verschiedene der Planung von Operationen, einschließlich der Planung von Aktionen und Bewegungen von autonomen Systemen.
Ich vermute, es geht um den Platzbedarf, Leistung und Zuverlässigkeit.
Wahrscheinlich viel mehr Sprachen verwendet werden könnte, auf diesen Plattformen, wenn implementors unternahm der Aufwand für die Betreuung der runtime-Einschränkungen. Das ist nicht oft der Fall ist. Es gibt immer eine Tendenz, genießen Sie die Ressourcen, die Sie zur hand haben, wenn Sie nicht bewusst anstreben, weniger.
Forth hat den Ruf, die interpretiert, aber klein und schnell, und war daher oft verwendet, die auf embedded-Geräte. Follow-ups wie Faktor wäre wahrscheinlich gute Kandidaten, aber ich haben' gehört, der jedes bemühen in dieser Richtung - siehe oben.
Ich bin nicht ein embedded-person, aber ein Handy ist eine sehr bequeme Plattform, im Vergleich zu Steuerungen in Autos, speklets asf. Aber Java hatte immer embedded-Geräte im Auge, so dass Ihre embedded-Implementierung könnte sogar weiter unten der power-Spektrum.
NÖ, professionelle Implementierungen zusammenzustellen, AFAIKT.
Ich habe gerade gelesen einige einführende Erlang Materialien und eines der ersten Dinge, die Sie sagte, war, dass Erlang war geeignet für "Weiche" Echtzeit-Steuerung. Das ist nicht etwas, ich würde mir wünschen, in der alle Roboter in der Nähe von mir.
Dazu würde ich sagen, dass Roboter (wie in der Industrie) haben derzeit keinen echten Bedarf für hot-Swapping-Funktionalität-code. Sie sind auf ein Stück basis und es wird immer eine geplante Ausfallzeit, um die reload-code in einem passenden moment - was natürlich auch getestet in ein offline-Gerät.
C und C++ sind Sprachen, mit sehr effektiven Compiler (was führt zu Effizienz sehr wichtig in Embedded Systeme mit geringen Ressourcen).
Bezüglich Lisp, einige Missverständnisse wurde gespawnt. Common Lisp (etwas, was meistens verwendet wird, gerade jetzt - ein Nachfahre von LISP 1.5) kompiliert (nicht interpretiert) und sehr effizient mit einer Vielzahl von Implementierungen und FFI (ich.e Ihre Common Lisp-Anwendung kann die Interaktion mit C-Bibliotheken) und einige sehr schöne high-level-Konstrukte. Live-coding über REPL macht es noch bequemer für die überprüfung heraus, was auf funktionierende Roboter.
Außerdem gibt es Embeddable Common Lisp, die es ermöglicht die Einbettung von Common Lisp-Anwendung in C-binary – es ist von der Implementierung erstellt, um der shared library.
Meisten kommerziellen und industriellen Roboter werden programmiert, in C oder C++. Gibt es vielleicht eine andere Sprache, die der Benutzer interagiert mit. Zum Beispiel Die Industrie-Roboter der Firma für die ich arbeite nutzt C läuft in einem VxWork OS, aber die Anwendungen, die Programmierer mögen mir die Arbeit mit einer proprietären Sprache für die kommandierung des Roboters. C-und C++ geben Ihnen einen viel Kontrolle und Zugriff auf die hardware. Sie nicht finden zu viele kommerzielle Treiber für high-power-servo-Motoren. Während Komplex diese Roboter Folgen Sie einfach den basic-Routinen.
LISP ist hauptsächlich in der Forschung werden Roboter wie diejenigen, konkurrierten in der DARPA challenge. Diese Arten von Robotern brauchen mehr "Intelligenz" dann industrielle oder kommerzielle Roboter.
Durch die Zusammenarbeit mit Robotik, meine Antwort ist Effizienz. Ja, Sie können ausführen einer Java Virtual Machine auf das Handy. Aber wie effektiv wird er sein? Ich war in einem team, das ausführen wollte eine Virtuelle Java-Maschine auf einen vollen Windows-XP-Rechner auf einen Roboter, in dem mehrere Echtzeit-monitoring Anwendungen in Matlab. Unnötig zu sagen, waren wir die Bilder fallen lässt, wie es war niemand ' s-Geschäft. Moral von der Geschichte außer Kraft setzen, Menschen, die nicht verstehen computing, auch wenn Sie außer Kraft setzen müssen Sie sich mit Ihren Vorgesetzten, wenn es geht, zu sinken Ihr Betrieb.
Ja, Sie laufen konnte, Python, und ich habe es getan zum verwalten von mehreren C-Prozesse. Aber am Ende des Tages, Ausführung C ermöglicht Ihnen die direkte manipulation der verbindungen, die so viel einfacher und zuverlässiger als einige der höheren level-codes, und ist daher bevorzugt.
Embedded system benötigt ein minimum von OS und einfache (nicht immer) Anwendung, da die meisten OS-es sind "C" es ist eine Natürliche Wahl
Knappheit der Verarbeitung/Speicher-Ressource-force-Optimierung von sehr low-level. C (Kante über C++) hat einen großen Spielraum für die Optimierung
Java gemacht, ein weiterer Meilenstein in diesem Jahr, wenn es wurde eine Programmier-option für die FIRST Robotics Wettbewerb. FRC ist ein beeindruckender Wettbewerb mit über 77.000 high-school-Studenten, Mentoren und Freiwilligen aus der ganzen Welt Gebäude 120 Pfund Roboter in sechs Wochen. Ich habe gerade gebucht einige Ergebnisse über diese auf meinem blog.
Durch seltsamen Zufall (oder auch nicht), es nutzt die gleiche Java-VM, da die Sonne Flecken erwähnt, in der ursprünglichen Frage.