Я работаю над созданием приложения для iPhone с Titanium Mobile 1.0 и вижу, что оно компилируется в собственный двоичный файл iPhone. Как это работает? Похоже, потребуется много тяжелой работы, чтобы проанализировать код JavaScript и выполнить прямой перевод в Objective-C без наличия расширенного языка, такого как Objective-J 280 North и Cappuccino.
javascript
objective-c
titanium
Даррелл Брогдон
источник
источник
Ответы:
Titanium берет ваш код Javascript, анализирует и предварительно обрабатывает его, а затем предварительно компилирует его в набор символов, которые определяются на основе ваших приложений, использующих интерфейсы Titanium API. Из этой иерархии символов мы можем построить матрицу зависимостей символов, которая сопоставляется с символами базовой библиотеки Titanium, чтобы понять, какие API (и связанные зависимости, фреймворки и т. Д.) Конкретно нужны вашему приложению. Я использую слово «символ» в полуобщем виде, так как оно немного отличается в зависимости от языка. В iPhone символ отображается на настоящий символ C, который в конечном итоге отображается на скомпилированный файл .o, который был скомпилирован для архитектур ARM / i386. Для Java это более или менее файл .class и т. Д. Когда интерфейсная часть сможет понять вашу матрицу зависимостей, мы вызываем компилятор SDK (например, GCC для iPhone,
Итак, простой способ думать об этом - это то, что ваш JS-код скомпилирован почти один к одному в репрезентативные символы в родной стране. Интерпретатор все еще работает в интерпретируемом режиме, иначе такие вещи, как динамический код, не будут работать. Однако он намного быстрее, намного компактнее и максимально приближен к чистому нативному отображению.
Очевидно, что у нас еще много возможностей для улучшения и работы над этим. Пока что в нашем последнем тестировании 1.0 он почти неотличим от того же прямого кода objective-c (поскольку в большинстве случаев он точно соответствует этому). Однако с точки зрения CompSci, мы можем начать оптимизировать вещи, которые человеку не под силу сделать - во многом так, как компилятор GCC уже делает сегодня.
источник
Как сказала Джайни, приложение скомпилировано в собственный код, но все еще есть интерпретатор для запуска некоторого javascript, который позволяет приложению быть очень динамичным.
аппселератор из титана
источник
Если я упакую свой простой объемный код, я получу gzip-архив размером ~ 80 МБ (исходный код ~ 1 КБ). В пакете, среди прочего, вы можете найти мои исходные файлы html и js. В пакет также входит множество библиотек (например, ssl) (потому что вы можете иметь низкоуровневый доступ ко многим вещам в рамках этой структуры).
Я думаю, что они берут ваш код и оборачивают его каким-то программным обеспечением и библиотеками-интерпретаторами. В моем случае это было бы похоже на то, если бы я упаковал свой код html и js рядом с крошечным браузером, который отображает только мой сайт.
Однако, если код работает одинаково во всех поддерживаемых системах, это хорошо.
источник