...

пятница, 27 июня 2014 г.

[Перевод] Проект dot42 переходит на новый формат (C# 2 Java)

Проект dot42




image

Основная цель проекта dot42 — создание Android-приложений с использованием языка C#, без необходимости устанавливать интерпретатор Mono, используя Microsoft Visual Studio или SharpDevelop. Проект вызвал сильный интерес со стороны разработчиков мобильного програмного обеспечения с момента публикации технического превью в январе 2013. К сожалению, в связи со сложностью предметной области, начиная с января 2014 года, активность сообщества начала значительно снижаться.



Основная функция и одновременно фундоментальная проблема проекта — это конвертация скомпилированного C# кода (IL код) в байт-код Java, который исполняется в системе Android на виртуальной машине Davlik или ART. Разработка и поддержка такого проекта требует глубоких и узкоспециализированных знаний в обоих форматах скомпилированного байт-кода и уверенных знаний в области создания и поддержки компиляторов и кросс-компиляторов. Количество специалистов в этой области на данный момент невелико.


Конвертация в DEX



Существует множество недостатков в перекодировании IL-кода в Dex, которые постепенно устраняются в процессе разработки проекта dot42. В настоящее время принято решение расширить .Net SDK с помощью добавления Java. Команда dot42 привлекла PhD-специалиста в области кросс-компиляции и программной конвертации для анализа текущего состояния проекта. Его первой задачей является принятие решения, каким образом осуществлять конвертацию C# кода к Java-коду.

Принципиально, существует два подхода:



  • Конвертация на уровне байт-кода (из IL в Java байт-код);

  • Конвертация на уровне исходных кодов (из C# в Java);




image

Конвертация байт-кода против Конвертация исходного кода




Проблема отладки



Ошибка в конвертации байт-кода из IL в Dex часто приводит к тому, что виртуальная машина Java генерирует исключение «java.lang.VerifyError». Данное исключение создается, когда интерпретатор Java замечает, что делается попытка загрузить класс, который ранее не проходил фазу проверки. Нахождение ошибок в этом коде — это как попытаться определить, что было испорчено в обеде, ковыряясь в туалете ресторана. Типичным примером в этом случае является то, что DEX-код успешно исполняется в виртуальной машине Davlik, но падает внутри ART.

Конвертация исходных кодов не обладает этим недостатком, компилятор Java позаботиться о корректном расположении байт-кода приложения.
Эксперименты с реализацией



Представьте, что команде dot42 необходимо добавить новую функциональность в проект, например, поддержать async/await из C#. Работа по PoC в байт-кодах в этом случае, намного труднее и затратнее, чем аналогичные доработки при конвертации исходных кодов с C# на Java.
Использование компилятора



Компиляторы для различных виртуальных машин и архитектурны CPU используют различные механизмы оптимизации кода. IL-код, генерируемый C# компилятором, использует стековую архитектуру. С другой стороны, виртуальные машины Davlik и ART используют регистровую модель. Скомпилированный C# компилятором IL-код уже не содержит информация, которая была бы полезна для компилятора Java. Напротив, при конвертации исходных кодов, мы позволяем Java компилятору генерировать более эффективный байт-код.
Roslyn



Теперь, когда Microsoft предоставляет C# компилятор с открытым исходным кодом «Roslyn», содержащий богатый API по анализу кода, у команды dot42 появился мощный инструмент, позволяющий конвертировать исходный код из C# в Java.
Прозрачная разработка



В конечном итоге, для разработчиков, использующих dot42, конвертация исходного кода из C# в Java сделает процесс более прозрачным и поддерживаемым. Этот процесс позволит открывать готовый Java код в популярных IDE Eclipse или Android Studio.
Дальнейшее развитие проекта



Команда dot42 планирует выпуск утилит компилятора под лицензией GPLv2. Следует отметить, что лицензия GPL не распространяется на программное обеспечение, созданное с помощью dot42. Таким образом, благодаря проекту, у разработчиков появится возможность создавать нативные Android приложения с помощью C#.

Код исполнения библиотеки уже выложен в Git под лицензий Apache License 2.0. Любой желающий может создать форк проекта dot42 и расширить подход к конвертации IL-кода в DEX.

Пользователям больше не нужно иметь Professional-лицензию для создания коммерческих приложний с использованием dot42. В следующем обновлении планируется удаление активации.

Команда dot42 собирается заменить конвертер байт-кодов конвертором исходных кодов. Все утилиты разрабатываемы утилиты также будут использовать лицензию GPLv2, а код исполнения бибиотеки — Apache License 2.0.


Большое спасибо, что дочитали до конца!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий