Подтвердить что ты не робот

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

Похоже, что навыки языка программного обеспечения, наиболее востребованные для встроенных устройств и роботов, - это C, С++ и LISP. Почему в эти приложения не проникли более поздние языки?

Например, Erlang будет казаться особенно подходящим для роботизированных приложений, поскольку он упрощает параллельное программирование и позволяет "горячую" замену кода, Python может показаться полезным, если не по какой-либо другой причине, кроме поддержки нескольких парадигм программирования. Я даже удивлен тем, что Java не совершил набега на общее роботизированное программирование.

Я уверен, что один аргумент будет: "Некоторые новые языки интерпретируются, а не компилируются" - подразумевая, что скомпилированные языки быстрее и используют меньше вычислительных ресурсов. Это все еще так, в то время, когда мы можем поместить виртуальную машину Java на мобильный телефон или SunSpot? (и не интерпретируется LISP?)

4b9b3361

Ответ 1

Я когда-то построил робот на основе Java. Это мусор, собранный прямо в стену.

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

Ответ 2

  • Как уже отмечали другие, C и С++ используются, потому что они являются низкоуровневыми. Другая причина популярности C заключается в том, что почти каждая архитектура получает компилятор C, предназначенный для него. Это достаточно хорошо для многих людей, поэтому дополнительные усилия не часто вводятся на другие языки. Это похоже на то, что C популярен, потому что C популярен, но эй, что все работает.

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

Через 20 лет во встроенных системах (в том числе 8 лет в коммерческом проекте робототехники) я никогда не видел, чтобы Lisp использовался везде и не считал его "распространенным". Я видел гораздо больше Ады, например. Я бы сказал, что это ниша, но если вы работаете в этой нише, это может показаться вам распространенным.

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

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

Ответ 5

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

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

Ответ 6

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

В 1994 году JPL приступила к работе над Удаленный агент (RA), автономный система управления космическими аппаратами. РА написанное полностью в Common Lispнесмотря на неустанное политическое давление для перехода на С++. В какой-то момент была предпринята попытка перенести одну часть система (планировщик) на С++. Эта попытка была прекращена после год. Основываясь на этом опыте, я думаю можно с уверенностью сказать, что если не для Lispудаленный агент потерпел неудачу.

Ответ 7

Я предполагаю, что C/С++ используются, потому что они ближе к аппаратным средствам и позволяют программировать с учетом ресурсов. Это обычно справедливо для всех внедренных проектов, а не только для робототехники.

Тогда я предполагаю, что LISP часто выбирается, потому что он все еще кажется преобладающим языком в исследованиях искусственного интеллекта. LISP, вероятно, используется для работы более высокого уровня робота. Я полагаю.

Ответ 8

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

Еще одно интересное замечание состоит в том, что большинство встроенных устройств не нуждаются или даже имеют доступ к сложному слою GUI - сотовые телефоны являются очевидным исключением. Большая часть встроенных работ, которые я сделал профессионально, была в арене кабельного приставки, поэтому у меня может быть наклонный взгляд на вещи. И "Нет", я не считаю приставку жесткой встроенной средой. Мы выросли из-за того, что у нас есть не что иное, как необработанная карта памяти того, что "на экране" и очень мало на пути ресурсов. Короче говоря, на экранной графике есть упражнение в бит-скрещивании с фиксированной шириной бита - это еще одно место, которое указывает на то, что C действительно сияет.

Я действительно не слишком удивлен тем, что Java еще не продвинулась на рынок "голых костей". Переводчик слишком тяжел, хотя Java ME должен был решить эту проблему. Это довольно распространено в сотовых телефонах (например, BREW) и медленно продвигается на сет-телевизоры и телевизоры (например, <tru2way > и GEM), но он еще не существует, и я действительно не уверен, что он когда-либо будет.

Как отмечали другие, FORTH - это "интерпретируемый" язык, который использовался в ряде встроенных сред, а также в довольно много загрузчиков. Интерпретированные языки могут определенно использоваться в средах реального времени. Однако не все реализации FORTH интерпретируются. LISP также встроен.

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

  • детерминированное управление памятью
  • доступ к четко определенным размерам бит (все еще не уверен, как LISP здесь подходит)
  • простая среда выполнения
  • полностью функциональный или общий
  • модель с плоской памятью

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

Ответ 9

Lisp используется/используется в некоторых исследованиях и некоторых коммерческих роботах. Например, iRobot использует его. Вот более старая статья об их общем варианте Lisp, который называется L (< - Link).

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

Ответ 10

Похоже, что навыки языка программного обеспечения, наиболее востребованные для встроенных устройств и роботов, - это C, С++ и LISP. Почему в эти приложения не проникли более поздние языки?

Я предполагаю, что это касается требований к пространству, производительности и надежности.

Например, Erlang будет казаться особенно подходящим для роботизированных приложений, поскольку он упрощает параллельное программирование и позволяет "горячую" замену кода. Python, казалось бы, был бы полезен, если бы ни по какой другой причине, кроме поддержки нескольких парадигм программирования. Я даже удивлен тем, что Java не совершил набега на общее роботизированное программирование.

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

Я уверен, что один из аргументов будет: "Некоторые новые языки интерпретируются, а не компилируются" - подразумевая, что скомпилированные языки быстрее и используют меньше вычислительных ресурсов.

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

Это все еще так, в то время, когда мы можем поместить виртуальную машину Java на мобильный телефон или SunSpot?

Я не врожденный человек, но сотовый телефон - довольно роскошная платформа, по сравнению с контроллерами в автомобилях, speklets asf. Но у Java всегда были встроенные устройства, поэтому их внедренная реализация может даже достичь еще большей мощности спектра.

(и не интерпретируется LISP?)

Нет, компиляция профессиональных реализаций, AFAIKT.

Ответ 11

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

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

Ответ 12

C и С++ - языки с очень эффективными компиляторами (что приводит к эффективности, очень важной для встроенных систем с низкими ресурсами).

Что касается Lisp, то возникло непонимание. Общий Lisp (то, что в настоящее время используется в основном - потомком Lisp 1.5), скомпилировано (не интерпретируется) и очень эффективно с широким спектром реализаций и FFI (т.е. Приложение Common Lisp может взаимодействовать с библиотеками C ) и некоторые очень красивые конструкции высокого уровня. Живое кодирование через REPL делает его еще более удобным для проверки вещей на рабочем роботе.

Кроме того, существует Embeddable Common- Lisp, который позволяет встраивать Common Lisp приложение в C binary - это реализация, скомпилированная в общую библиотеку.

Ответ 13

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

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

Ответ 14

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

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

Ответ 15

  • Встраиваемая система нуждается в минимальной ОС и простом (не всегда) приложении, поскольку большинство OS-es являются "C" своим естественным выбором

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

Ответ 16

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

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