¿Cómo funciona Appcelerator Titanium Mobile?

79

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.

Darrell Brogdon
fuente
4
es de código abierto. ¿Por qué no echa un vistazo debajo del capó?
Gabriele Petrioli
17
@Gaby Me imagino que si tengo curiosidad, también los demás, así que, ¿qué mejor manera de difundir información que preguntando públicamente?
Darrell Brogdon
2
@Darrell, estoy completamente de acuerdo ... no estaba tratando de golpearte, solo pensé que la ruta más rápida (si necesitabas detalles) sería verificar el código directamente ... disculpas si salió de la manera incorrecta ...
Gabriele Petrioli
1
pequeño punto: Objective-J es un superconjunto de javascript
cobbal
2
Hice esta pregunta más recientemente y obtuve una respuesta mucho más actualizada con información que no se describe en las respuestas de esta página. Aquí está la pregunta: stackoverflow.com/questions/19060554/…
BT

Respuestas:

147

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.

jhaynie
fuente
Vaya, esto suena muy bien. Gracias por la aclaración. Nunca imaginé que se hubiera puesto tanto esfuerzo en AppCelerator. ¡Mantener el buen trabajo!
MrMage
12
¿Entendí bien que no se está llevando a cabo una conversión de Javascript-> Objective-C y Javascript-> Java, pero esto es directamente al código nativo? Entonces, ¿no hay forma de echar un vistazo al código Objective-C o Java creado?
2010
1
¿La compilación se realiza en el servidor de Titanium? Vi que Wikipedia en.wikipedia.org/wiki/Appcelerator_Titanium
adib
1
@djaqeel clojure, scala, jruby, nashorn
gtrak
3

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

Evan B.
fuente
1

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.

la caída
fuente
4
Cuando abro el .ipa que crea Titanium, veo lo que parece ser una aplicación compilada estándar. No se puede encontrar ningún código HTML o JavaScript.
Darrell Brogdon
1
Creo que lo que describiste es lo que hace Cordova, pero el titanio funciona de manera diferente
Rohit Chatterjee
empaqueta código html y js con un pequeño navegador ... y 5 años después nace electron.
Caio Iglesias