Pergunta

Estou trabalhando na criação de um aplicativo para iPhone com o Titanium Mobile 1.0 e vejo que ele se compila com um binário nativo do iPhone. Como é que isso funciona? Parece que seria preciso muito trabalho pesado para analisar o código JavaScript e fazer uma tradução direta para o Objective-C sem ter uma linguagem super-super-robusta, como o objetivo do 280 North's Objective-J e Cappuccino.

Foi útil?

Solução

O Titanium pega seu código JavaScript, analisa e pré-processam e, em seguida, pré-compilam em um conjunto de símbolos que são resolvidos com base nos usos de seus aplicativos das APIs de titânio. A partir dessa hierarquia de símbolos, podemos criar uma matriz de dependência de símbolos que mapeia os símbolos da biblioteca de titânio subjacentes para entender quais APIs (e dependências relacionadas, estruturas, etc.) especificamente o seu aplicativo precisa. Estou usando a palavra símbolo de maneira semi-genérica, pois é um pouco diferente com base no idioma. No iPhone, o símbolo mapeia um símbolo C verdadeiro que finalmente mapeia um arquivo .O compilado que foi compilado para arquiteturas ARM/i386. Para Java, bem, é mais ou menos um arquivo .classe, etc. Depois que o front -end pode entender sua matriz de dependência, invocamos o compilador SDK (ou seja, GCC para iPhone, Java para Android) para compilar seu aplicativo no final binário nativo.

Portanto, uma maneira simples de pensar sobre isso é que seu código JS é compilado quase um a um nos símbolos representativos na nat pelos dados. Ainda há um intérprete em execução no modo interpretado, caso contrário, coisas como código dinâmico não funcionariam. No entanto, é muito mais rápido, muito mais compacto e é o mais próximo do mapeamento nativo puro possível.

Obviamente, ainda temos muito espaço para melhorar isso e trabalhar nisso. Até agora, em nossos mais recentes testes 1.0, é quase indistinguível do mesmo código direto Objective-C (pois na maioria dos casos é exatamente mapeado para isso). Do ponto de vista da Compsci, agora podemos começar a otimizar as coisas que um humano realmente não poderia fazer isso facilmente - assim como o compilador do GCC já faz hoje.

Outras dicas

Como Jhaynie disse, o aplicativo é compilado no código nativo, mas ainda existe um intérprete no local para executar algum JavaScript, o que permite que o aplicativo seja muito dinâmico.

Appcelerator Titanium

Se eu empacotar meu código amplo simples, recebo um arquivo GZIP ~ 80MB (código original ~ 1KB). No pacote - entre outros - você pode encontrar meus arquivos HTML e JS de origem. Há também muitas bibliotecas (SSL, por exemplo) enviadas com o pacote (porque você pode ter acesso de baixo nível a muitas coisas nessa estrutura).

Eu acho que eles pegam seu código e envolvem algum tipo de software e bibliotecas de intérpretes. No meu caso, seria como eu empacotar meu código HTML e JS ao lado de um pequeno navegador que exibe apenas meu site.

No entanto, desde que o código funcione em todos os sistemas suportados da mesma maneira, é uma coisa legal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top