Który silnik Javascript można osadzić w aplikacji? [zamknięte]

Chcę osadzić Javascript w moim silniku gier hobby. Teraz, gdy mamy już 5 generację silników Javascript (wszystkie płonące szybko) jestem ciekaw, jaki silnik byś wybrał, aby osadzić w C++ framework(który zawiera rzeczywistą łatwość osadzania go)?

Uwaga: żeby było jasne, nie jestem zainteresowany skryptami DOM ani pisaniem Javascript w przeglądarce.

Oto zestawienie linków do tej pory i kilka porad z thread

Tak dla przypomnienia, kocham Lua i już osadzone w silnikach gry około 5 razy w pracy.

Jednak teraz jest to projekt hobby, i myślę, że Javascript jest znany przez większość twórców stron internetowych, a ponieważ jego programiści ECMA, Flash i Flex, silnik gry, który wykorzystanie Javascript i XML do skryptów byłoby bardziej przyjazne dla użytkownika i zaspokoić większą bazę użytkowników (i taki, który do tej pory nie miał okazji wykorzystać swoich umiejętności do gier) niż jeden z Lua (i jest ich wiele wokół!).

Również dla przypomnienia pójdę z V8 na ten jeden, głównie dlatego, że lubię to styl C++.

Author: Miguel, 2008-09-18

10 answers

Spidermonkey Mozilli jest dość łatwy i dobrze udokumentowany. Jest to C API, ale łatwo jest go zawijać w C++. Można go skompilować tak, aby był bezpieczny dla wątku, co jest przydatne w grach, ponieważ prawdopodobnie chcesz mieć główną logikę w jednym wątku i logikę interfejsu użytkownika w drugim wątku.

Google V8 może być dobrym wyborem, ponieważ używasz C++, ale nie mam doświadczenia z nim jeszcze. Według dokumentacji (dzięki Daniel James), V8 nie jest bezpieczny dla wątków, chociaż może się to zmienić w przyszłości.

Jest też SquirrelFish Webkita, ale nie mogłem znaleźć samodzielnej wersji tego, gdy szukałem wcześniej.

 16
Author: Stephen Deken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:17

Próbowałem zarówno SpiderMonkey i V8. Ze SpiderMonkey ' em nie mogłem nic zrobić. Nie mogłem nawet zdobyć przykładów na mozilla.org do kompilacji.

V8 działa nie-Of-The-box i mam trochę podstawowej interakcji C++ Javascript idzie dość szybko. Istnieje kilka list google dla osób korzystających z V8 i znalazłem już odpowiedzi na większość moich pytań.

 16
Author: postfuturist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 04:17:14

Uważam, że v8 działa tylko na procesorach x86, x64 i Arm w tej chwili. Co może być wadą.

W odniesieniu do bezpieczeństwa wątku, od 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.

Możesz przeczytać więcej w pliku źródłowym(wygląda jak dokumentacja doxygen, ale nie wydaje się, aby umieścić go gdziekolwiek).

Update: ten komentarz został usunięty, prawdopodobnie jakiś czas temu. Wygląda na to, że v8 ma teraz obiekt Isolate, który reprezentuje instancję silnika. A pojedyncza instancja Isolate może być używana tylko w jednym wątku na raz, ale inne instancje Isolate mogą być używane w innych wątkach w tym samym czasie.

 8
Author: Daniel James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-31 18:39:10

Czy Java Script naprawdę jest odpowiednim językiem do twojej gry? Wiele gier używa języka programowania Lua do tworzenia skryptów. Jest łatwy do zintegrowania, jest bardzo mały, kompiluje się na prawie każdej platformie i jest łatwy do nauczenia.

To nieco off topic, ale myślenie nieszablonowe może być ważne, aby wszystko było dobrze .

 8
Author: Laserallan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 20:49:16

Benchmark , który pojawił się, gdy V8 po raz pierwszy uderzył w scenę, która pokazała, że V8 jest 1000% (lub cokolwiek) szybszy niż inne silniki, był mocno ważony w kierunku faworyzowania silników, które były dobre w rekurencji. Jeśli twój kod używa dużej ilości rekurencji, V8 może dać ci znaczną przewagę pod względem szybkości. Dla" prawdziwego świata " (przynajmniej obecnie) rzeczy internetowych, SquirrelFish Extreme wydaje się być zwycięzcą w tej chwili (Zobacz mój post na blogu na temat dla wyników mojego własne, nieformalne testy).

Jak zauważyli inni, łatwość integracji i jakość dokumentacji mogą przeważać nad czystą szybkością. To nie znaczy, że jack nie będzie wysyłał!

 6
Author: Andrew Hedges,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 02:30:00

Mówiąc o silniku skryptowym i c++ można również rozważyć chaiscript . Jest zbliżony do skryptu ecma (~Javascript) i bardzo łatwy do osadzenia w c++.

Sprzedający ze strony:

... ChaiScript natomiast został zaprojektowany od podstaw z myślą o integracji z C++. ... ChaiScript nie ma meta-kompilatora, nie ma zależności bibliotek, nie ma kompilacji wymagania systemowe i brak starszego bagażu jakiegokolwiek rodzaju. At can work bezproblemowo z dowolnym C++ funkcje, które na to narażasz. Nie posiada mówiąc wprost o dowolnym typie, jest to funkcja centryczna.

Z ChaiScript możesz dosłownie rozpocząć skryptowanie aplikacji przez dodanie trzech linijek kodu do programu i nie modyfikowanie w ogóle budować kroki.

 4
Author: schoetbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 05:21:30

Poczekałbym na TraceMonkey, kolejną ewolucję SpiderMonkey ' a. Szybsze i lepiej zaprojektowane. (Wykorzystuje kod przekazany z Adobe Flash ).

Tracemonkey szczyci się tym, że znacznie szybciej wykonuje powtarzalne czynności, agresywnie optymalizując strukturę w czasie wykonywania w oparciu o rzeczywiste użycie, co może być przydatne przy rozbudowie gry.

 3
Author: Kent Fredric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 15:52:13

Spróbuj Javascript. NET:

Http://javascriptdotnet.codeplex.com/

Implementuje Google V8. Możesz kompilować i uruchamiać Javascript bezpośrednio z kodu. NET z nim, a także dostarczać obiekty CLI do wykorzystania przez kod Javascript, jak również. A V8 jest prawdopodobnie najlepszym silnikiem kiedykolwiek stworzonym pod względem wydajności, generuje natywny kod z Javascript.

 2
Author: Jordane Green,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 12:09:51

Możesz również spojrzeć na V8 z Google. Jest całkiem nowy.

 1
Author: EndangeredMassa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 15:57:07

Chciałbym mieć oko na v8, ponieważ krzyczy szybki silnik javascript, i jestem pewien, że będzie rozwijać wsparcie między platformami, jak rośnie do dojrzałości.

 1
Author: ethyreal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 21:43:52