Pregunta

Realmente agradecería que alguien me podía explicar brevemente, ¿cuál es el enfoque general para la implementación de las cosas como MonoTouch? Estoy muy sorprendido porque no es el primer ejemplo que veo que la gente experimenta alguna plataforma como Java y hacen que se traduce en algo así como C / Objective-C. Realmente no puedo imaginar cómo se están traduciendo cosas como colector de basura y otras cosas.

Gracias de antemano.

Editar : Entiendo posibilidad teórica de la traducción de un idioma a otro. Mi pregunta es un poco más técnico: Cómo se implementan un tiempo de ejecución total en ObjC y empaquetarlo? (Lo dudo ...) O simplemente traducir código C # en ObjC / binario / etc?

¿Fue útil?

Solución

MonoTouch utiliza la compilación Antes de plazo para producir un único archivo compilado estáticamente - por lo que no implementa el tiempo de ejecución .Net en el iPhone. MonoTouch utiliza la unión a las bibliotecas iPhone expuestos a C #. No hay traducción a Objective-C.

Básicamente, le da la familiaridad de trabajo en C # y su cadena de herramientas asociado, mientras que la exposición de las llamadas a las bibliotecas del iPhone OS subyacente.

Miguel di Icaza explicó esto un poco en el podcast Stackoverflow donde fue invitado.

Otros consejos

MonoTouch no es un traductor. Es simplemente el tiempo de ejecución Mono se ejecuta en iPhone, con un poco de engaño de lujo para que sea compatible con las restricciones del iPhone.

El Mono "tiempo de ejecución" convencional no es sólo el JIT, que también se encarga de GC, la reflexión, I / O capa, roscado, excepciones, etc. Hay también las bibliotecas de clases. Para que su aplicación se ejecute en el iPhone, gran parte de este deben ser incluidos con la aplicación. Adelgazar abajo presenta algunos retos. Además, el iPhone impide JIT generación de código en tiempo de ejecución, el código sólo se ejecuta firmado, y no permite que las bibliotecas dinámicas.

¿Qué MonoTouch hace es utilizar un enlazador IL combinar sólo las partes de las bibliotecas de clases que utiliza su código en un único binario IL. A continuación, utiliza la compilación AOT comprobar la validez de generar todo el código nativo que el JIT normalmente generar a partir de la IL, a continuación, vincula esto junto con el tiempo de ejecución JIT menos en un único binario nativo que puede ser firmado. Por último, la IL se extrae del binario administrado. dejando sólo metadatos.

MonoTouch es presumiblemente un puerto de Mono para el iPod.

sí Mono es una implementación de código abierto del tiempo de ejecución de .NET (y algunas herramientas dev) en diversos entornos * nix.

Este fue un trabajo masivo dirigido por Miguel de Icaza, que pronto se dio cuenta de la importancia de .NET y se dedicó a portarlo a las plataformas abiertas. Dicho sea de paso que receieved una gran cantidad de apoyo de la propia Microsoft como MONO dio ineteroparability entre .NET nativo y mono.

Así que la primera respuesta es que necesita ser un genio trabajando duro bien organizado.

La segunda respuesta es más Comp Sciency. "Completar Turing" es un conjunto mínimo de funciones que un sistema necesita ser considerado un ordenador programable. Su podía comprender un conjunto muy pequeño -. Restar, comparar, rama y leer y almacenar

La teoría es que cualquier sistema de "Turing completo" puede hacer cualquier cosa en cualquier otro sistema "Turing completo" puede hacer. Así que dado cualquier entorno de lenguaje de programación razonablemente completa que debe ser capaz de emular utilizando otro entorno del programa.

Hay numerosos ejemplos de esto alrededor. JPython corre el pitón emula C en una JVM de Java. Mis dos favoritos son que corre juegos originales espectro ZX en su navegador y Knuth MIX máquina assembeler ambos de los cuales son puros javascript.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top