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.
javascript
objective-c
titanium
Darrell Brogdon
źródło
źródło
Odpowiedzi:
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ś.
źródło
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
źródło
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.
źródło