30 votes

Android défavorable aux langues dynamiques

Je crois que j'ai lu à un moment que, en raison de Android en cours d'exécution sur le Dalvik VM, le dynamisme des langues pour la JVM (Clojure, Jython, JRuby, etc.) il est difficile d'obtenir de bonnes performances sur Dalvik (et donc sur Android). Si je me souviens bien, le raisonnement était que sous le capot, afin de réaliser le typage dynamique, il y avait un peu de jongler fait avec le bytecode java et que le "bytecode" ->dalvik traduction ne serait pas ce pick up facilement.

Donc dois-je éviter une dynamique de la JVM de la langue si je veux développer pour Android?


EDIT: je suppose que je devrais avoir fourni un peu plus de contexte. J'ai été vu à l'aide de Clojure de développer des applications pour Android. Je pensais à l'aide de Clojure pour quelques raisons:

  • Je veux apprendre FP

  • Je n'ai pas vraiment de soins à apprendre Java

  • Clojure semble avoir très intéressant concepts du langage (STM pour exemple).

Cependant, quand j'ai essayé d'écrire des applications pour Android en Clojure, j'ai trouvé qu'il y a un problème de performance qui est inacceptable. Mais j'ai trouvé un blog qui a dit que typées dynamiquement langues (Clojure par exemple) ont des problèmes en raison de la manipulation de bytecode nécessaires pour obtenir le typage dynamique. Sorte que j'ai été la recherche d'une confirmation indépendante de ce qui est vrai ou ne l'est pas. Je devrais avoir su mieux que de faire l'hypothèse que, dans ce problème particulier tous typées dynamiquement JVM langues peuvent être considérées comme identiques. Je suppose que je n'ai demander à un assez vaste question, donc je suppose que je ne devrais pas être surpris de voir que les gens n'ont pas tout à fait comprendre ce que je leur demandais.

17voto

Matt G Points 1989

Dan Bornstein a donné une présentation sur Dalvik au Google I/O. Il vaut la peine de regarder d'apprendre sur le système en général, y compris les contraintes que vous vous souciez. La question spécifique de la non-Java langages compilés en bytecode Java se présente pendant le Q&A.

Remco van 't Veer a un projet github où il est patché Clojure pour travailler sur Android. Tim Riddell a écrit un tutoriel sur la façon de l'utiliser.

Comme mentionné ici par @sean, il y a parfois un problème plus important que la performance. Dan Bornstein en parle lorsqu'on l'interroge sur Jython, à ~54:00 dans la vidéo. Il n'existe actuellement aucun support pour les langages dynamiques qui génèrent du bytecode à la volée, (parce que le bytecode de la traduction n'est pas disponible au moment de l'exécution).

3voto

Javier Points 33134

Android vient de recevoir des scripts

2voto

Sean McCauliff Points 1051

Il y a quelques correctifs pour faire fonctionner clojure.

http://riddell.us/tutorial/clojure_android/clojure_android.html

Je pense que le vrai problème est l'utilisation de générateurs de code d'octets par certains langages dynamiques; ils ne généreront pas de code octet pour la machine virtuelle Davlik. Par conséquent, eval ne fonctionnera pas.

2voto

Jeremy Wall Points 10643

Étant donné le matériel exigu relativement parlant du téléphone en cours d'exécution, vous devriez probablement cibler java et ne pas vous soucier d'un langage jvm dynamique. Ces langages dynamiques sur le jvm ne seront pas aussi efficaces que le java à ma connaissance.

De plus, le SDK Android est assez sain et facile à écrire car je ne pense pas que vous profiterez de très nombreux avantages en utilisant autre chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X