2009-09-21 14 views
16

Naprawdę doceniam, że ktoś może mi krótko wyjaśnić, jakie jest ogólne podejście do wdrażania takich rzeczy jak MonoTouch? Jestem naprawdę zaskoczony, ponieważ nie jest to pierwszy przykład, który widzę, gdy ludzie mają platformę Java i sprawiają, że przekłada się to na coś w stylu C/Objective-C. Naprawdę nie wyobrażam sobie, jak tłumaczone są rzeczy takie jak Garbage collector.Jak działa MonoTouch?

Z góry dziękuję.

EDYCJA: Rozumiem teoretyczną możliwość tłumaczenia jednego języka na inny. Moje pytanie jest nieco bardziej techniczne: czy implementują one pełne środowisko uruchomieniowe w ObjC i pakują je? (Wątpię w to ...) Czy po prostu tłumaczą kod C# na ObjC/binary/etc?

Odpowiedz

8

Monotouch używa kompilacji Ahead-Time-Time do utworzenia pojedynczego skompilowanego statycznie pliku - dlatego nie implementuje środowiska wykonawczego .Net w telefonie iPhone. Monotouch używa powiązania z bibliotekami iPhone'a wystawionymi na C#. Nie ma tłumaczenia na Objective-C.

Zasadniczo daje to znajomość pracy w języku C# i powiązanego z nią zestawu narzędzi podczas wyświetlania wywołań bibliotek bazowego systemu operacyjnego iPhone OS.

Miguel di Icaza wyjaśnił to trochę na podcastie Stackoverflow, w którym był gościem. link

+1

* "aby nie zaimplementować środowiska wykonawczego .Net na iPhonie" * - ta instrukcja jest ** niepoprawna ** lub przynajmniej wprowadza w błąd. Środowisko wykonawcze jest obecne, w rzeczywistości środowisko wykonawcze jest zawarte w "skompilowanym statycznie pliku", do którego się odwołujesz. – cdhowie

0

Monotouch jest prawdopodobnie portem Mono dla iPoda.

Samo samo w sobie jest implementacją open source środowiska wykonawczego .NET (i niektórych narzędzi programistycznych) w różnych środowiskach * nix.

To była ogromna robota kierowana przez Miguela de Icaza, który wcześnie zdał sobie sprawę ze znaczenia .NET i postanowił przenieść ją na otwarte platformy. Okazało się, że otrzymał on bardzo dużo wsparcia od samego MicroSoft, ponieważ MONO zapewniało nieopisaną zgodność pomiędzy natywnym .NET i mono.

Pierwsza odpowiedź brzmi: być dobrze zorganizowanym, pracowitym geniuszem.

Druga odpowiedź to więcej Comp Sciency. "Turing Complete" to minimalny zestaw funkcji, które system musi być uważany za programowalny komputer. Jest to bardzo mały zestaw - odejmuj, porównuj, rozgałęź, czytaj i przechowuj.

Teoria mówi, że każdy system "Turing Complete" może zrobić wszystko, co może zrobić każdy inny system "Turing Complete". W związku z tym, biorąc pod uwagę rozsądnie kompletne środowisko języka programowania, powinieneś być w stanie emulować go za pomocą innego środowiska programowego.

Istnieje wiele przykładów tego. Jpython uruchamia emulatora C python w Java JVM. Moje dwa osobiste ulubione to which runs original zX spectrum games in your browser i Knuth MIX assembeler machine oba z nich są czystym javascript.

+0

Dziękuję za odpowiedź! Jestem jednak świadomy ukończenia Turinga i innych rzeczy związanych z kompem, ale moje pytanie jest bardziej techniczne: jak to robią? Czy oni po prostu implementują środowisko wykonawcze i jakoś pakują je do aplikacji? Albo co? – Anton

+0

Zaczynają od standardu, który określa, jakie składniki muszą być obecne w środowisku .NET, a następnie implementują te komponenty tak, aby były zgodne ze standardem. – Eric

+0

Rozumiem to. Ale znowu, jak działa aplikacja MonoTouch, napisana w .NET, na iPhone'ie? Mają tam runtime? Albo po prostu w jakiś sposób przetłumaczyć to na Obj-C/Arm Asm/cokolwiek? – Anton

39

MonoTouch nie jest tłumaczem. Jest to po prostu środowisko uruchomieniowe Mono działające na iPhonie, z fantazyjnymi sztuczkami, które czynią go kompatybilnym z ograniczeniami iPhone'a.

Konwencjonalny Mono "środowisko wykonawcze" to nie tylko JIT, obsługuje również GC, odbicie, warstwę I/O, wątki, wyjątki itd. Istnieją również biblioteki klas. Aby aplikacja działała na iPhonie, wiele rzeczy musi być dołączonych do aplikacji. Odchudzanie go stanowi pewne wyzwania. Ponadto iPhone blokuje generowanie kodu JIT, uruchamia tylko podpisany kod i nie zezwala na biblioteki dynamiczne.

To, co robi MonoTouch to użycie łącznika IL do połączenia tylko części bibliotek klas, które wykorzystuje twój kod do pojedynczego pliku binarnego IL. Następnie wykorzystuje kompilację AOT do wstępnego wygenerowania całego kodu natywnego, który JIT normalnie generowałby z IL, a następnie łączy go z środowiskiem wykonawczym bez JIT w pojedynczy natywny plik binarny, który można podpisać. W końcu, IL jest usuwany z zarządzanego pliku binarnego. pozostawiając tylko metadane.