Какой движок Javascript вы бы встроили в свое приложение?[закрыто]

StackOverflow https://stackoverflow.com/questions/93692

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Примечание:Просто чтобы прояснить: меня не интересуют сценарии DOM или написание Javascript в браузере.

Вот подборка ссылок и несколько советов из темы.

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

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

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

Это было полезно?

Решение

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

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

Есть также Белка-рыба из WebKit, но я не смог найти отдельную версию, когда искал ранее.

Другие советы

Я пробовал и 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 подходит для вашей игры?Многие игры используют Луа язык программирования для написания сценариев.Его легко интегрировать, он очень маленький, компилируется практически на любой платформе и его легко освоить.

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

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

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

Говоря о механизме сценариев и C++, вы также можете рассмотреть чайскрипт.Он близок к сценарию 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.Хотя это довольно новое.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top