Eu tenho um problema de software que se encaixa na abordagem funcional da programação, mas o mercado-alvo estará no sistema operacional Android. Eu pergunto porque existem linguagens funcionais que são compiladas na VM do Java, mas Dalvik bytecode! = Java bytecode.
Como alternativa, você sabe se o dx
utilitário pode converter de maneira inteligente os .class
arquivos gerados a partir de linguagens funcionais como o Scala?
Editar : para adicionar um pouco mais de utilidade à comunidade e também para me ajudar a escolher melhor, posso refinar a pergunta um pouco?
- Você já usou algum idioma alternativo com o Dalvik? Quais?
- Quais são algumas "pegadinhas" (problemas) que eu posso encontrar?
- O desempenho é aceitável? Com isso, quero dizer que o aplicativo ainda se sente responsivo ao usuário.
Eu nunca fiz o desenvolvimento de telefones celulares, mas cresci em dispositivos restritos e não tenho a ilusão de que exista um custo para o uso de linguagens não padrão na plataforma. Eu só preciso saber se o custo é tal que devo usar minha abordagem na linguagem padrão (ou seja, aplicar princípios funcionais na linguagem OOP).
fonte
Respostas:
Há uma postagem de blog de Christian Neukirchen chamada Programming for Android with Scala que mostra como criar programas Scala para Android. Parece que
dex
pode lidar com o Scala, mas você precisa usar uma ferramenta como o ProGuard para reduzir o tamanho da biblioteca de classes do Scala, porquedex
, caso contrário, importará todo o tempo de execução do Scala.Há também algum trabalho em andamento na programação do Android com Erjang e Clojure .
fonte
dex
afinal é otimizado para lidar não apenas com o bytecode Java, mas também com as convenções do bytecode do Java (você verá alguma discussão sobre isso nos links que forneci anteriormente) - mas direcionando a VM Dalvik diretamente. É possível que isso acabe sendo mais rápido que adex
rota Java .Kawa é uma variante adorável, mas pouco conhecida, do Scheme, que existe silenciosamente há muitos anos e funciona tanto na JVM quanto na Dalvik, nativamente . Portanto, semelhante ao Mirah, sua saída não inclui VM extra e inclui apenas bibliotecas importadas explicitamente. O Kawa tem muitas macros padrão (incluindo algumas específicas para APIs do Android) que resultam em uma boa sintaxe limpa (supondo que uma não seja contrária aos parênteses) e adiciona alguns itens saborosos no topo do Scheme, como "promessas" (avaliação lenta e futuros) em um). A linguagem é bastante robusta e bem documentada, e tem sido ativamente mantida e evoluída desde os primeiros dias do Java.
O Java Advent Calendar resume os méritos de Kawa com alguns exemplos e links informativos.
fonte
Ao lado de scala, posso sugerir que você dê uma olhada no mirah no Android, aqui estão alguns detalhes: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/
Então, o que torna essa abordagem "melhor" do que as outras línguas? O Mirah é uma linguagem de tipo estático com semelhança com o ruby. O que permite um estilo funcional sem dúvida melhor do que o java. Normalmente, 'portar' uma linguagem para o Android é problemático porque você também precisa portar a biblioteca padrão. Mirah evita isso, evitando ter uma lib padrão. No material referenciado, há uma boa visão geral da experiência do REAL WORLD executando o mirah no Android e como ele acabou. (tente 2)
fonte
Houve muito movimento no Clojure no Android ( https://github.com/clojure-android/neko ) Neko .
Há problemas de desempenho relacionados à Dalvik VM e ao Clojure Compiler; esses problemas estão sendo resolvidos lentamente.
Uma apresentação sobre o status atual (julho de 2015): https://www.youtube.com/watch?v=mVXTcAEKgF8&index=9&list=PLZdCLR02grLoBx0Y5ZrpdmLxc160PIwzQ
fonte
Ainda não está lá, mas Miguel de Icaza, um cara que sabe uma coisa ou duas sobre a Davlik VM, diz que "o F # para droid está na sua lista de coisas a fazer ". Então, eu diria que um pacote oficial está chegando.
fonte