Android Adverse для динамических языков

Я считаю, что в какой-то момент я прочитал, что из-за того, что Android работает на VM Dalvik, для динамических языков для JVM (Clojure, Jython, JRuby и т.д.) было бы трудно получить хорошую производительность на Dalvik (и, следовательно, на Android). Если я правильно помню, рассуждение состояло в том, что под капотом, чтобы добиться динамического набора текста, было довольно много упражнений с байт-кодом java и что перевод байт-кода- > далвик не стал бы легко подбирать это.

Так следует ли мне избегать динамического JVM-языка, если я хочу разработать для Android?


EDIT: Думаю, я должен был предоставить немного больше контекста. Я рассматривал возможность использования Clojure для разработки приложений для Android. Я думал об использовании Clojure по нескольким причинам:

  • Я хочу узнать FP

  • Мне не интересно изучать Java

  • Clojure, похоже, очень интересные языковые концепции (STM например).

Однако, когда я пытался писать приложения для Android в Clojure, я обнаружил, что проблема с производительностью является неприемлемой. Но я нашел сообщение в блоге, в котором говорилось, что динамически типизированные языки (например, Clojure) будут иметь проблемы из-за манипуляции с байт-кодом, необходимой для получения динамической типизации. Поэтому я искал независимое подтверждение того, что это правда, или нет. Я должен был знать лучше, чем предположить, что в этой конкретной проблеме все динамически типизированные языки JVM можно рассматривать как одно и то же. Наверное, я задал довольно широкий вопрос, поэтому, думаю, я не должен удивляться, что люди не совсем поняли, о чем я просил.

Ответ 1

Дэн Борнштейн дал презентацию о Dalvik в Google I/O. Это стоит посмотреть, чтобы узнать о системе в целом, включая ограничения, о которых вы заботитесь. Конкретная проблема не-Java-языков, скомпилированных в байт-код Java, возникает во время Q & A.

Remco van 't Veer имеет проект github где он исправил Clojure для работы на Android. Тим Ридделл написал учебник о том, как его использовать.

Как уже упоминалось здесь @sean, иногда возникает большая проблема, чем просто производительность. Дэн Борнштейн обсуждает это, когда его спрашивают о Jython, ~ 54: 00 в видео. В настоящее время нет поддержки динамических языков, которые генерируют байт-код on- (потому что перевод байт-кода недоступен во время выполнения).

Ответ 3

Есть некоторые исправления, чтобы сделать работу clojure.

http://riddell.us/tutorial/clojure_android/clojure_android.html

Я думаю, что реальной проблемой является использование генераторов байтовых кодов на некоторых динамических языках; они не будут генерировать байтовый код для Давлик В.М. Поэтому eval не будет работать.

Ответ 4

Учитывая относительно ограниченное аппаратное обеспечение телефона, вы, вероятно, должны просто настроить java и не беспокоиться о динамическом языке jvm. Динамические языки на jvm не будут такими эффективными, как Java для моего понимания.

Кроме того, Android SDK довольно здраво и легко писать, потому что я не думаю, что вы получите очень много преимуществ, используя что-то еще.

Ответ 5

динамические языки для JVM будут затруднены для получения хорошей производительности на Dalvik

Динамические языки труднодоступны для получения хорошей производительности, периода. Если вам нужна производительность, используйте статически типизированный язык, такой как Java (или С#, F # и т.д.).