Langages fonctionnels qui se compilent sur la machine virtuelle Dalvik d'Android? [fermé]

16

J'ai un problème logiciel qui correspond à l'approche fonctionnelle de la programmation, mais le marché cible sera sur le système d'exploitation Android. Je demande parce qu'il existe des langages fonctionnels qui se compilent sur la machine virtuelle de Java, mais Dalvik bytecode! = Java bytecode.

Alternativement, savez-vous si l' dxutilitaire peut convertir intelligemment les .classfichiers générés à partir de langages fonctionnels comme Scala?

Edit : Afin d'ajouter un peu plus de serviabilité à la communauté, et aussi pour m'aider à mieux choisir, puis-je affiner un peu la question?

  • Avez-vous utilisé d'autres langues avec Dalvik? Lesquels?
  • Quels sont les "problèmes" (problèmes) que je pourrais rencontrer?
  • Les performances sont-elles acceptables? Par cela, je veux dire que l'application se sent toujours sensible à l'utilisateur.

Je n'ai jamais fait de développement de téléphones portables, mais j'ai grandi sur des appareils contraints et je ne me fais aucune illusion qu'il y a un coût à utiliser des langages non standard avec la plateforme. J'ai juste besoin de savoir si le coût est tel que je devrais appliquer mon approche dans le langage par défaut (c'est-à-dire appliquer les principes fonctionnels dans le langage POO).

Berin Loritsch
la source
J'ai mis à jour la question. Merci @geekosaur pour votre réponse initiale. Ce sont les informations de départ que je cherchais.
Berin Loritsch
J'ai entendu des chuchotements sur le café Haskell de personnes faisant cela avec FFI + Haskell + Courage. Je crois qu'il y a une bibliothèque sur github / hackage pour ça
Daniel Gratzer

Réponses:

7

Il y a un article de blog de Christian Neukirchen intitulé Programmation pour Android avec Scala qui montre comment créer des programmes Scala pour Android. Il semble dexpouvoir gérer Scala, mais vous devez utiliser un outil comme ProGuard pour réduire la bibliothèque de classes Scala à la taille, car dexsinon, vous importerez l'intégralité du runtime Scala.

Il y a aussi des travaux en cours sur la programmation Android avec Erjang et Clojure .

geekosaure
la source
1
Il semble que presque toutes les options que vous avez proposées ont de graves pénalités en termes de performances. Cela me dit que les options ne sont pas encore assez mûres pour les heures de grande écoute. Peut-être dans une autre année?
Berin Loritsch
Tant que vous n'utilisez pas de grandes parties de la bibliothèque de classes de scala, il ne devrait pas y avoir de pénalité de performance significative. De plus, vous pouvez automatiser l'ensemble du processus avec maven.
Kim
@Berin: Je pense que l'avenir n'utilisera pas les langages de ciblage JVM - dexest après tout optimisé pour traiter non seulement le bytecode Java mais aussi les conventions de bytecode Java (vous en verrez une discussion dans les liens que j'ai fournis plus tôt) - mais le ciblage directement la VM Dalvik. En théorie, cela pourrait finir par être plus rapide que la dexroute Java .
geekosaur
1
Et pour ceux qui se demandent: le bytecode Dalvik VM est documenté: opcodes , formats d'instructions . Je vois certaines possibilités pour les optimisations de judas pas possibles en ciblant la JVM tout de suite, sans parler des optimisations plus intelligentes utilisant directement l'architecture Dalvik.
geekosaur
@Kim, l'article que j'ai trouvé indique que le problème de performances réside dans les différences entre les algorithmes de chargement de classe pour Java et Dalvik. Si je reste à l'écart des fonctionnalités de langage dynamique de Scala, je devrais pouvoir éviter les problèmes de chargement de classe. Ce même problème a tourmenté les autres options. C'est encore assez nouveau en ce moment. Je vais peut-être finir par l'essayer sur ce projet - c'est une preuve de concept de toute façon.
Berin Loritsch
7

Kawa est une variante charmante mais peu connue de Scheme qui existe silencieusement depuis de nombreuses années et fonctionne à la fois sur la JVM et sur Dalvik, nativement . Par conséquent, à l'instar de Mirah, sa sortie n'inclut aucune machine virtuelle supplémentaire et inclut uniquement des bibliothèques explicitement importées. Kawa a beaucoup de macros standard (y compris certaines spécifiques aux API Android) qui font une belle syntaxe propre (en supposant que l'une n'est pas opposée aux parenthèses), et ajoute quelques goodies savoureux en plus de Scheme, comme "promesses" (évaluation paresseuse et futurs dans une). Le langage est assez robuste et bien documenté, et a été activement maintenu et évolue depuis les premiers jours de Java.

Le calendrier de l'Avent Java résume les mérites de Kawa avec quelques exemples et liens informatifs.

punaise
la source
Wow, merci de me diriger vers Kawa! J'ai eu hâte de faire du développement Android non Java et cela semble vraiment prometteur.
Evicatos
1

À côté de scala, je peux vous suggérer de jeter un œil sur mirah sur android, voici quelques détails: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Alors, qu'est-ce qui rend cette approche «meilleure» que les autres langues? Mirah est un langage typé statique ressemblant au rubis. Ce qui permet un style fonctionnel sans doute meilleur que java.Généralement, le `` portage '' d'une langue vers Android est problématique, car vous devez également porter la bibliothèque standard. Mirah évite cela en évitant d'avoir une bibliothèque standard. Dans le matériel référencé, il y a un bon aperçu de l'expérience REAL WORLD avec Mirah sur Android et comment cela s'est avéré. (essayez 2)

AndreasScheinert
la source
1
Veuillez ne pas republier la même réponse, tout ce que vous aviez à faire pour demander que votre réponse ne soit pas supprimée après l'avoir modifiée était de la signaler pour une attention modérée.
yannis