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

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

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

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

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

EDIT:

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

Но я буду придерживаться Lua, если я, где вы.

Ответ 5

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

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

Ответ 7

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

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

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

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