Android неблагоприятен для динамических языков - PullRequest
30 голосов
/ 10 июня 2009

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

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


РЕДАКТИРОВАТЬ: Я думаю, я должен был предоставить немного больше контекста. Я подумывал об использовании Clojure для разработки приложений для Android. Я думал об использовании Clojure по нескольким причинам:

  • Я хочу выучить FP

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

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

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

Ответы [ 5 ]

17 голосов
/ 04 июля 2009

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

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

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

3 голосов
/ 10 июня 2009
2 голосов
/ 10 июня 2009

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

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

2 голосов
/ 10 июня 2009

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

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

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

1 голос
/ 28 апреля 2015

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

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

...