Альтернативы Lua как встраиваемый язык?

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

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

Итак, какие альтернативы существуют для встраиваемых языков?

EDIT:

Это примерно через год.

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

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

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

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

7 ответов


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

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


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

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

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


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


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

некоторые люди в это другой так вопрос рекомендуют на корейском языке для интеграции его с С.

но я бы остался с Луа, если бы я был там, где вы.


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

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


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


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

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

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

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