Как работает MonoTouch? - PullRequest
       11

Как работает MonoTouch?

16 голосов
/ 21 сентября 2009

Я был бы очень признателен, если бы кто-нибудь мог кратко объяснить мне, каков общий подход к реализации таких вещей, как MonoTouch? Я действительно поражен, потому что это не первый пример, который я вижу, когда люди получают какую-то платформу, такую ​​как Java, и переводят ее в нечто вроде C / Objective-C. Я не могу себе представить, как переводятся такие вещи, как сборщик мусора и прочее.

Заранее спасибо.

РЕДАКТИРОВАТЬ : Я понимаю теоретическую возможность перевода одного языка на другой. Мой вопрос немного более технический: они реализуют полную среду выполнения в ObjC и связывают ее? (Сомневаюсь ...) Или они просто переводят код C # в ObjC / binary / etc?

Ответы [ 3 ]

39 голосов
/ 22 сентября 2009

MonoTouch не является переводчиком. Это просто среда выполнения Mono, работающая на iPhone, с некоторыми хитростями, чтобы сделать его совместимым с ограничениями iPhone.

Обычная среда исполнения Mono - это не только JIT, она также обрабатывает GC, отражение, слой ввода-вывода, многопоточность, исключения и т. Д. Есть также библиотеки классов. Чтобы ваше приложение работало на iPhone, многое из этого должно быть включено в приложение. Похудение это представляет некоторые проблемы. Кроме того, iPhone предотвращает генерацию кода времени выполнения JIT, выполняет только подписанный код и не поддерживает динамические библиотеки.

MonoTouch использует компоновщик IL для объединения только тех частей библиотек классов, которые использует ваш код, в один двоичный файл IL. Затем он использует компиляцию AOT для предварительной генерации всего собственного кода, который JIT обычно генерирует из IL, а затем связывает это вместе со средой выполнения без JIT в один собственный двоичный файл, который можно подписать. Наконец, IL удаляется из управляемого двоичного файла. оставляя только метаданные.

8 голосов
/ 21 сентября 2009

Monotouch использует компиляцию Ahead-Of-Time для создания одного статически скомпилированного файла, поэтому он не реализует среду выполнения .Net на iPhone. Monotouch использует привязку к библиотекам iPhone, доступным для C #. Нет перевода на Objective-C.

По сути, это дает вам знакомство с работой в C # и связанной с ней цепочкой инструментов при демонстрации библиотечных вызовов базовой ОС iPhone.

Мигель ди Икаса объяснил это немного в подкасте Stackoverflow, где он был гостем. ссылка

0 голосов
/ 21 сентября 2009

Monotouch - это, вероятно, порт Mono для iPod.

Сам Mono является реализацией среды выполнения .NET (и некоторых инструментов разработки) с открытым исходным кодом в различных * nix средах.

Это был огромный труд во главе с Мигелем де Иказа, который рано осознал важность .NET и приступил к переносу его на открытые платформы. Между прочим, он получил большую поддержку от самого MicroSoft, так как MONO дал неоднородность между родным .NET и моно.

Итак, первый ответ: вам нужно быть хорошо организованным, трудолюбивым гением.

Второй ответ - больше Comp Compidity. «Завершение Тьюринга» - это минимальный набор функций, который система должна рассматриваться как программируемый компьютер. Это на самом деле очень маленький набор - вычитать, сравнивать, разветвлять, читать и хранить.

Теория состоит в том, что любая система "Turing Complete" может делать все, что может делать любая другая система "Turing Complete". Таким образом, при наличии любой достаточно полной языковой среды программирования вы сможете эмулировать ее, используя другую программную среду.

Есть множество примеров этого вокруг. Jpython запускает эмулированный C-Python в Java JVM. Два моих личных фаворита - это , в котором в вашем браузере запускаются оригинальные игры спектра zX и Машина сборки Knuth MIX , которые оба являются чистым javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...