Простота встраивания javascript

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

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

Мой вопрос в два раза:

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

Я бы выбрал v8 над Lua.