Какой механизм Javascript вы встраиваете в свое приложение?

Я хочу встроить Javascript в мой хобби. Теперь, когда у нас есть 5-е поколение Javascript-двигателей (все быстро и быстро), мне любопытно, какой движок вы захотите внедрить в С++-фреймворк (который включает в себя фактическую простоту его встраивания)?

Примечание. Чтобы это было ясно, я не заинтересован в написании DOM или написании Javascript в браузере.

Вот компиляция ссылок до сих пор и несколько советов из потока

Просто для записи, я люблю Lua и уже встроил ее в игровые движки примерно 5 раз на работе.

Однако теперь это хобби-проект, и я думаю, что Javascript известен большинству веб-разработчиков и потому, что его разработчики ECMA, Flash и Flex, игровой движок, который использует Javascript и XML для скриптинга, будут более удобными и удобными к большей пользовательской базе (и той, которая до сих пор не имела возможности использовать свои навыки для игр), чем одна с Lua (и их много!).

Также для записи я поеду с V8 на этом, в основном потому, что мне нравится стиль С++.

Ответ 1

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

Google V8 может быть хорошим выбором, поскольку вы используете С++, но у меня пока нет опыта. Согласно документации (благодаря Daniel James), V8 не является нить- но это может измениться в будущем.

Там также WebKit SquirrelFish, но я не мог найти отдельную версию этого, когда я смотрел ранее.

Ответ 2

Я пробовал и SpiderMonkey, и V8. С SpiderMonkey я не мог заставить работать. Я даже не мог собрать примеры на mozilla.org для компиляции.

V8 работал из-за-коробки, и я получил некоторое базовое взаимодействие с С++ ↔ Javascript довольно быстро. Есть списки google для людей, использующих V8, и я нашел ответы на большинство моих вопросов.

Ответ 3

Является ли Java Script правильным языком для вашей игры? Многие из игр используют Lua язык программирования для сценариев. Он легко интегрируется, он очень мал, он компилируется практически на каждой платформе и легко учится.

Это несколько не по теме, но мышление вне коробки может быть важно, чтобы все исправить.

Ответ 4

Я считаю, что v8 работает только на процессорах x86, x64 и arm. Что может быть недостатком.

Что касается безопасности потоков, от include/v8.h:

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

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

Обновление: Этот комментарий был удален, вероятно, некоторое время назад. Похоже, что v8 теперь имеет объект Isolate, который представляет экземпляр движка. Один экземпляр Isolate может использоваться только в одном потоке за раз, но другие экземпляры Isolate могут использоваться в других потоках одновременно.

Ответ 5

Тест который вышел, когда V8 впервые попал на сцену, где V8 был на 1000% (или что-то еще) быстрее, чем другие двигатели были сильно взвешены в пользу двигателей, которые были хороши при рекурсии. Если ваш код использует много рекурсии, то V8 может дать вам значительное преимущество по скорости. Для "реального мира" (в настоящее время, по крайней мере) веб-материала SquirrelFish Extreme кажется победителем на данный момент (см. мое сообщение в блоге по теме для результатов моего собственного, неформального тестирования).

Как отмечали другие, легкость интеграции и качество документации могут преобладать над чистой скоростью. Это не означает, что если вы не отправляете товар!

Ответ 6

Говоря о скриптовом движке и С++, вы также можете рассмотреть chaiscript. Он близок к ecma script (~ Javascript) и очень легко встраивается в С++.

Продавец с веб-страницы:

... ChaiScript, с другой стороны, был разработан с нуля с учетом интеграции с С++.... У ChaiScript нет мета-компилятора, нет зависимости от библиотеки, нет сборки системные требования и никакой старый багаж любого вида. Может работать легко с любыми функциями С++, которые вы открываете для него. Он не имеет чтобы явным образом рассказывал о любом типе, он является центральным по функциям.

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

Ответ 7

Я бы подождал TraceMonkey, следующую эволюцию SpiderMonkey, чтобы выйти. Быстрее и лучше. (Использует код, пожертвованный от Adobe Flash).

Tracemonkey гордится тем, что делает повторяющиеся действия намного быстрее, агрессивно оптимизируя структуру во время выполнения на основе фактического использования, что должно быть удобно для игры.

Ответ 8

Попробуйте Javascript.NET:

http://javascriptdotnet.codeplex.com/

Он реализует Google V8. Вы можете скомпилировать и запустить Javascript непосредственно из .NET-кода с ним и предоставить объекты CLI, которые будут использоваться кодом Javascript. И V8, вероятно, лучший двигатель, когда-либо созданный с точки зрения производительности, он генерирует собственный код из Javascript.

Ответ 9

Вы также можете посмотреть V8 от Google. Это довольно ново, однако.

Ответ 10

Я бы следил за v8, поскольку он кричит быстро движок javascript, и я уверен, что он будет развивать кросс-платформенную поддержку по мере ее роста до зрелости.