Jak działa Appcelerator Titanium Mobile?

79

Pracuję nad stworzeniem aplikacji na iPhone'a z Titanium Mobile 1.0 i widzę, że kompiluje się do natywnego pliku binarnego dla iPhone'a. Jak to działa? Wydaje się, że przeanalizowanie kodu JavaScript i zrobienie bezpośredniego tłumaczenia na Objective-C wymagałoby wiele wysiłku, bez posiadania supersetowego języka, takiego jak Objective-J firmy 280 North i Cappuccino.

Darrell Brogdon
źródło
4
jest to oprogramowanie typu open source. dlaczego nie zajrzysz pod maskę?
Gabriele Petrioli
17
@Gaby, myślę, że jeśli jestem ciekawa, to są też inni, więc czy jest lepszy sposób na rozpowszechnianie informacji niż publiczne zapytanie?
Darrell Brogdon,
2
@Darrell, zgadzam się całkowicie ... nie próbowałem cię uderzyć, po prostu pomyślałem, że najszybszą drogą (jeśli potrzebujesz szczegółów) będzie bezpośrednie sprawdzenie kodu .. przepraszam, jeśli wyszedł w niewłaściwy sposób ..
Gabriele Petrioli
1
mały punkt: Objective-J to
nadzbiór
2
Zadałem to pytanie niedawno i otrzymałem znacznie bardziej aktualną odpowiedź z informacjami, które nie zostały opisane w odpowiedziach na tej stronie. Oto pytanie: stackoverflow.com/questions/19060554/ ...
BT

Odpowiedzi:

147

Titanium pobiera kod Javascript, analizuje go i przetwarza wstępnie, a następnie wstępnie kompiluje do zestawu symboli, które są rozpoznawane w oparciu o wykorzystanie przez aplikacje interfejsów Titanium API. Na podstawie tej hierarchii symboli możemy zbudować macierz zależności symboli, która jest mapowana na podstawowe symbole biblioteki Titanium, aby zrozumieć, które interfejsy API (i powiązane zależności, struktury itp.) Są potrzebne konkretnie dla Twojej aplikacji. Używam tego słowa w sposób półgeneryczny, ponieważ różni się on nieco w zależności od języka. W iPhonie symbol jest odwzorowywany na prawdziwy symbol C, który ostatecznie jest mapowany na skompilowany plik .o, który został skompilowany dla architektur ARM / i386. W przypadku Javy jest to mniej więcej plik .class itd. Gdy front-end zrozumie macierz zależności, wywołujemy kompilator SDK (np. GCC dla iPhone'a,

Tak więc, prosty sposób, aby o tym pomyśleć jest taki, że twój kod JS jest skompilowany prawie jeden do jednego w reprezentatywne symbole w ojczyźnie. Wciąż istnieje interpreter działający w trybie interpretowanym, w przeciwnym razie rzeczy takie jak kod dynamiczny nie będą działać. Jednak jest znacznie szybszy, bardziej kompaktowy i jest tak zbliżony do czystego mapowania natywnego, jak tylko możesz.

Oczywiście nadal mamy dużo miejsca, aby to poprawić i nad tym pracować. Jak dotąd, w naszych ostatnich testach 1.0, jest prawie nie do odróżnienia od tego samego bezpośredniego kodu celu-c (ponieważ w większości przypadków jest dokładnie odwzorowany na to). Z punktu widzenia CompSci, możemy jednak teraz zacząć optymalizować rzeczy, których człowiek naprawdę nie byłby w stanie łatwo zrobić - podobnie jak kompilator GCC już dziś.

jhaynie
źródło
Wow, to naprawdę brzmi świetnie. Dziękuję za wyjaśnienie. Nigdy nie przypuszczałem, że w AppCelerator włożono tyle wysiłku. Tak trzymaj!
MrMage
12
Czy dobrze zrozumiałem, że nie ma konwersji Javascript-> Objective-C i Javascript-> Java, ale jest to bezpośrednio do kodu natywnego? Nie ma więc sposobu, aby spojrzeć na utworzony kod Objective-C lub Java?
janpio
1
Czy kompilacja jest wykonywana na serwerze Titanium? Widziałem, że Wikipedia en.wikipedia.org/wiki/Appcelerator_Titanium
adib
1
@djaqeel clojure, scala, jruby, nashorn
gtrak
3

Jak powiedział jhaynie, aplikacja jest skompilowana do kodu natywnego, ale nadal istnieje interpreter do uruchamiania niektórych javascript, co pozwala aplikacji być bardzo dynamiczną.

Appcelerator Titanium

Evan B.
źródło
1

Jeśli spakuję mój prosty, przykładowy kod, otrzymam archiwum gzip ~ 80 MB (oryginalny kod ~ 1kB). W pakiecie - między innymi - można znaleźć moje źródłowe pliki html i js. Istnieje również wiele bibliotek (na przykład ssl) dostarczanych z pakietem (ponieważ możesz mieć niskopoziomowy dostęp do wielu rzeczy w tej strukturze).

Myślę, że biorą twój kod i otaczają jakieś oprogramowanie interpretujące i biblioteki. W moim przypadku byłoby tak, jakbym spakował kod html i js obok małej przeglądarki, która wyświetla tylko moją witrynę.

Jednak jeśli kod działa na każdym obsługiwanym systemie w ten sam sposób, to miło.

upadły
źródło
4
Kiedy otwieram plik .ipa utworzony przez Titanium, widzę coś, co wygląda na standardową skompilowaną aplikację. Nie można znaleźć żadnego kodu HTML ani JavaScript.
Darrell Brogdon
1
Myślę, że to, co opisałeś, jest tym, co robi Cordova, ale tytan działa inaczej
Rohit Chatterjee
pakuj kod html i js za pomocą małej przeglądarki ... a elektron rodzi się 5 lat później.
Caio Iglesias,