¿Lenguajes funcionales que se compilan con la VM Dalvik de Android? [cerrado]

16

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 dxutilidad puede convertir de manera inteligente los .classarchivos 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).

Berin Loritsch
fuente
He actualizado la pregunta. Gracias @geekosaur por tu respuesta inicial. Esa fue la información inicial que estaba buscando.
Berin Loritsch
He escuchado susurros en el café Haskell de personas que hacen esto con FFI + Haskell + Courage. Creo que hay una biblioteca en github / hackage para ello
Daniel Gratzer

Respuestas:

7

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 dexpuede manejar Scala, pero necesita usar una herramienta como ProGuard para reducir el tamaño de la biblioteca de clases Scala porque de dexlo 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 .

geekosaur
fuente
1
Parece que casi todas las opciones que ofreció tienen serias penalizaciones de rendimiento. Eso me dice que las opciones aún no son lo suficientemente maduras para el horario estelar. Tal vez en otro año?
Berin Loritsch
Mientras no use grandes partes de la biblioteca de clases de scala, no debería haber ninguna penalización de rendimiento significativa. Además, puede automatizar todo el proceso con maven.
Kim
@Berin: Creo que el futuro no es usar lenguajes de orientación JVM; dexdespué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 la dexruta Java .
geekosaur
1
Y para aquellos que se preguntan: el código de bytes de Dalvik VM está documentado: códigos de operación , formatos de instrucciones . Veo algunas posibilidades de optimizaciones de mirilla que no son posibles al apuntar a la JVM de inmediato, y mucho menos optimizaciones más inteligentes usando la arquitectura Dalvik directamente.
geekosaur
@Kim, el artículo que encontré decía que el problema de rendimiento estaba en las diferencias entre los algoritmos de carga de clases para Java y Dalvik. Si me mantengo alejado de las características de lenguaje dinámico de Scala, debería poder evitar los problemas de carga de clases. Ese mismo problema plagaba las otras opciones. Todavía es todo bastante nuevo en este momento. Todavía puedo terminar probándolo en este proyecto, es una prueba de concepto de cualquier manera.
Berin Loritsch
7

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.

error
fuente
¡Guau, gracias por señalarme hacia Kawa! He estado ansioso por hacer un desarrollo de Android no Java y esto parece realmente prometedor.
Evicatos
1

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)

AndreasScheinert
fuente
1
Por favor , no vuelva a publicar la misma respuesta, todo lo que tuvo que hacer para pedir que su respuesta no se borre después de editarla fue para marcarla con atención moderada.
Yannis