Pergunta

Eu realmente apreciaria que alguém poderia me explicar brevemente, qual é a abordagem geral para implementar coisas como Monotouch? Estou realmente impressionado porque não é o primeiro exemplo que vejo quando as pessoas recebem alguma plataforma como Java e a transformam em algo como C/Objective-C. Não consigo imaginar como coisas como coletor de lixo e coisas estão sendo traduzidas.

Desde já, obrigado.

EDITAR: Eu entendo a possibilidade teórica de traduzir um idioma para outro. Minha pergunta é um pouco mais técnica: eles implementam Um tempo de execução completo no OBJC e agrupá -lo? (Duvido ...) ou eles apenas traduzem o código C# em objc/binário/etc?

Foi útil?

Solução

A Monotouch usa a compilação antecipada para produzir um único arquivo compilado estaticamente-para que não implemente o tempo de execução .NET no iPhone. O Monotouch usa a ligação às bibliotecas do iPhone expostas ao C#. Não há tradução para o Objective-C.

Basicamente, ele oferece a familiaridade de trabalhar em C# e sua cadeia de ferramentas associadas enquanto exponha as chamadas da biblioteca do sistema operacional subjacente do iPhone.

Miguel Di Icaza explicou isso um pouco no podcast Stackoverflow, onde ele era convidado. link

Outras dicas

Monotouch não é um tradutor. É simplesmente o tempo de execução do Mono no iPhone, com alguns truques chiques para torná -lo compatível com as restrições do iPhone.

O "tempo de execução" mono convencional não é apenas o JIT, também lida com GC, reflexão, camada de E/S, rosqueamento, exceções etc. Há também as bibliotecas de classe. Para que seu aplicativo seja executado no iPhone, muito disso deve ser incluído no aplicativo. Slimming It Down apresenta alguns desafios. Além disso, o iPhone impede a geração de código de tempo de execução do JIT, executa apenas o código assinado e não permite bibliotecas dinâmicas.

O que o Monotouch faz é usar um vinculador de IL para combinar apenas as partes das bibliotecas de classes que seu código usa em um único IL binário. Em seguida, ele usa a compilação AOT para pré-gerar todo o código nativo que o JIT normalmente geraria a partir da IL e vincula isso com o tempo de execução sem JIT em um único binário nativo que pode ser assinado. Finalmente, o IL é retirado do binário gerenciado. deixando apenas metadados.

Monotouch é presumivelmente um porto de mono para o iPod.

O próprio Mono é uma implementação de código aberto do tempo de execução .NET (e algumas ferramentas de dev) em vários ambientes *nix.

Este foi um trabalho maciço liderado por Miguel de Icaza, que percebeu cedo a importância do .NET e começou a portá -lo para abrir plataformas. Incidentalmente, ele recebeu um grande apoio da própria Microsoft, pois o Mono deu a inesoparabilidade entre o nativo .NET e MONO.

Portanto, a primeira resposta é que você precisa ser um gênio bem organizado e duro.

A segunda resposta é mais compaixão. "Turing completo" é o conjunto mínimo de funções que um sistema precisa ser considerado um computador programável. É realmente um conjunto muito pequeno - subtrair, comparar, ramificar e ler e armazenar.

A teoria é que qualquer sistema "completo completo" pode fazer qualquer outro sistema "Turing completo" pode fazer. Portanto, dado qualquer ambiente de linguagem de programação razoavelmente completo, você poderá imitá -lo usando outro ambiente de programa.

Existem inúmeros exemplos disso ao redor. Jpython administra o emula C Python em uma JVM Java. Meus dois favoritos pessoais são que executa jogos originais do ZX Spectrum em seu navegador e Máquina de montagem de mistura de knuth ambos são JavaScript puro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top