Как работает Appcelerator Titanium Mobile?

79

Я работаю над созданием приложения для iPhone с Titanium Mobile 1.0 и вижу, что оно компилируется в собственный двоичный файл iPhone. Как это работает? Похоже, потребуется много тяжелой работы, чтобы проанализировать код JavaScript и выполнить прямой перевод в Objective-C без наличия расширенного языка, такого как Objective-J 280 North и Cappuccino.

Даррелл Брогдон
источник
4
это открытый исходный код. почему бы тебе не заглянуть под капот?
Габриэле Петриоли,
17
@Gaby Я полагаю, что если мне любопытно, то и другие тоже. Так что может быть лучше для распространения информации, чем публичный запрос?
Даррелл Брогдон,
2
@ Даррелл, я полностью согласен ... я не пытался вас обидеть, просто подумал, что самый быстрый способ (если вам нужна конкретика) - это проверить код напрямую ... извиняюсь, если получилось не так ...
Габриэль Петриоли
1
маленькая точка: Objective-J - это надмножество javascript
cobbal
2
Я задал этот вопрос совсем недавно и получил гораздо более свежий ответ с информацией, которая не описана в ответах на этой странице. Вот вопрос: stackoverflow.com/questions/19060554/…
BT

Ответы:

147

Titanium берет ваш код Javascript, анализирует и предварительно обрабатывает его, а затем предварительно компилирует его в набор символов, которые определяются на основе ваших приложений, использующих интерфейсы Titanium API. Из этой иерархии символов мы можем построить матрицу зависимостей символов, которая сопоставляется с символами базовой библиотеки Titanium, чтобы понять, какие API (и связанные зависимости, фреймворки и т. Д.) Конкретно нужны вашему приложению. Я использую слово «символ» в полуобщем виде, так как оно немного отличается в зависимости от языка. В iPhone символ отображается на настоящий символ C, который в конечном итоге отображается на скомпилированный файл .o, который был скомпилирован для архитектур ARM / i386. Для Java это более или менее файл .class и т. Д. Когда интерфейсная часть сможет понять вашу матрицу зависимостей, мы вызываем компилятор SDK (например, GCC для iPhone,

Итак, простой способ думать об этом - это то, что ваш JS-код скомпилирован почти один к одному в репрезентативные символы в родной стране. Интерпретатор все еще работает в интерпретируемом режиме, иначе такие вещи, как динамический код, не будут работать. Однако он намного быстрее, намного компактнее и максимально приближен к чистому нативному отображению.

Очевидно, что у нас еще много возможностей для улучшения и работы над этим. Пока что в нашем последнем тестировании 1.0 он почти неотличим от того же прямого кода objective-c (поскольку в большинстве случаев он точно соответствует этому). Однако с точки зрения CompSci, мы можем начать оптимизировать вещи, которые человеку не под силу сделать - во многом так, как компилятор GCC уже делает сегодня.

Джайни
источник
Вау, это действительно здорово звучит. Спасибо за разъяснения. Я и представить себе не мог, что в AppCelerator было вложено столько усилий. Продолжайте в том же духе!
MrMage
12
Правильно ли я понял, что не происходит преобразования Javascript-> Objective-C и Javascript-> Java, но это напрямую в собственный код? То есть нет возможности взглянуть на созданный код Objective-C или Java?
janpio 07
1
Компиляция производится на сервере Titanium? Я видел эту Википедию en.wikipedia.org/wiki/Appcelerator_Titanium
adib
1
@djaqeel clojure, scala, jruby, nashorn
gtrak
3

Как сказала Джайни, приложение скомпилировано в собственный код, но все еще есть интерпретатор для запуска некоторого javascript, который позволяет приложению быть очень динамичным.

аппселератор из титана

Эван Б.
источник
1

Если я упакую свой простой объемный код, я получу gzip-архив размером ~ 80 МБ (исходный код ~ 1 КБ). В пакете, среди прочего, вы можете найти мои исходные файлы html и js. В пакет также входит множество библиотек (например, ssl) (потому что вы можете иметь низкоуровневый доступ ко многим вещам в рамках этой структуры).

Я думаю, что они берут ваш код и оборачивают его каким-то программным обеспечением и библиотеками-интерпретаторами. В моем случае это было бы похоже на то, если бы я упаковал свой код html и js рядом с крошечным браузером, который отображает только мой сайт.

Однако, если код работает одинаково во всех поддерживаемых системах, это хорошо.

упал
источник
4
Когда я открываю .ipa, созданный Titanium, я вижу то, что кажется стандартным скомпилированным приложением. Невозможно найти код HTML или JavaScript.
Даррелл Брогдон
1
Я думаю, что то, что вы описали, это то, что делает Кордова, но Титан работает по-другому
Рохит Чаттерджи
упакуйте html и js код с помощью крошечного браузера ... и электрон родился 5 лет спустя.
Кайо Иглесиас