Альтернативы Lua как встроенному языку? - PullRequest
53 голосов
/ 15 декабря 2010

Я работаю над встроенной системой под управлением Linux на DSP.Теперь мы хотим сделать некоторые его части скриптовыми и ищем хороший встраиваемый язык скриптов.Эти сценарии должны хорошо интегрироваться с существующей базой кода C ++, быть небольшими и быстрыми.

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

Итак, какие есть альтернативы для встраиваемых языков?Это примерно через год.

На самом деле мы использовали Lua в нашей встроенной системе, и она прекрасно работает.Со временем мы добавили все больше и больше поддержки сценариев во все большее и большее количество частей проекта, и это действительно помогло реализовать его.

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

Взаимодействие с функциями C очень простое и работает очень хорошо.Это позволило нам безболезненно развивать систему сценариев.

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

Ответы [ 7 ]

39 голосов
/ 15 декабря 2010

Поскольку вы говорите «встроенная система», «маленький и быстрый» и «хорошо интегрируете», я бы сказал, что вы правы, что Lua - номер один, если не единственный выбор. Но я больше не согласен с тем, что у языка программирования есть «причудливые углы». Во-первых, книга «Программирование на Lua» просто великолепна, одна из лучших книг, которые я когда-либо читал. Во-вторых, некоторые «причудливые углы» происходят из-за того, что язык очень ортогональный и чистый, что в конечном итоге является преимуществом, а не недостатком. Я считаю, например, JavaScript намного хуже. Если вы читаете «Хорошие части Javascript», автор подробно объясняет, почему некоторые конструкции в языке являются ошибками проектирования и почему следует избегать нового оператора. В Lua все не так, плохие части были удалены, например, причудливое повышение стоимости было заменено стандартной синтаксической областью видимости в версии 5.x.

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

12 голосов
/ 16 декабря 2010

Всегда есть Лисп.:) Но это подчеркивает тот факт, что Lua на самом деле менее «причудливый», чем большинство языков.Он был разработан для непрограммистов и читается как псевдокод.Он имеет чистую, унифицированную семантику (вложенные функции первого класса с лексической областью действия; множественное присваивание; множественные возвращаемые значения; единый, гибкий механизм структурирования данных с синтаксисом чистого конструктора и т. Д.), Который позволяет очень легко изучать, читать, писать и т. Д.Кроме того, он оказывается неожиданно мощным и выразительным (правильные вызовы хвоста, продолжения, метапрограммирование и т. Д.)

Единственный действительно «причудливый» аспект Lua состоит в том, что он возвращает индекс из 1 и тот факт, что он неЯ не заимствую соглашения C, как и все остальные (~=, а не !=, --, а не // и т. д.), но они в большинстве своем причудливы глазами программистов, привыкших к языкам, подобным C.

Альтернативой может быть Squirrel, который вдохновлен Lua, имеет схожие цели, но С-подобный синтаксис.Хотя я этим не пользовался, поэтому не знаю, насколько он соответствует своим целям.

12 голосов
/ 15 декабря 2010

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

4 голосов
/ 15 декабря 2010

С учетом ваших требований (небольшая занимаемая площадь, небольшие причуды и интеграция с C ++) я могу думать только об одном: Common Lisp .

Некоторые люди в это другие SOвопрос рекомендует CFFI для интеграции его с C.

Но я бы остался с Lua, если бы я был там, где вы.

3 голосов
/ 15 декабря 2010

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

Я не знаю много о мире DSP, но когда вы гугляете "dsp lua" и "dsp tcl", вы получаете вдвое больше хитов для Tcl.

1 голос
/ 15 декабря 2010

Рассматривали ли вы Python ? Есть хорошее руководство по расширению и встраиванию . Если вы используете Boost , Boost Python - это библиотека для кажущейся интеграции между C ++ и Python.

0 голосов
/ 17 декабря 2010

Я понимаю, что Lua - отраслевой выбор для подобных проблем.

Смелая претензия! Я хотел бы предложить, что если вы уже используете Linux, выбор широко открыт. Сам Linux отнюдь не является «отраслевым выбором» для встраиваемых систем; «индустрия» гораздо более раздроблена, чем эта.

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

Другим кандидатом может быть ch , который является встраиваемым интерпретатором C / C ++, поэтому вы можете использовать тот же язык для скомпилированного и скриптового кода.

...