Главным недостатком Mono для Android является то, что для работы приложений требуется отдельная среда выполнения, отличная от Dalvik. И хотя полный доступ к CLR выглядит весьма привлекательно, проксирование и маршаллинг вызовов от одной среды выполнения к другой могут сильно повлиять на производительность. Так почему бы не убрать промежуточную компиляцию в IL-код и получать сразу рабочий Dex-код? Этим и занимается проект dot42.
В январе, после 1 года разработки, авторы проекта dot42 наконец-то перешли от обещаний к пряникам. И, хотя проект еще не дотягивает до состояния боевого продукта-конкурента Mono, стоит, как минимум, его рассмотреть и попробовать.
Признаюсь, я немного слукавил, сказав, что компилятор dot42 «убирает» IL-код. Это не совсем так. Вместо этого он читает IL-код и конвертирует его в новый язык Register Language или, если короче, RL. Главная разница между IL и RL в том, что IL-код работает на стековой модели выполнения (как и байт-код у Java), а RL-код на регистровой, так же как Dalvik. После получения RL-кода, dot42 производит ряд оптимизаций и наступает этап финальной компиляции. Именно после последнего этапа и получается dex-код, язык среды Dalvik. В чем отличие RL от Dex написано в самом первом посте в блоге разработчиков.
На каждом этапе работы компилятора оригинальная дебаг-информация сохраняется, разумеется, компилятору приходится конвертировать ее из формата PDB в дебаг-формат для dex-кода. dot42 использует adb (Android Debug Bridge) для подключения отладчика в Visual Studio.
После компиляции библиотеки Android'а используются напрямую. Компилятор понимает большинство типов, например, java.lang.Boolean сопоставляется с System.Nullable<bool>. Правда, кое-какие телодвижения с типами данных все-таки придется сделать. Поскольку dot42 оперирует непосредственно с dex-кодом, есть несколько ограничений на функции и возможности C# и .NET. Пожалуй самое главное из них — это отсутствие пользовательских value-типов (структур). В виртуальной машине Dalvik просто нет поддержки таких типов, поэтому и сопоставить структуры никак не получится.
Read more: Habrahabr.ru
Read more: dot42.com
QR:
0 comments:
Post a Comment