¿Qué motor Javascript incrustaría en su aplicación? [cerrado]


Quiero incrustar Javascript en un motor de juegos de hobby mío. Ahora que tenemos la 5ª generación de motores Javascript (todos increíblemente rápido), tengo curiosidad por saber qué motor elegirías incrustar en un marco de trabajo de C++ (que incluye la facilidad real de incrustarlo).

Nota: Solo para que quede claro, no estoy interesado en DOM scripting o escribir Javascript en un navegador.

Aquí hay una compilación de enlaces hasta ahora y algunos consejos de la thread

Solo para que conste, me encanta Lua y ya lo he incrustado en los motores de juego unas 5 veces en el trabajo.

Sin embargo, ahora este es un proyecto de hobby, y creo que Javascript es conocido por la mayoría de los desarrolladores web y porque sus desarrolladores ECMA, Flash y Flex, un motor de juego que utiliza Javascript y XML para scripting sería más fácil de usar y atender a una base de usuarios más grande (y uno que hasta ahora no ha tenido la oportunidad de utilizar sus habilidades para los juegos) que uno con Lua (y hay un montón de los que alrededor!).

También para el registro Voy a ir con V8 en este caso, sobre todo porque me gusta su estilo C++.

Author: Miguel, 2008-09-18

10 answers

Mozilla SpiderMonkey es bastante fácil y está bien documentado. Es una API de C, pero es sencillo envolverlo en C++. Se puede compilar para que sea seguro para subprocesos, lo cual es útil para los juegos, ya que es probable que desee tener su lógica principal en un subproceso y la lógica de la interfaz de usuario en un segundo subproceso.

V8 de Google podría ser una buena opción, ya que está utilizando C++, pero no tengo experiencia con él todavía. Según la documentación (gracias a Daniel James ), V8 no es seguro para subprocesos, aunque esto puede cambiar en el futuro.

También Hay WebKit Intérprete, pero no pude encontrar una versión independiente de que cuando yo estaba buscando anterior.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:17

He probado tanto SpiderMonkey como V8. Con SpiderMonkey, no podía hacer que nada funcionara. Ni siquiera pude conseguir los ejemplos en mozilla.org para compilar.

V8 funcionó fuera de la caja y obtuve algunas interacciones básicas de C++ Javascript bastante rápido. Hay algunas listas de Google para las personas que usan V8, y encontré que la mayoría de mis preguntas ya habían sido respondidas allí.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-10 04:17:14

Creo que v8 solo funciona en procesadores x86, x64 y arm en este momento. Lo que podría ser una desventaja.

Con respecto a la seguridad del hilo, de 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.

Puede leer más en el archivo fuente (se parece a la documentación de doxygen, pero parece que no la han puesto en ninguna parte).

Actualizar: Ese comentario ha sido eliminado, probablemente hace algún tiempo. Parece que v8 ahora tiene un objeto Isolate que representa una instancia del motor. Un una única instancia Isolate solo se puede usar en un único subproceso a la vez, pero otras instancias Isolate se pueden usar en otros subprocesos al mismo tiempo.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-31 18:39:10

¿Es realmente Java Script el lenguaje adecuado para su juego? Muchos de los juegos por ahí están usando el lenguaje de programación Lua para scripting. Es fácil de integrar, es muy pequeño, se compila en casi todas las plataformas y es fácil de aprender.

Esto es un poco fuera de tema, pero pensar fuera de la caja puede ser importante para hacer las cosas bien .

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-01 20:49:16

El punto de referencia que salió cuando V8 apareció por primera vez que mostró que V8 era 1000% (o lo que sea) más rápido que otros motores estaba fuertemente inclinado hacia motores que eran buenos en recursión. Si su código usa mucha recursividad, entonces V8 podría darle una ventaja significativa, en cuanto a velocidad. Para" mundo real " (actualmente, al menos) cosas web, SquirrelFish Extreme parece ser el ganador sin duda en este momento (ver mi entrada de blog sobre el tema para los resultados de mi pruebas propias e informales).

Como otros han señalado, la facilidad de integración y la calidad de la documentación pueden prevalecer sobre la velocidad pura. ¡No significa Jack si no envías!

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 02:30:00

Cuando se habla de un motor de scripting y c++ también se podría considerar chaiscript. Está cerca de ecma script (~Javascript) y es muy fácil de incrustar en c++.

Vendedor de la página web:

... ChaiScript, por otro lado, fue diseñado desde cero con la integración con C++ en mente. ... ChaiScript no tiene meta-compilador, no tiene dependencias de biblioteca, no tiene compilación requisitos del sistema y sin equipaje heredado de ningún tipo. En puede trabajar sin problemas con cualquier C++ funciones que expongas a ella. No tiene para ser dicho explícitamente sobre cualquier tipo, es centrado en la función.

Con ChaiScript, literalmente, puede comenzar a crear scripts para su aplicación agregar tres líneas de código a su programa y no modificar su construir pasos en absoluto.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-30 05:21:30

Esperaría a que saliera TraceMonkey, la próxima evolución de SpiderMonkey. Más rápido y mejor diseñado. (Utiliza código donado de Adobe Flash).

Tracemonkey se enorgullece de hacer que las acciones repetitivas sean mucho más rápidas al optimizar agresivamente la estructura en tiempo de ejecución en función del uso real, lo cual es útil para el aumento del juego.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 15:52:13

Prueba Javascript. NET:

Http://javascriptdotnet.codeplex.com /

Implementa Google V8. Puede compilar y ejecutar Javascript directamente desde el código. NET con él, y suministrar objetos CLI para ser utilizados por el código Javascript también. Y V8 es probablemente el mejor motor jamás creado en términos de rendimiento, genera código nativo de 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-08 12:09:51

Es posible que también desee ver V8 de Google. Es bastante nuevo, sin embargo.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 15:57:07

Me gustaría mantener un ojo en v8, ya que está gritando motor de javascript rápido, y estoy seguro de que desarrollará soporte multiplataforma a medida que crece hasta la madurez.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 21:43:52