Idiomas funcionais que são compilados à Dalvik VM do Android? [fechadas]

16

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 dxutilitário pode converter de maneira inteligente os .classarquivos 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).

Berin Loritsch
fonte
Eu atualizei a pergunta. Obrigado @geekosaur pela sua resposta inicial. Essa foi a informação inicial que eu estava procurando.
Berin Loritsch 30/03
Eu ouvi sussurros no café Haskell de pessoas fazendo isso com FFI + Haskell + Courage. Eu acredito que há uma biblioteca no github / hackage para ele
Daniel Gratzer

Respostas:

7

Há uma postagem de blog de Christian Neukirchen chamada Programming for Android with Scala que mostra como criar programas Scala para Android. Parece que dexpode lidar com o Scala, mas você precisa usar uma ferramenta como o ProGuard para reduzir o tamanho da biblioteca de classes do Scala, porque dex, 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 .

geekosaur
fonte
1
Parece que quase todas as opções que você deu têm sérias penalidades de desempenho. Isso me diz que as opções ainda não estão maduras o suficiente para o horário nobre. Talvez em mais um ano?
Berin Loritsch 30/03
Desde que você não use grandes partes da biblioteca de classes do scala, não deve haver nenhuma penalidade de desempenho significativa. Além disso, você pode automatizar todo o processo com o maven.
Kim
@Berin: Eu acho que o futuro não está usando linguagens de destino da JVM - dexafinal é 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 a dexrota Java .
Geekosaur
1
E para quem se pergunta: o bytecode da Dalvik VM está documentado: códigos de operação , formatos de instruções . Vejo algumas possibilidades de otimizações de olho mágico não possíveis, visando a JVM imediatamente, e muito menos otimizações mais inteligentes usando a arquitetura Dalvik diretamente.
Geekosaur
@ Kim, o artigo que encontrei disse que o problema de desempenho estava nas diferenças entre os algoritmos de carregamento de classe para Java e Dalvik. Se eu ficar longe dos recursos de linguagem dinâmica do Scala, devo evitar os problemas de carregamento de classe. Essa mesma questão atormentou as outras opções. Ainda é tudo novo no momento. Ainda posso acabar testando neste projeto - é uma prova de conceito de qualquer maneira.
Berin Loritsch 30/03
7

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.

erro
fonte
Uau, obrigado por me apontar para Kawa! Eu tenho vontade de fazer algum desenvolvimento Android não Java e isso parece realmente promissor.
Evicatos
1

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)

AndreasScheinert
fonte
1
Por favor , não repita a mesma resposta, tudo o que você precisava fazer para que sua resposta fosse desfeita após a edição foi sinalizá-la para atenção com moderação.
yannis