Frage

Ich würde es wirklich zu schätzen wissen, dass mir jemand kurz erklären könnte, was ist der allgemeine Ansatz zur Umsetzung von Dingen wie Monotouch? Ich bin wirklich erstaunt, weil es nicht das erste Beispiel ist, das ich sehe, wenn Leute eine Plattform wie Java bekommen und es in so etwas wie C/Objective-C übersetzen lassen. Ich kann mir nicht wirklich vorstellen, wie Dinge wie Müllsammler und Sachen übersetzt werden.

Danke im Voraus.

BEARBEITEN: Ich verstehe die theoretische Möglichkeit, eine Sprache in eine andere zu übersetzen. Meine Frage ist etwas technischer: Implementieren sie Eine vollständige Laufzeit in OBJC Und es bündeln? (Ich bezweifle es ...) Oder sie übersetzen einfach C# Code in OBJC/Binary/etc?

War es hilfreich?

Lösung

Monotouch verwendet eine präzentliche Zusammenstellung, um eine einzelne statisch kompilierte Datei zu erstellen. Daher implementiert sie die .NET-Laufzeit auf dem iPhone nicht. Monotouch verwendet die Bindung an die iPhone -Bibliotheken, die C#ausgesetzt sind. Es gibt keine Übersetzung in Objective-C.

Grundsätzlich gibt es Ihnen die Vertrautheit, in C# und dem zugehörigen Toolchain zu arbeiten und gleichzeitig die Bibliotheksanrufe des zugrunde liegenden iPhone -Betriebssystems aufzudecken.

Miguel Di Icaza erklärte dies im Stackoverflow -Podcast, in dem er Gast war. Verknüpfung

Andere Tipps

Monotouch ist kein Übersetzer. Es ist einfach die Mono -Laufzeit, die auf dem iPhone ausgeführt wird, mit einigen ausgefallenen Tricks, um sie mit den Einschränkungen des iPhone kompatibel zu machen.

Die herkömmliche Mono -Laufzeit ist nicht nur die JIT, sondern auch mit GC, Reflexion, E/O -Ebene, Fadenfaden, Ausnahmen usw. Es gibt auch die Klassenbibliotheken. Damit Ihre App auf dem iPhone ausgeführt werden kann, muss ein Großteil davon in die App enthalten sein. Das Abschneiden stellt einige Herausforderungen. Darüber hinaus verhindert das iPhone die JIT -Laufzeit -Codegenerierung, läuft nur signierten Code und erlaubt keine dynamischen Bibliotheken.

Was Monotouch tut, ist, einen IL -Linker zu verwenden, um nur die Teile der Klassenbibliotheken zu kombinieren, die Ihr Code zu einem einzelnen IL -Binary verwendet. Anschließend wird die AOT-Kompilierung verwendet, um den gesamten nativen Code vorzubereiten, den die JIT normalerweise aus der IL erzeugen würde, und diese dann mit der JIT-freien Laufzeit mit einer einzigen nativen Binärdatei verbindet, die signiert werden kann. Schließlich wird die IL vom verwalteten Binärdatum entzogen. Nur Metadaten verlassen.

Monotouch ist vermutlich ein Mono -Port des iPod.

Mono selbst ist eine Open -Source -Implementierung der .NET -Laufzeit (und einige Entwicklertools) in verschiedenen *Nix -Umgebungen.

Dies war eine massive Arbeit, die von Miguel de Icaza angeführt wurde, der die Bedeutung von .NET früh erkannte und sich darauf machte, sie auf offene Plattformen zu portieren. Aufgabe erhielt er viel Unterstützung von Microsoft selbst, als Mono die Ineteroparabilität zwischen natives .NET und Mono gab.

Die erste Antwort ist also, dass Sie ein gut organisiertes, hart arbeitendes Genie sein müssen.

Die zweite Antwort ist mehr Kompensz. "Turing Complete" ist die Mindestfunktion, die ein System als programmierbarer Computer betrachtet werden muss. Es ist wirklich ein sehr kleiner Satz - subtrahieren, vergleichen, verzweigen und lesen und speichern.

Die Theorie ist, dass jedes "Turing Complete" -System alles tun kann, was jedes andere "Turing Complete" -System tun kann. In Anbetracht einer angemessenen Umgebung mit der Programmiersprache sollten Sie in der Lage sein, sie mit einer anderen Programmumgebung zu emulieren.

Es gibt zahlreiche Beispiele dafür. Jpython leitet die Emulate C Python in einem Java JVM. Meine beiden persönlichen Favoriten sind Dies führt in Ihrem Browser Original -ZX -Spektrumspiele aus und Knuth Mix Asskluer -Maschine Beide sind reines JavaScript.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top