sheet operator guide android dynamic clojure jvm

android - operator - clojure{}



Android adverso a los idiomas dinĂ¡micos (5)

Creo que leí en algún momento que, debido a que Android se ejecuta en la VM Dalvik, los lenguajes dinámicos para la JVM (Clojure, Jython, JRuby, etc.) tendrían dificultades para obtener un buen rendimiento en Dalvik (y, por lo tanto, en Android). Si mal no recuerdo, el razonamiento fue que bajo el capó, para lograr el tipado dinámico, se hizo un poco de toqueteo con el bytecode de java y que la traducción de bytecode-> dalvik no captaría esto fácilmente.

Entonces, ¿debería evitar un lenguaje dinámico de JVM si quiero desarrollar para Android?

EDITAR: Creo que debería haber proporcionado un poco más de contexto. Estaba considerando usar Clojure para desarrollar aplicaciones para Android. Estaba pensando en usar Clojure por algunas razones:

  • Quiero aprender FP

  • Realmente no me importa aprender Java

  • Clojure parece tener algunos conceptos de lenguaje muy interesantes (STM por ejemplo).

Sin embargo, cuando traté de escribir aplicaciones para Android en Clojure, descubrí que hay un problema de rendimiento que es inaceptable. Pero encontré una publicación en el blog que decía que los lenguajes de tipado dinámico (Clojure, por ejemplo) tendrían problemas debido a la manipulación de bytecode necesaria para obtener el tipado dinámico. Así que estaba buscando confirmación independiente de que esto es cierto o no. Debería haber sabido mejor que asumir que en este tema en particular todos los lenguajes JVM con tipado dinámico se podrían tratar de la misma manera. Creo que hice una pregunta bastante amplia, así que supongo que no debería sorprenderme que la gente no entendiera lo que estaba preguntando.


los lenguajes dinámicos para la JVM tendrían dificultades para obtener un buen rendimiento en Dalvik

Los lenguajes dinámicos tienen dificultades para obtener un buen rendimiento, punto. Si desea rendimiento, use un lenguaje estáticamente tipado como Java (o C #, F # etc.).



Dado el hardware relativamente compacto del teléfono en funcionamiento, probablemente solo tengas que apuntar a Java y no preocuparte por un lenguaje dinámico de jvm. Los idiomas dinámicos en jvm no serán tan eficientes como el java a mi entender.

Además, Android SDK es bastante sensato y fácil de escribir, ya que no creo que experimentes muchos beneficios al usar otra cosa.


Dan Bornstein hizo una presentación sobre Dalvik en Google I / O. Vale la pena verlo para conocer el sistema en general, incluidas las limitaciones que le interesan. El problema específico de los idiomas distintos de Java compilados en bytecode de Java aparece durante las preguntas y respuestas.

Remco van ''t Veer tiene un proyecto github donde ha parcheado Clojure para trabajar en Android. Tim Riddell ha escrito un tutorial sobre cómo usarlo .

Como se menciona aquí por @sean, a veces hay un problema mayor que solo el rendimiento. Dan Bornstein lo discute cuando se le preguntó acerca de Jython, en ~ 54: 00 en video. Actualmente no hay soporte para lenguajes dinámicos que generen bytecode sobre la marcha (porque la traducción de bytecode no está disponible en tiempo de ejecución).


Hay algunos parches para hacer que clojure funcione.

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

Creo que el verdadero problema es el uso de generadores de código byte por parte de algunos lenguajes dinámicos; no generarán código de bytes para Davlik VM. Por lo tanto, eval no funcionará.