Почему C, C ++ и LISP так распространены во встроенных устройствах и роботах?

Прежде всего вы можете сделать то же самое с атрибутами объекта, что и с другими переменными:

someObject.a, someObject.b, someObject.c = 1,2,3

Не уверен, что это уже то, что вы имеете в виду. Если вы хотите обновить произвольные атрибуты (например, в функции), вы можете использовать тот факт, что объекты Python сохраняют свои атрибуты в dict, что поддерживает метод update () :

someObject.__dict__.update({"a":1, "b":2, "c":3})

Однако это следует делать только с осторожностью! Если вы предложите это в функции, любой атрибут someObject может быть изменен с помощью этой функции, и даже новые атрибуты могут быть вставлены!

20
задан David Koelle 21 October 2009 в 16:10
поделиться

15 ответов

Однажды я построил робота на основе Java. Это мусор собирался прямо в стену.

Если вы собираетесь запускать процессы, которыми вы не можете управлять на микроуровне (например, система на базе Linux), то они должны знать, что уступают определенным высокоприоритетным процессам, таким как управление движением. Так что либо вы делаете это самостоятельно на языке низкого уровня, например C, либо используете RTOS.

49
ответ дан 17 October 2019 в 02:38
поделиться

Я работал с робототехникой, и мой ответ - эффективность. Да, вы можете запустить виртуальную машину Java на сотовых телефонах. Но насколько это будет эффективно? Я был в команде, которая хотела запустить виртуальную машину Java на полной машине Windows XP на роботе, запуск нескольких приложений мониторинга в реальном времени в Matlab. Излишне говорить, что мы сбрасывали кадры, как будто это никого не касается. Мораль этой истории: игнорировать людей, которые не разбираются в вычислениях, даже если вам нужно переопределить своих руководителей, если это приведет к потоплению вашей работы.

Да, вы могли бы запустить Python, и я видел, как это сделано для управления несколькими C процессы. Но, в конце концов, запуск C позволяет вам выполнять некоторые прямые манипуляции с соединениями намного проще и надежнее, чем некоторые из кодов более высокого уровня, и поэтому является предпочтительным.

Да, вы можете запустить Python, и я видел, как это делается для управления несколькими процессами C. Но, в конце концов, запуск C позволяет вам выполнять некоторые прямые манипуляции с соединениями намного проще и надежнее, чем некоторые из кодов более высокого уровня, и поэтому является предпочтительным.

Да, вы можете запустить Python, и я видел, как это делается для управления несколькими процессами C. Но, в конце концов, запуск C позволяет вам выполнять некоторые прямые манипуляции с соединениями намного проще и надежнее, чем некоторые из кодов более высокого уровня, и поэтому является предпочтительным.

0
ответ дан 17 October 2019 в 02:38
поделиться

It seems that the software language skills most sought for embedded devices and robots are C, C++, and LISP. Why haven't more recent languages made inroads into these applications?

I presume it's about space requirements, performance and reliability.

For example, Erlang would seem particularly well-suited to robotic applications, since it makes concurrent programming easier and allows hot swapping of code. Python would seem to be useful, if for no other reason than its support of multiple programming paradigms. I'm even surprised that Java hasn't made a foray into general robotic programming.

Probably much more languages could be used on those platforms if implementors undertook the effort of taking care of runtime constraints. Which is not often the case. There is always a tendency to soak up the resources you have at hand, if you do not deliberately strive for less.

I'm sure one argument would be, "Some newer languages are interpreted, not compiled" - implying that compiled languages are quicker and use fewer computational resources.

Forth has a reputation for being interpreted, but small and fast, and was therefore often used on embedded devices. Follow-ups like Factor would probably be good candidates too, but I havent' heard of any effort in this direction - see above.

Is this still the case, in a time when we can put a Java Virtual Machine on a cell phone or a SunSpot?

I'm not an embedded person, but a cell phone is a rather luxurious platform, compared to controllers in cars, speklets asf. But Java always had embedded devices in mind, so their embedded implementation might even reach further down the power spectrum.

(and isn't LISP interpreted anyway?)

Nope, professional implementations compile, AFAIKT.

1
ответ дан 17 October 2019 в 02:38
поделиться

My guess is that C/C++ are used because they are closer to the hardware and allow for resource-aware programming. This is generally true for all embedded projects, not just robotics.

Then I guess that LISP is often chosen, because it still seems the predominant language in artificial intelligence research. LISP is probably used for the higher level workings of the robot, I suppose.

5
ответ дан 17 October 2019 в 02:38
поделиться

Вы можете выполнять робототехнику с Java на роботах Mindstorm, и MS активно занимается робототехникой, но в значительной степени используется C / C ++ из-за ограниченных ресурсов, а LISP используется для ИИ. потому что долгое время это была область исследований, и исследователи были основными пользователями LISP, поэтому они использовали язык, который знали.

Это та же самая причина, по которой FORTRAN так распространен в физике, например, люди используют язык, который они знают, и когда проект станет коммерческим, вы сохраните исходный код, если только вы не захотите переписать его с нуля.

11
ответ дан 17 October 2019 в 02:38
поделиться

Поскольку встроенные устройства в большинстве своем имеют ограниченные ресурсы, где не приветствуется такая роскошь, как автоматическая уборщик мусора. C / C ++ позволяет вам работать на довольно низких уровнях и программировать близко к машине, так что вы получаете эффективный код, столь необходимый для этих устройств.

Еще одна область, в которой языки высокого уровня, такие как Java и .NET, плохо работают, - это операции в реальном времени. Вы не можете позволить себе внезапную остановку, потому что сборщик мусора включился в самый неподходящий момент.

14
ответ дан 17 October 2019 в 02:38
поделиться
  • Как уже отмечали другие, C и C ++ используются, потому что они низкоуровневые. Еще одна причина популярности C заключается в том, что практически каждая архитектура имеет компилятор C. Этого достаточно для многих, поэтому на другие языки нечасто прикладывают дополнительные усилия. Это все равно что сказать, что C популярен, потому что C популярен, но вот как все работает.

  • Варианты LISP популярны в робототехнике отчасти потому, что варианты LISP исторически были популярны в исследованиях ИИ. Искусственный интеллект является основным направлением в робототехнике, поэтому многие вещи переносятся из этой области.

  • LISP существует уже давно - в 1958 году, согласно Википедии. У него больше истории, чем у большинства других языков высокого уровня, и это имеет два важных вывода: 1) LISP более прочно закрепился (в тех областях, где он обычно используется), чем другие языки высокого уровня, и 2) интерпретаторы LISP уже созданы для работы на всевозможном оборудовании с ограниченными ресурсами (см. Следующий пункт).

  • Интерпретаторы легче реализовать для вариантов LISP, чем для многих других языков высокого уровня, и их можно сделать достаточно эффективными. Схема, например, действительно простой язык для синтаксического анализа, как концептуально, так и с точки зрения загрузки процессора.

Чтобы понять, почему другие языки не имеют прочной опоры во встроенном программировании, просто возьмите обратное объяснение причин, по которым C, C ++, и LISP имеют прочную точку опоры.

  • Они еще не популярны в этой области, поэтому не прилагаются усилия для их поддержки.

  • Они не использовались предыдущими поколениями, поэтому новички не могут научили ими пользоваться.

  • У них не так много истории (в этой области). Они представляют неизвестное. Неизвестное - это страшно (и сложно).

  • Они облагают налогом ограниченное оборудование.

ПРИМЕЧАНИЕ: Когда я говорю об ограниченном оборудовании, я имею в виду следующее: большая часть встроенной работы по-прежнему связана с системами с промежуточным оборудованием. 256 байтов и 32 КБ ОЗУ. Смартфон с 128 МБ ОЗУ не является системой с ограничениями.

27
ответ дан 17 October 2019 в 02:38
поделиться

Большинство коммерческих и промышленных роботов программируются на C или C ++. Возможно, существует другой язык, с которым взаимодействует пользователь. Например, компания по производству промышленных роботов, в которой я работаю, использует C, работающий в ОС VxWork, но программисты приложений вроде меня работают с проприетарным языком для управления роботом. И C, и C ++ предоставляют вам широкий доступ и контроль над оборудованием. Вы не найдете слишком много коммерческих драйверов для двигателей с сервоприводом большой мощности. Несмотря на свою сложность, эти роботы просто следуют базовым процедурам.

LISP в основном используется в исследовательских роботах, подобных тем, которые участвовали в испытании DARPA. Этим типам роботов требуется больше «интеллекта», чем промышленным или коммерческим роботам.

0
ответ дан 17 October 2019 в 02:38
поделиться

Основная причина преобладания C и C ++ заключается в том, что среда выполнения детерминирована для обоих из-за отсутствия требований к сборке мусора. Это делает его хорошим выбором, когда вам нужно предоставить гарантии времени выполнения. Не говоря уже о том, что C в течение многих лет считался «языком ассемблера более высокого уровня».

Еще одно интересное наблюдение состоит в том, что большинству встраиваемых устройств не требуется сложный слой графического интерфейса пользователя или даже нет доступа к нему - мобильные телефоны - очевидное исключение. Большая часть встроенной работы, которую я проделал профессионально, относилась к арене кабельных приставок, так что у меня может быть наклонный взгляд на вещи. И «Нет» , я не считаю приставку жестко встроенной средой. Мы выросли, имея не что иное, как необработанную карту памяти того, что есть " язык, который использовался во многих встроенных средах, а также в довольно многих загрузчиках . Интерпретируемые языки определенно можно использовать в средах реального времени. Однако не все реализации FORTH интерпретируются. LISP также был встроен.

Я думаю, что основными критериями для встраиваемого языка являются:

  1. детерминированное управление памятью
  2. доступ к четко определенным размерам бит (все еще не уверен, как LISP вписывается здесь)
  3. простая среда выполнения
  4. полностью функциональная или универсальная
  5. плоская модель памяти

Последний пункт, на мой взгляд, наиболее интересен - именно поэтому я считаю, что у многих языков будут проблемы на встраиваемом рынке. Чистые функциональные языки естественным образом подходят для параллелизма и обычно работают в плоской модели памяти. Языки общего назначения работают хорошо, потому что они обычно не запрещают какую-либо конкретную модель потоковой передачи, что дает разработчикам среды выполнения RTOS большую гибкость. Окружения виртуальной памяти практически невозможно реализовать, так как они являются детерминированными и быстрыми. Это очень затрудняет правильную работу языков, требующих поддержки виртуальной памяти.

2
ответ дан 17 October 2019 в 02:38
поделиться
  • Для встроенной системы требуется минимум ОС и простое (не всегда) приложение, так как большинство ОС - это "C", это естественный выбор.

  • Нехватка ресурсов обработки / памяти принудительная оптимизация с очень низкого уровня. C (край по сравнению с C ++) имеет большую область оптимизации

0
ответ дан 17 October 2019 в 02:38
поделиться

Lisp is/was used in some research and some commercial robots. iRobot for example uses it. Here is an older article about their Common Lisp variant called L (<- Link).

Lisp is used when there is need for special higher level libraries, for example for complex planning operations. There are lots of libraries written over time for various planning operations, including planning of actions and movements of autonomous systems.

2
ответ дан 17 October 2019 в 02:38
поделиться

Я только что прочитал несколько вводных материалов по Erlang, и первое, что они сказали, было то, что Erlang был подходит для «мягкого» управления в реальном времени. Это не то, что я хотел бы видеть в любом роботе рядом со мной.

Вдобавок я бы сказал, что у роботов (как и у промышленных) в настоящее время нет реальной потребности в коде с горячей заменой.

1
ответ дан 17 October 2019 в 02:38
поделиться

За 20 лет работы со встроенными системами (включая 8 лет работы над коммерческим проектом робототехники) я ни разу не видел, чтобы Lisp где-либо использовался, и не считаю его «распространенным». Я, например, видел гораздо больше Ады. Я бы сказал, что это ниша, но если вы работаете в этой нише, она может показаться преобладающей для вас.

C и C ++ используются, потому что это языки с поддержкой системного уровня, требующие минимальная поддержка во время выполнения. Например, они могут работать без ОС - и действительно обычно используются для реализации операционных систем.

Когда разрабатывается новая архитектура процессора или устройство, C и C ++ обычно являются первыми языковыми инструментами «высокого уровня», доступными для платформы ( и часто остаются единственными доступными) - обычно с первого дня и все чаще на основе GNU GCC. Доступность других языков неоднородна или отсутствует. Навыки C и C ++ практически гарантированно могут быть повторно использованы в разных проектах и ​​архитектурах.

12
ответ дан 17 October 2019 в 02:38
поделиться

Однажды я наткнулся на этот интересный фрагмент об использовании Lisp в НАСА: http://www.flownet.com/gat/jpl-lisp.html

In 1994 JPL начала работу над Remote Agent (RA), автономный система управления космическим кораблем. РА был полностью написан на Common Lisp несмотря на неослабевающее политическое давление перейти на C ++. В какой-то момент была предпринята попытка перенести часть систему (планировщик) на C ++. Эта от попытки пришлось отказаться после год. На основании этого опыта я думаю можно с уверенностью сказать, что если бы не Лисп удаленный агент отказал бы.

11
ответ дан 17 October 2019 в 02:38
поделиться

Java сделала еще одну веху в этом году, когда стала программным вариантом для FIRST Robotics Competition . FRC - это впечатляющее соревнование, в котором участвуют более 77 000 старшеклассников, наставников и волонтеров со всего мира, которые создают роботов весом 120 фунтов за шесть недель. Я только что опубликовал некоторые результаты по этому поводу в своем блоге.

По странному совпадению (или нет) он использует ту же виртуальную машину Java, что и Sun SPOT, упомянутые в исходном вопросе.

0
ответ дан 17 October 2019 в 02:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: