Альтернативы Lua как встраиваемый язык?
Я работаю над встроенной системой под управлением Linux на DSP. Теперь мы хотим сделать некоторые его части скриптовыми, и мы ищем хороший встраиваемый язык сценариев. Эти скрипты должны хорошо интегрироваться с нашей существующей базой кода C++, быть небольшими и быстрыми.
Я понимаю, что Lua-это отраслевой выбор для таких проблем. Мы, вероятно, пойдем с Lua, потому что это проверено и доказано, что оно стабильно и так далее. Однако, как язык программирования он имеет некоторые довольно причудливые углы.
Итак, какие альтернативы существуют для встраиваемых языков?
EDIT:
Это примерно через год.
мы фактически использовали Lua на нашей врезанной системе и она выполняет чудесно хорошо. Со временем мы добавили все больше и больше поддержки сценариев для все большего количества частей проекта, и это действительно помогло принести его вместе.
производительность является выдающимся, на самом деле. Даже довольно сложный операции, включающие поиск по длинным массивам или необычным строковым операциям, выполняются на удивление хорошо. Мы в основном никогда не сталкивались с проблемами производительности, связанными с Lua.
взаимодействие с функциями C очень просто и работает очень хорошо. Это позволило нам безболезненно развивать скриптовую систему.
наконец, мы были поражены тем, насколько гибким оказался Lua. Наш интерпретатор Lua должен работать в системе с нестандартным распределителем памяти и без него поддержка двойного типа данных. В одном заголовочном файле есть два хорошо документированных места, которые нам пришлось изменить, чтобы Lua работал в этой системе. Это действительно хорошо подходит для встраивания!
7 ответов:
поскольку вы говорите "встроенная система" и "маленькая и быстрая" и "хорошо интегрироваться", я бы сказал, что вы правы, что Lua является номером один, если не единственным выбором. Но я больше не согласен с тем, что язык программирования имеет "причудливые углы". Во-первых, Программирование книг в Lua просто великолепно, одна из лучших книг, которые я когда-либо читал. Во-вторых, некоторые из "причудливых углов" исходят из того, что язык очень ортогональный и чистый, что в конечном итоге является преимуществом, а не недостатком. Я найти например JavaScript намного хуже. Если Вы читаете "Javascript The good parts", автор подробно объясняет, почему некоторые конструкции в языке являются ошибками проектирования и почему следует избегать нового оператора. Не так в Lua, плохие части были удалены, например, причудливый материал upvalue был заменен стандартным синтаксическим охватом в версии 5.x.
мое мнение на самом деле, что Lua-это язык с far меньше причудливые углы, чем большинство других языков! Мы используем его в коммерческом проекте и мы им более чем довольны.
там всегда шепелявят. :) Но это подчеркивает тот факт, что Lua на самом деле менее "изворотливый", чем большинство языков. Он был разработан для не-программистов и читается как псевдокод. Он имеет чистую, однородную семантику (вложенные функции первого класса с лексической областью; множественное назначение; несколько возвращаемых значений; единый гибкий механизм структурирования данных с чистым синтаксисом конструктора и т. д.) что делает его очень легким выучить, прочитать, написать, etc. Он также оказывается неожиданно мощным и выразительные (хороший хвост, звонки, продолжения, метапрограммирования и т. д.)
единственный действительно "причудливый" аспект Lua - это индекс массивов от 1, и тот факт, что он не заимствует соглашения C, как и все остальные (
~=
, а не!=
,--
, а не//
и т. д.), но они в основном причудливы с точки зрения программистов, привыкших к C-подобным языкам.альтернативой может быть белка, которая вдохновлена Lua, имеет аналогичные цели, но C-like синтаксис. Я не использовал его, Хотя, поэтому я не знаю, хорошо ли он соответствует своим целям.
Я искренне рекомендую Lua для вашего случая. Однако,далее является альтернативой-особенно для ограниченных ресурсов встроенных устройств-которые еще не были упомянуты.
с вашими требованиями (небольшой размер, небольшие причуды и интеграция с C++), единственный вариант, о котором я могу думать, это Common Lisp.
некоторые люди в это другой так вопрос рекомендуют на корейском языке для интеграции его с С.
но я бы придерживался Lua, если бы я был там, где вы.
Tcl был разработан с нуля, чтобы быть встроенным языком, и был вокруг в течение многих десятилетий. Кроме того, это идеальный выбор для разработки предметно-ориентированного языка из-за его очень расширяемой природы.
Я не знаю много о мире DSP, но когда вы google "dsp lua" и "dsp tcl" вы получаете в два раза больше хитов для Tcl.
вы рассматривали Python? Там хороший расширение и встраивание руководство доступен. Если вы используете Boost, Boost Python это библиотека для кажущейся интеграции между C++ и Python.
Я понимаю, что Lua-это отраслевой выбор для таких проблем.
смелое утверждение! Я бы предположил, что если вы уже используете Linux, выбор широко открыт. Сама Linux ни в коем случае не является" отраслевым выбором "для встроенных систем; "промышленность" гораздо более фрагментирована.
язык, реализуемый практически в любой системе, независимо от производительности, размера и ОС (или даже без ОС), является четвертым. Не самый модный язык возможно, но легко реализуемый и расширяемый.
другой кандидат может быть ch, который является встроенным интерпретатором C / C++, поэтому вы можете использовать один и тот же язык для скомпилированного и скриптового кода.