Подтвердить что ты не робот

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

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

Спасибо заранее.

EDIT. Я понимаю теоретическую возможность перевода одного языка в другой. Мой вопрос немного более технический: реализуют ли они полное время выполнения в ObjC и связывают его? (Я сомневаюсь...) Или они просто переводят код С# в ObjC/binary/etc?

4b9b3361

Ответ 1

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

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

Miguel di Icaza немного объяснил это в подкасте Stackoverflow, где он был гостем. ссылка

Ответ 2

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

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

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

Ответ 3

Monotouch - это, по-видимому, порт Mono для iPod.

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

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

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

Второй ответ - больше Comp. "Turing Complete" - это минимальный набор функций, которые система должна считаться программируемым компьютером. Его фактический очень маленький набор - вычесть, сравнить, разветкить, прочитать и сохранить.

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

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