2009-09-21 5 views
16

J'apprécierais vraiment que n'importe qui pourrait m'expliquer brièvement, quelle est l'approche générale pour mettre en application des choses comme MonoTouch? Je suis vraiment étonné parce que ce n'est pas le premier exemple que je vois quand les gens obtiennent une plate-forme comme Java et la traduisent en quelque chose comme C/Objective-C. Je ne peux pas vraiment imaginer comment des choses comme Garbage collector et d'autres choses sont en cours de traduction.Comment fonctionne MonoTouch?

Merci d'avance.

EDIT: Je comprends la possibilité théorique de traduire une langue dans une autre. Ma question est un peu plus technique: mettent-ils en œuvre un runtime complet dans ObjC et l'associent? (J'en doute ...) Ou ils ne font que traduire le code C# en ObjC/binary/etc?

Répondre

8

Monotouch utilise la compilation Ahead-Of-Time pour produire un seul fichier compilé statiquement - il n'implémente donc pas le runtime .Net sur l'iPhone. Monotouch utilise la liaison aux bibliothèques iPhone exposées à C#. Il n'y a pas de traduction pour Objective-C. Fondamentalement, il vous donne la familiarité de travailler dans C# et sa chaîne d'outils associée tout en exposant les appels de bibliothèque de l'iPhone OS sous-jacent. Miguel di Icaza a expliqué cela un peu sur le podcast Stackoverflow où il était un invité. link

+1

* "de sorte qu'il n'implémente pas l'exécution .Net sur l'iPhone" * - cette déclaration est ** fausse **, ou, à tout le moins, trompeuse. Le runtime est présent, en fait le runtime est contenu dans le "fichier statiquement compilé" que vous référencez. – cdhowie

0

Monotouch est probablement un port de Mono à l'iPod.

Mono lui-même est une implémentation open source de l'environnement d'exécution .NET (et de certains outils de développement) dans divers environnements * nix.

Il s'agissait d'une main-d'œuvre massive dirigée par Miguel de Icaza qui a réalisé très tôt l'importance de .NET et mis sur le portage sur des plates-formes ouvertes. Incidemment, il a reçu beaucoup de soutien de la part de MicroSoft lui-même, car MONO a fourni une inétérabilité entre le .NET natif et le mono.

Donc la première réponse est que vous devez être un génie bien organisé et travailleur.

La deuxième réponse est plus Comp Compiency. "Turing Complete" est l'ensemble minimal de fonctions qu'un système doit être considéré comme un ordinateur programmable. C'est un très petit ensemble - soustraire, comparer, ramifier et lire et stocker. La théorie est que tout système "Turing Complete" peut faire tout ce que n'importe quel autre système "Turing Complete" peut faire. Donc, compte tenu de tout environnement de langage de programmation raisonnablement complet, vous devriez pouvoir l'émuler en utilisant un autre environnement de programme.

Il existe de nombreux exemples de cela. Jpython exécute le émulateur C python dans une JVM Java. Mes deux favoris personnels sont which runs original zX spectrum games in your browser et Knuth MIX assembeler machine qui sont tous les deux en javascript pur.

+0

Merci pour la réponse! Cependant, je suis au courant de l'achèvement de Turing et d'autres choses liées à la science de la communication, mais ma question est plus technique: comment le font-ils? Est-ce qu'ils implémentent simplement une exécution et la regroupent dans l'application? Ou quoi? – Anton

+0

Ils commencent par la norme, qui spécifie quels composants doivent être présents dans un environnement .NET, puis ils implémentent ces composants de manière à ce qu'ils soient conformes à la norme. – Eric

+0

Je comprends cela. Mais encore une fois, comment l'application MonoTouch, écrit en .NET, fonctionne sur iPhone? Ils ont un runtime là-bas? Ou ils traduisent en quelque sorte en Obj-C/Arm Asm/quoi? – Anton

39

MonoTouch n'est pas un traducteur. C'est simplement l'exécution de Mono fonctionnant sur l'iPhone, avec une certaine supercherie pour le rendre compatible avec les restrictions de l'iPhone.

Le "runtime" Mono conventionnel n'est pas seulement le JIT, il gère aussi le GC, la réflexion, la couche d'E/S, le threading, les exceptions, etc. Il y a aussi les bibliothèques de classes. Pour que votre application s'exécute sur l'iPhone, une grande partie de celle-ci doit être incluse dans l'application. L'amincissement présente quelques défis. En outre, l'iPhone empêche la génération de code d'exécution JIT, exécute uniquement du code signé et n'autorise pas les bibliothèques dynamiques.Ce que fait MonoTouch est d'utiliser un éditeur de liens IL pour combiner uniquement les parties des bibliothèques de classes que votre code utilise dans un seul binaire IL. Il utilise ensuite la compilation AOT pour pré-générer tout le code natif que le JIT génèrerait normalement à partir de l'IL, puis le lie avec le runtime JIT-less dans un seul binaire natif pouvant être signé. Finalement, l'IL est retiré du binaire géré. ne laissant que des métadonnées.