Нужен ли машинному коду среда выполнения? MoSync SDK - PullRequest
3 голосов
/ 19 марта 2011

Может кто-нибудь объяснить Архитектура времени выполнения MoSync?

Ядро VM не является проблемой. Я думаю, что это виртуальная машина, которая работает в Java vm и интерпретирует код построчно.

Но как работает Recompiler Core? Это своего рода компилятор Ahead-Of-Time, который компилирует приложение при запуске в нативном коде? Но тогда я не понимаю картину. Или возможно, что мне нужны другие модули среды выполнения, даже если это машинный код?

Спасибо

Ответы [ 4 ]

9 голосов
/ 25 марта 2011

Я только что увидел, что Маттиас ответил, хотя я забыл опубликовать свой ответ, но я все равно просто опубликую его, так как он уточняет некоторые моменты:)

Во-первых, ваш C / C ++ компилируется в MoSync IL (Intermediate Language) с помощью GCC, используя наш пользовательский бэкэнд GCC. Затем для некоторых платформ (включая Android, Symbian и Windows Mobile) этот IL подается в «pipe-tool», который является ассемблером / компоновщиком / оптимизатором, который может выполнять разные функции для разных платформ. Вот несколько вариантов:

Для JavaME и нашего выпуска Blackberry, который скоро будет выпущен, pipe-tool создает байт-код MoSync, который представляет собой двоичное компактное представление на основе регистров. Этот байт-код упакован вместе со средой выполнения MoSync, которая содержит виртуальную машину. Когда ваши приложения запускаются, он считывает байт-код в память и начинает его интерпретировать.

Для Android, Symbian, Windows Mobile и т. Д. Процесс аналогичен, но вместо интерпретации кода ядро ​​среды выполнения выполняет просмотр всего кода и перекомпилирует его в машинный код ARM на устройстве. Как только это будет сделано, он начнет выполнять только что созданный код ARM.

Для устройств iOS история все же немного другая - вместо преобразования MoSync IL в байт-код MoSync код преобразуется в исходный код на языке C, и создается проект xcode. Есть несколько причин для этого. Одна из них заключается в том, что для iOS динамическая генерация машинного кода ARM невозможна, и мы, поскольку динамическая загрузка кода также не разрешена, работать как виртуальная машина бессмысленно. Кроме того, в юридическом плане мы хотим обеспечить, чтобы способ производства приложений полностью соответствовал правилам и рекомендациям Apple.

Одной из сильных сторон MoSync является эта гибкость; используя упорядоченное промежуточное представление, в которое в конечном итоге преобразуется любой язык ввода и из которого всегда получается бинарный файл для любой платформы, мы получаем единую точку контакта между входом и выходом. Это позволяет нам добавлять новые языки ввода независимо от того, какие платформы поддерживаются, и наоборот, добавлять поддержку новых платформ независимо от языков ввода.

Когда люди спрашивают нас: «Может ли MoSync разрешить запуск программ Java на iPhone?» или "Это могло заставить программы C ++ работать на Windows Phone 7?" ответ всегда "да".

Если мы добавим поддержку Java в качестве языка ввода, он будет автоматически работать на любой платформе, поддерживаемой MoSync.

Когда мы добавляем поддержку Windows Phone 7, тогда АВТОМАТИЧЕСКИ все языки ввода, которые поддерживает MoSync, будут использоваться для этой платформы.

Я знаю, в это трудно поверить, но это правда :)

3 голосов
/ 04 апреля 2011

Один из малоизвестных фактов о MoSync заключается в том, что он не просто создан для работы с процессорами, Это также хорошо для преобразования в другие языки, например, у одного из инженеров MoSync есть платформа, работающая на Javascript / HTML 5.0.

В зависимости от используемой вами платформы происходят разные вещи, поэтому MoSync переходит на промежуточный язык в соответствии с тем, что лучше для целевой платформы.

Существует также 4 разных вкуса MoSync IL, все они совместимы друг с другом, но смоделированы с преимуществом различных архитектур процессоров.

Система IL имеет 128 регистров, 6 из которых являются глобальными, остальные являются локальными для функций.

Кстати, байт-код MoSync не совпадает с MoSync IL, так как IL очень богат метаданными.

Я был бы рад обсудить более мелкие детали или архитектуру, просто отправьте свои вопросы.

1 голос
/ 22 марта 2011

Recompiler Core - это базовое ядро ​​+ AOT-компилятор, где базовое ядро ​​- это реализация системных вызовов MoSync. При первом запуске приложения компилятор AOT проходит через байт-код MoSync и преобразует его в собственный код, например РУКА. Во время преобразования все системные вызовы MoSync отображаются непосредственно на функции в базовом ядре. Приложение, наконец, выполняется путем перехода к началу секции преобразованного кода.

Относительно модулей. Каркас приложения внедряется в байт-код при связывании с соответствующими библиотеками. Системные вызовы и внутренние расширения являются частью базового ядра и, в свою очередь, зависят от системы ресурсов.

1 голос
/ 19 марта 2011

Ядро Recompiler выглядит как типичный динамический компилятор / JIT-компилятор, который перекомпилирует код по мере необходимости.Очевидно, что MoSync использует другое ядро ​​в зависимости от платформы, на которой он работает (VM Core -> Java ME, Generated Core -> IPhone, Recompiler Core -> все остальное), взаимодействуя с системой времени выполнения как подходящей для каждого ядра, хотя это должнобыть в основном прозрачным для пользователей MoSync.

...