2013-03-28 11 views
6

Przeczytałem artykuł od Xamarina i natknąłem się na konkretne słowo informatyki: Przed nami. Według niektórych wyników wyszukiwania Google, to AOT nie pozwala na generowanie kodu w czasie wykonywania. Czy to oznacza, że ​​nie obsługuje dynamicznych elementów?IOS: AOT z wyprzedzeniem, co to jest?

Wiem, że to pytanie może być głupie i mam 0 wiedzy w IOS, mam nadzieję, że dostaniesz odpowiedź tutaj. dzięki

Odpowiedz

3

Po pierwsze, jaka jest definicja dynamiczna? Dla ogółu społeczeństwa dynamiczny kod oznacza, że ​​aplikacja może zmieniać funkcjonalność w czasie wykonywania. W przypadku platformy iOS pliki binarne są podpisywane, aby zapobiegać złośliwemu oprogramowaniu. A Apple nie lubi aplikacji, które mogą ładować funkcje w czasie wykonywania.

An ahead-of-time (AOT) compiler nie ma nic wspólnego z dynamicznym kodem jako takim. Ma to związek z językiem pośrednim, który jest just-in-time compilation (JIT). Największym przykładem języka pośredniego jest kod bajtowy Java; skompiluj raz, uruchom wszędzie. Podczas wykonywania aplikacji Java skompilowany kod to JIT na natywny kod maszynowy. Kompilator AOT robi to z wyprzedzeniem, aby zaoszczędzić czas.

Na platformę iOS Xcode kompiluje Objective-C do natywnej wersji binarnej urządzenia.

3

Innym sposobem patrzenia na to na przykładzie ...

w .NET, można użyć nazw Reflection.Emit do generowania i skompilować kod w czasie wykonywania.

Np. Można utworzyć "IDE" z polem tekstowym, które akceptuje C#. Po kliknięciu przycisku, który C# może zostać skompilowany przez framework .Net do biblioteki niestandardowej, która jest ładowana dynamicznie lub do pełnowartościowego pliku wykonywalnego, który jest uruchamiany jako nowy proces.

To jest niesamowicie potężny w połączeniu z resztą przestrzeni nazw System.Reflection. Możesz badać obiekty w środowisku wykonawczym i kompilować niestandardowy kod na podstawie dowolnych kryteriów.

To powiedziawszy ... Problemy zazwyczaj przeważają nad korzyściami w większości przypadków. Przede wszystkim jest to ogromny problem z bezpieczeństwem, zwłaszcza podczas pracy na urządzeniu konsumenckim.

Możliwe byłoby stworzenie aplikacji, która nie miałaby niczego zbliżonego do złośliwego kodu, przejęcie jej przez Apple, pobranie kodu aplikacji ze swojego serwera WWW, skompilowanie go i wykonanie. Ten nowy kod nie zostałby poddany audytowi ...

Naprawdę nie ma powodu, aby robić to w aplikacji konsumenckiej.