Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Monotouch предположительно является портом Mono на iPod.

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

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

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

Второй ответ — больше о компьютерной науке.«Полный Тьюринг» — это минимальный набор функций, который необходим системе, чтобы считаться программируемым компьютером.На самом деле это очень маленький набор — вычитание, сравнение, ветвление, чтение и сохранение.

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

Вокруг есть множество примеров.Jpython запускает эмуляцию C Python в Java JVM.Два моих личных фаворита: который запускает оригинальные игры zX Spectrum в вашем браузере и Сборочная машина Knuth MIX оба из которых являются чистым JavaScript.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top