Estoy trabajando en la creación de una aplicación para iPhone con Titanium Mobile 1.0 y veo que se compila en un binario nativo de iPhone. ¿Como funciona esto? Parece que se necesitaría mucho trabajo pesado para analizar el código JavaScript y hacer una traducción directa a Objective-C sin tener un lenguaje de superconjunto como Objective-J y Cappuccino de 280 North.
javascript
objective-c
titanium
Darrell Brogdon
fuente
fuente
Respuestas:
Titanium toma su código Javascript, lo analiza y lo preprocesa y luego lo precompila en un conjunto de símbolos que se resuelven en función de los usos de sus aplicaciones de las API de Titanium. A partir de esta jerarquía de símbolos, podemos construir una matriz de dependencia de símbolos que se asigne a los símbolos de la biblioteca Titanium subyacentes para comprender qué API (y dependencias relacionadas, marcos, etc.) necesita específicamente su aplicación. Estoy usando la palabra símbolo de forma semi-genérica, ya que es un poco diferente según el idioma. En iPhone, el símbolo se asigna a un verdadero símbolo C que finalmente se asigna a un archivo .o compilado que se ha compilado para arquitecturas ARM / i386. Para Java, bueno, es más o menos un archivo .class, etc. Una vez que el front-end puede comprender su matriz de dependencia, invocamos el compilador SDK (es decir, GCC para iPhone,
Entonces, una forma simple de pensarlo es que su código JS se compila casi uno a uno en los símbolos representativos en el país nativo. Todavía hay un intérprete ejecutándose en modo interpretado, de lo contrario, cosas como el código dinámico no funcionarían. Sin embargo, es mucho más rápido, mucho más compacto y es lo más parecido al mapeo nativo puro que puede obtener.
Obviamente, todavía tenemos mucho espacio para mejorar esto y trabajar en eso. Hasta ahora, en nuestra última prueba 1.0, es casi indistinguible del mismo código directo objetivo-c (ya que en la mayoría de los casos está exactamente asignado a eso). Sin embargo, desde el punto de vista de CompSci, ahora podemos comenzar a optimizar cosas que un ser humano realmente no podría hacer fácilmente, al igual que el compilador GCC ya lo hace hoy.
fuente
Como dijo jhaynie, la aplicación está compilada en código nativo, pero todavía hay un intérprete en el lugar para ejecutar algunos javascript, lo que permite que la aplicación sea muy dinámica.
appcelerator titanio
fuente
Si empaqueto mi código simple y amplio, obtengo un archivo gzip de ~ 80 MB (código original ~ 1kB). Dentro del paquete, entre otros, puede encontrar mis archivos html y js de origen. También hay muchas bibliotecas (ssl por ejemplo) enviadas con el paquete (porque puede tener acceso de bajo nivel a muchas cosas dentro de este marco).
Creo que toman su código y envuelven algún tipo de software de interpretación y bibliotecas. En mi caso, sería como si empaquetara mi código html y js junto a un pequeño navegador que solo muestra mi sitio.
Sin embargo, siempre que el código funcione en todos los sistemas compatibles de la misma manera, es algo bueno.
fuente