Простота встраивания JavaScript - PullRequest
11 голосов
/ 13 июня 2011

Я ищу языки сценариев для встраивания в приложение.

Я всегда считал, что Lua был лучшим выбором, но я читал некоторые недавние новости о внедрении V8 и рассматривал возможность его использования вместо.

У меня вопрос в два раза:

Кто-нибудь с опытом встраивания v8 (или любого javascript-движка) рекомендует его?

Как это соотносится со встраиванием Lua?

Мне нравится, что в v8 есть API для встраивания c ++.Однако у Lua API было много времени для доработки (новее не всегда лучше и все такое).

Примечание: меня не интересует, какой язык / библиотека лучше или какой лучше.,Я спрашиваю только о легкости встраивания.

Ответы [ 8 ]

17 голосов
/ 16 июня 2011

v8 - это просто ок .Я пытался использовать его в качестве интерпретатора сценариев для видеоигры некоторое время назад со смешанными результатами.С одной стороны, это очень быстро и API прост;но с другой стороны, он не очень хорошо справляется с инкапсуляцией состояния интерпретатора.Поскольку база кода завалена глобальными переменными, вам, в общем-то, не повезло, если вам нужно сбросить v8 в середине приложения или запустить его параллельно из нескольких потоков.Эти конструктивные решения понятны с точки зрения модели Chrome «один процесс на виртуальную машину», но затрудняют интеграцию в нечто похожее на игру, где вы можете запускать несколько виртуальных машин одновременно (например, в серверной части игрового сервера).), или есть какой-нибудь способ быстрой сериализации / сброса состояния всего интерпретатора.

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

4 голосов
/ 13 июня 2011

В HackerNews недавно было опубликовано сообщение об авторе Nginx, в котором обсуждается (не) пригодность V8 в качестве встроенного языка сценариев: http://news.ycombinator.net/item?id=2519674

Lua определенно больше ориентирован на общие цели встраивания, в то время как V8, вероятно, можно заставить как-то работать, если вы предпочитаете знакомство с Javascript.

3 голосов
/ 22 июня 2011

Lua тривиально встроить, но API расширения ниже уровня V8. Это стековый API, и у вас есть несколько примитивов для работы. Он не менее мощный, он очень надежный и никоим образом не ограничивает вас, и если вы просто хотите экспортировать глобальные функции в язык, это не составит труда. Однако экспорт объектов C ++ в Lua требует, чтобы вы понимали метатаблицы Lua, и поначалу это может показаться очень запутанным. V8, вероятно, делает это более простым.

Если вы хотите, чтобы API встраивания Lua работал больше для вас, есть библиотеки, такие как Luabind или ToLua ++. Lua не заставляет вас платить за то, что вы не используете.

Я лично не стал бы Javascript над Lua. Javascript - удивительно хороший язык, учитывая, что один инженер написал его за несколько недель, но у Lua было намного больше времени и мыслей. Это жемчужина CS, использующая небольшой набор тщательно отобранных концепций. Он делает все, что делает Javascript, но лучше. Он имеет правильную лексическую область видимости, хвостовую рекурсию, очень мощное средство метапрограммирования, которое может эмулировать наследуемое наследование Javascript (среди прочего), сопрограммы и т. Д. Это просто более чистый и лучший язык.

Одна из причин, по которой я мог бы выбрать Javascript вместо этого, заключается в том, что я знал, что моя аудитория уже знала Javascript, но я сделал это однажды с TCL и жил, чтобы сожалеть об этом (хотя JS далеко не так плох, как TCL; вы не можете пойти 1011 * что здесь не так).

2 голосов
/ 21 июня 2011

v8 может манипулировать JSON. а чисто луа не может. Однако у lua есть много библиотек, которых достаточно для настройки вашего приложения. Но в v8 нет библиотек. v8 предоставляет только движок JavaScript. Например, мы не можем написать файл только с v8. Для написания файла с v8, вы должны добавить API, который может получить доступ из javascript. Если вы надеетесь на мощное встраивание, например, доступ к сети, автоматизацию и т. Д., Вам лучше использовать lua. Или, если вы хотите красивого, используйте v8. :)

Извините за мой плохой английский.

2 голосов
/ 14 июня 2011

К сожалению, у меня нет опыта встраивания V8, поэтому я не могу напрямую ответить на ваш вопрос, но я обнаружил, что встраивание Lua очень просто.C api многословен, но также очень прост и легок в обращении и очень эффективно управляет переходами между Lua и C.

Если C ++ - ваш предпочтительный язык, я считаю, что Lua также компилируется чисто как C ++и для него доступны обертки C ++.

2 голосов
/ 13 июня 2011

Мой личный опыт встраивания Lua заключался в том, что он ужасно сосал.Lua API предназначен только для C, и это видно.Вы можете получить различные библиотеки оберток, но у них есть свои проблемы.

Я не пробовал V8, но в кратком обзоре, похоже, есть полезные вещи, такие как RAII и шаблоны, поэтому я бы проголосовалчто.

0 голосов
/ 17 июня 2011

Чтобы отразить вашу точку зрения: только то, что язык сценариев старый, не делает его более утонченным.В противном случае, принесите Cobol / Fortran / Assembly через C ++.

Я бы выбрал v8 вместо Lua.

0 голосов
/ 13 июня 2011

Я бы предложил v8. Google имеет тенденцию создавать хорошие API, и это выглядит довольно легко внедрить.

Я не буду ничего говорить о том, что является "лучшим" языком, поскольку это, очевидно, субъективно, и вы сказали, что не хотите слышать этот совет. Но я могу сказать, что Javascript наверняка имеет много людей, которые знают, как его использовать.

...