Tengo un problema de software que se ajusta al enfoque funcional de la programación, pero el mercado objetivo estará en el sistema operativo Android. Pregunto porque hay lenguajes funcionales que se compilan en la VM de Java, pero Dalvik bytecode! = Java bytecode.
Alternativamente, ¿sabe si la dx
utilidad puede convertir de manera inteligente los .class
archivos generados a partir de lenguajes funcionales como Scala?
Editar : para agregar un poco más de ayuda a la comunidad y también para ayudarme a elegir mejor, ¿puedo refinar un poco la pregunta?
- ¿Has utilizado algún idioma alternativo con Dalvik? ¿Cuáles?
- ¿Cuáles son algunos "problemas" que podría encontrar?
- ¿Es aceptable el rendimiento? Con eso, quiero decir que la aplicación todavía se siente receptiva al usuario.
Nunca realicé el desarrollo de teléfonos móviles, pero crecí en dispositivos restringidos y no tengo la ilusión de que el uso de lenguajes no estándar con la plataforma tenga un costo. Solo necesito saber si el costo es tal que debería calzar mi enfoque al lenguaje predeterminado (es decir, aplicar principios funcionales en el lenguaje OOP).
fuente
Respuestas:
Hay una publicación de blog de Christian Neukirchen llamada Programación para Android con Scala que muestra cómo construir programas Scala para Android. Parece que
dex
puede manejar Scala, pero necesita usar una herramienta como ProGuard para reducir el tamaño de la biblioteca de clases Scala porque dedex
lo contrario importará todo el tiempo de ejecución de Scala.También hay un trabajo en curso en la programación de Android con Erjang y Clojure .
fuente
dex
después de todo, está optimizado para tratar no solo el bytecode de Java sino también las convenciones de bytecode de Java (verás un poco de discusión sobre esto en los enlaces que proporcioné anteriormente), sino la segmentación Dalvik VM directamente. Posiblemente eso podría terminar siendo más rápido que ladex
ruta Java .Kawa es una variante encantadora pero poco conocida de Scheme que ha existido en silencio durante muchos años y se ejecuta de forma nativa tanto en JVM como en Dalvik . Por lo tanto, similar a Mirah, su salida no incluye VM extra y solo incluye bibliotecas importadas explícitamente. Kawa tiene muchas macros estándar (incluidas algunas específicas para las API de Android) que crean una sintaxis limpia y agradable (suponiendo que una no sea reacia a los paréntesis), y agrega algunas cosas sabrosas además de Scheme, como "promesas" (evaluación perezosa y futuros en uno). El lenguaje es bastante robusto y bien documentado, y se ha mantenido y evolucionado activamente desde los primeros días de Java.
El Calendario de Adviento de Java resume los méritos de Kawa con algunos ejemplos y enlaces informativos.
fuente
Además de Scala, puedo sugerirle que eche un vistazo a Mirah en Android, aquí hay algunos detalles: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/
Entonces, ¿qué hace que este enfoque sea "mejor" que los otros idiomas? Mirah es un lenguaje tipeado estático parecido a ruby. Lo que permite un estilo funcional posiblemente mejor que java. Por lo general, 'portar' un lenguaje a Android es problemático porque también necesita portar la biblioteca estándar. Mirah evita esto evitando tener una lib estándar. En el material referenciado hay una buena descripción de la experiencia REAL WORLD ejecutando mirah en Android y cómo resultó. (prueba 2)
fuente
Ha habido mucho movimiento en Clojure en Android ( https://github.com/clojure-android/neko ) Neko .
Hay problemas de rendimiento relacionados con la máquina virtual Dalvik y el compilador Clojure; Estos problemas se están resolviendo lentamente.
Una presentación sobre el estado actual (julio de 2015): https://www.youtube.com/watch?v=mVXTcAEKgF8&index=9&list=PLZdCLR02grLoBx0Y5ZrpdmLxc160PIwzQ
fuente
Todavía no está del todo, pero Miguel de Icaza, un tipo que sabe una o dos cosas sobre el VM Davlik dice " F # for droide está en su lista de cosas que hacer ". Entonces diría que viene un paquete oficial.
fuente