2009-07-20 17 views

Respuesta

7

No creo que pueda convertir directamente un fragmento de JavaScript en un ejecutable utilizando V8, pero probablemente pueda crear una aplicación que agrupe el motor V8 con JavaScript y lo ejecute de forma independiente.

Puede encontrar toda la información sobre V8 en its project page.

También tenga en cuenta que JavaScript no se puede compilar por completo, ya que es un lenguaje dinámico. Con V8, está compilado JIT (como .NET, por ejemplo). Todavía es posible convertirlo en un ejecutable independiente (como .NET, por ejemplo).

Si desea desarrollar autónomamente aplicaciones que hacen uso de HTML para la representación, también puede consultar Adobe Air.

+0

Estoy tratando de hacer otra cosa. ¿Cómo se puede agrupar el javascript en el exe entonces? –

+0

Consulte la parte "incrustación" de la página del proyecto V8. – Blixt

+0

Puede agrupar JavaScript muy fácilmente en un .exe utilizando el proyecto Node-Webkit - https: // github.com/rogerwang/node-webkit – denysonique

6

Javascript no se puede compilar solo una vez. El lenguaje tiene eval que es bastante ampliamente utilizado. (para JSON, por ejemplo). Necesitas llevar el JIT y todo el tiempo de ejecución.

JIT aquí es solo una optimización, no la forma de deshacerse del compilador/intérprete.

+2

"V8 compila el código fuente de JavaScript directamente en el código de máquina cuando se ejecuta por primera vez. No hay códigos de bytes intermedios ni intérpretes. El acceso a la propiedad se maneja mediante código de caché en línea que puede ser parcheado con otras instrucciones de máquina como se ejecuta V8 ". –

+3

Sí, pero tenga en cuenta la parte "cuando se ejecuta por primera vez". JavaScript no puede compilarse completamente en byte-code, tiene que ser compilado mientras se ejecuta, debido a su naturaleza dinámica. – Blixt

+5

@the_drow: El problema es que con 'eval' alimentas el nuevo código JavaScript todo el tiempo. – EFraim

3

Node.js incrustaciones V8. Este podría ser un buen ejemplo para aprender.

3

Ha habido algunos intentos para convertir js en código nativo, no es algo que se pueda usar en la producción de ninguna manera, sino más bien de interés académico. El intérprete de Rhino para Java tiene una opción para convertir js en bytecode (java), por lo que un enfoque es convertir a bytecode y luego de bytecode a native con GCJ. Hay un poco de discusión sobre Rhino y GCJ, pero no sé si alguien alguna vez intentó exactamente eso. https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/c3tqyLZ19fw/8V4HeuMtIXUJ

Otro enfoque es el uso de Python, específicamente Py Py que está escrito en un subconjunto no estándar de Python llamado rPython. rPython no está diseñado para el consumo humano, pero tiene el beneficio de ser algo que se puede compilar en nativo. Un experimento interesante (aunque alocado) fue compilar Javascript para Python y luego, en algunos casos, Python pasa a ser válido como rPython y puede compilarse como nativo con el compilador rPython.

http://mozakai.blogspot.com/2010/07/experiments-with-static-javascript-as.html

Si un archivo .exe es realmente importante, me Bundle V8 con su aplicación, ya que incluso si se puede compilar a js nativa, usted todavía necesita un intérprete completo si se utiliza cualquier eval() o similar . No sería difícil escribir una herramienta para agrupar todo en un archivo .exe, siempre y cuando a sus usuarios no les importe un archivo exe 8MB o un archivo V8.dll de 8MB.

Como último pensamiento, Big G ha comenzado a permitir aplicaciones "nativas" basadas en chrome (google: "chrome packaged apps"). Tienen acceso de bajo nivel al sistema y pueden usar el renderizador WebKit, lo que le permite crear su GUI en CSS y HTML, y tienen sus propias ventanas e iconos, por lo que no es obvio que se estén ejecutando dentro de Chrome. Esto probablemente aún sea prematuro, pero es algo a tener en cuenta en el campo de aplicaciones de escritorio.

Cuestiones relacionadas