Встроенный язык: Lua по сравнению с языком Common LISP (ECL)

У кого-либо здесь есть опыт с языком Common LISP как встроенный язык (использующий ECL)? Если так, насколько хороший ECL по сравнению с Lua?

23
задан linkit 11 July 2010 в 15:35
поделиться

1 ответ

Я не встраивал CL раньше, но я делал это с Lua и двумя конкретными реализациями Scheme (Gambit-C и GNU Guile).

На мой взгляд, Scheme - отличный встроенный язык, потому что он гибкий и не слишком раздутый. Gambit-C особенно хорош для этого, потому что он позволяет вам запускать интерпретируемые сценарии, а также компилировать ваш код в C. В моих тестах сгенерированный Gambit-C код на C был лишь немного медленнее, чем написанный от руки C (например, определенный тест, который выполнялся за 0,030 с на C, выполнялся за 0,040 в Gambit!) В Gambit также есть очень хороший FFI (foreign function interface), который по сути является просто Scheme со специальным синтаксисом для написания привязок к библиотекам C (ObjC и C++ также поддерживаются напрямую). Gambit также имеет очень хороший repl с некоторыми возможностями отладки.

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

В Lua есть замыкания, но вы не получите продолжений, как в Scheme, а также макросов. Тем не менее, на нем можно сделать разумное количество функциональных вещей. В нем нет полноценной объектной системы (как CLOS в CL), но есть таблицы, и с их помощью можно легко реализовать как наследование на основе классов, так и наследование на основе прототипов. Кроме того, Lua имеет отличный C API, с которым действительно приятно работать. Он основан на стеках и разработан таким образом, что вам не нужно беспокоиться об управлении памятью со стороны Lua. API очень понятен и хорошо организован, есть много отличной документации и примеров кода. Lua не может компилировать вниз, но использует байт-код (всегда - когда вы посылаете код в Lua VM, она всегда сначала компилирует этот код в байт-код, а затем запускает его).

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

Так что, я думаю, вы не ошибетесь ни с Gambit-C, ни с Guile, ни с Lua. Все они действительно хороши. CL мощный, но я думаю, что он слишком большой для встраивания.

25
ответ дан 29 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: