Какой движок Javascript вы бы встроили в свое приложение? [закрытый]
Я хочу встроить Javascript в мой игровой движок хобби. Теперь, когда у нас есть 5-е поколение движков Javascript (все пылающие быстро) мне любопытно, какой движок вы бы выбрали для внедрения в C++ framework (что включает в себя фактическую простоту его внедрения)?
Примечание: просто чтобы было ясно, я не заинтересован в написании сценариев DOM или написании Javascript в браузере.
вот подборка ссылок до сих пор и некоторые советы от нить
- SpiderMonkey
- tracemonkey (Примечание:обратная совместимость с spidermonkey):
- V8
- Squirrelfish
просто для записи, я люблю Lua и уже внедренные в игровые движки около 5 раз на работе.
однако теперь это хобби-проект, и я думаю, что Javascript известен большинству веб-разработчиков и поскольку его разработчики ECMA, Flash и Flex, игровой движок, который использует Javascript и XML для сценариев, будет более удобным для пользователя и будет обслуживать большую пользовательскую базу (и тот, который до сих пор не имел возможности использовать свои навыки для игр), чем один с Lua (и есть много тех, кто вокруг!).
также для записи я пойду с V8 на этом, в основном потому, что мне нравится стиль C++.
10 ответов:
SpiderMonkey от Mozilla довольно легко и хорошо документированы. Это C API, но его легко обернуть в C++. Он может быть скомпилирован как потокобезопасный, что полезно для игр, так как вы, вероятно, захотите иметь свою основную логику в одном потоке и логику пользовательского интерфейса во втором потоке.
V8 от Google может быть хорошим выбором, так как вы используете C++, но у меня пока нет опыта работы с ним. Согласно документация (спасибо Дэниел Джеймс), двигатель V8 не является потокобезопасным, хотя это может измениться в будущем.
там же в WebKit в SquirrelFish, но я не мог найти автономную версию этого, когда я искал ранее.
Я пробовал как SpiderMonkey, так и V8. С SpiderMonkey, я не мог получить ничего, чтобы работать. Я даже не мог получить примеры mozilla.org для компиляции.
V8 работал из коробки, и я получил некоторое базовое взаимодействие C++ Javascript довольно быстро. Есть несколько списков google для людей, использующих V8, и я уже нашел там ответы на большинство своих вопросов.
Я считаю, что v8 работает только на процессорах x86, x64 и arm на данный момент. Что может быть недостатком.
что касается безопасности потока, от включить/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
экземпляры могут использоваться в других потоках одновременно.
является ли Java Script действительно правильным языком для вашей игры? Многие из игр там используют Lua язык программирования для написания сценариев. Его легко интегрировать, он очень мал, он компилируется почти на каждой платформе, и его легко узнать.
Это несколько не по теме, но мышление вне коробки может быть важно, чтобы все было правильно .
The benchmark это вышло, когда V8 впервые попал на сцену, которая показала, что V8 на 1000% (или что-то еще) быстрее, чем другие двигатели, был сильно взвешен в пользу двигателей, которые были хороши в рекурсии. Если ваш код использует много рекурсии, то V8 может дать вам значительное преимущество, с точки зрения скорости. Для" реального мира " (в настоящее время, по крайней мере) веб-материал, SquirrelFish Extreme, похоже, является победителем hands down на данный момент (см. мой пост в блоге по теме для результаты моего собственного, неофициального тестирования).
как указывали другие, простота интеграции и качество документации могут превалировать над чистой скоростью. Это не значит Джек, Если вы не грузите!
говоря о скриптовом движке и c++, вы также можете рассмотреть chaiscript. Он близок к сценарию ecma (~Javascript) и очень прост для внедрения в c++.
продавец с веб-страницы:
... ChaiScript, с другой стороны, был разработан с нуля с интеграцией с C++ в виду. ... ChaiScript не имеет мета-компилятор, библиотеки нет зависимостей, построение системные требования и отсутствие багажа наследия любого вида. На может работать легко с любыми функциями C++ вы подвергаете его воздействию. Он не имеет чтобы быть явно сказано о любом типе, он является функционально-ориентированным.
с помощью ChaiScript вы можете буквально начать писать сценарии своего приложения добавление трех строк кода в программу и не изменение построить шаги на всех.
Я бы подождал TraceMonkey, следующей эволюции SpiderMonkey, чтобы выйти. Быстрее и лучше разработаны. (Использует код, подаренный от Adobe Flash).
Tracemonkey гордится тем, что делает повторяющиеся действия намного быстрее, агрессивно оптимизируя структуру во время выполнения на основе фактического использования, что может быть удобно для увеличения игры.
попробуйте Javascript .NET:
http://javascriptdotnet.codeplex.com/
он реализует Google V8. Вы можете скомпилировать и запустить Javascript непосредственно из кода .NET с ним, а также предоставить объекты CLI, которые будут использоваться кодом Javascript. И V8, вероятно, лучший движок, когда-либо созданный с точки зрения производительности, он генерирует собственный код из Javascript.
вы также можете посмотреть V8 из Google. Это довольно новое, хотя.