Задать вопрос
Satori_Kanzo
@Satori_Kanzo
Make code not war

Возможно ли использование компилируемых ЯП на Android?

Просто появилась мысль в голове - интерпретируемые ЯП медленнее, за счет необходимости его компиляции "на ходу", так чем оправдано их использование на мобильных платформах?
  • Вопрос задан
  • 2390 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@Mintormo
Возможно. Под Android можно писать на C++. Но Гугл вроде не рекомендует. Насчет плюсов интерпретируемого ЯП. Единственное что приходит в голову: изоляция прикладного уровня от системного. Гугл может экспериментировать с низкоуровневыми компонентами системы не ломая прикладной интерфейс для программистов. По этой же причине C# удобен для MS. Можно, в принципе, позволить себе приличные изменения оставив при этом те же инструменты для прикладников.
Ответ написан
Комментировать
@MarkusD
все время мелю чепуху :)
Не стоит путать трансляцию, интерпретацию и компиляцию. Постановка вопроса неточна в целом.

Java является транслируемым языком, а не интерпретируемым. Трансляция идет в опкод Java LLVM (в обычном случае) или в опкод Dalvik LLVM (в случае сборки для Android). После трансляции, исполняемый DEX (Dalvik Executable) файл содержит предварительный (сырой) байткод. Это уже не текст, который надо интерпретировать, это уже код операционных команд виртуальной машины низкого уровня. В момент запуска на конкретном устройстве, DEX файл дополнительно обрабатывается (всего один раз, при запуске приложения): из него удаляются элементы совместимости, блоки типа "if( value )", где value - это "final bool == false" (и много еще чего); после чего подается на обработку процессору LLVM.

Поэтому можно не беспокоиться о медленности интерпретации Java кода, т.к. интерпретации нет. Возможно меня даже анафеме предадут за то, что я яву назвал транслируемым, а не компилируемым языком. :)
Больше обо всем этом можно узнать в документации по Sun Java Machine и в документации Android Dalvik Machine.

Однако, возвращаясь к вопросу о компилируемых языках. Сам язык, как моя практика показывает, значения тут не имеет. Любой язык может стать как транслируемым, так и компилируемым или интерпретируемым. Для разработки на Android существует уже много инструментов с поддержкой множества самых разных языком. Кое-кто и python использует в качестве языка разработки проектов.
Существует так называемая связка поддержки низкого уровня. В нее входят средства компиляции языков в команды непосредственно процессор(а|ов). Для Android этим целям служат языки C и C++.
И, раз уж в вопросе делается акцент на максимальное быстродействие программы, можно предположить что именно этот момент интересен больше всего.

Native Development Kit - NDK - позволяет создавать низкоуровневые модули для последующего подключения их в основной код проекта (написанный обычно на Java). Во времена ранних версий (1.6-2.0-2.2) андроида, команда разработчиков рекомендовала минимизировать объем низкоуровневого кода и опираться только на средства Java.
Однако, со временем стало понятно что низкоуровневый код пользуется большой популярностью и функциональность NDK стала увеличиваться. С каких-то пор стало и вовсе возможно создавать исключительно C/C++ приложения без кода на яве, только это тот еще геморрой.
Использовать C/C++ для разработки на андроид не сложнее использования оных в разработке для других ОС, но ровно до момента, когда надо пообщаться со стороной на яве. Для налаживания общения между C/C++ и Java кодом в NDK имеется интерфейс JNI. С JNI проще всего познакомиться на сайте Oracle, в разделах документации к Java.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы