Maintenant, avec l'annonce de la Prise de Google a précisé un proche avenir de Java par rapport à Android. Mais quelles sont les implications de la Scala et d'autres JVM langages basés sur les développeurs. En particulier:
- Scala est-il de la magie grâce à un compilateur qui produit du bytecode Java. Mais Jack la chaîne n'a pas affaire à du bytecode. Va générer du bytecode à gagner tous les avantages de l'optimisation de la Prise du traitement?
- À partir de Scala 12 seulement Java 8+ est pris en charge. C'est le bytecode généré est de Java 8+ trop. Peut-Jack d'utiliser Java 8 bytecode (sans ou avec des limites)?
- Peut nouvelle prise en charge de Java 8 dispose d'être utilisé pour le développement pour les anciennes versions d'Android (minSdkVersion < 'N') ou, devrais-je maintenir la branche distincte pour chaque version de Java? (il n'est pas clair à partir de la documentation).
Toutes ces questions se résument à une seule: Peut Scala être utilisé pour le développement Android à l'avenir sans pour autant sacrifier les avantages de la nouvelle Scala de fonctionnalités et de nouvelles Android outil de la chaîne d'approvisionnement?
Liées à la lecture:
merci de partager des liens dans les commentaires ou réponses
Questions connexes:
Connexes:
S'il vous plaît voter pour Jack outil de demande de fonctionnalité:
EDIT:
Je suis en train de raison (PAS de réponse) ma question en espérant que les experts corriger moi si je me trompe.
Ci-dessous est une hypothétique flux de Jack version avec quelques blocs supplémentaires qui a été ajouté en se basant sur ma logique, et ce que j'ai appris de docs.
Hypothèse de Base est que Dalvik prend en charge jusqu'à Java 7 instructions bytecode. Si c'est correct de Java 8 instructions ne peuvent pas être directement transmis à Dalvik, ils devraient être en quelque sorte transformé en Java 7. (Peut-être quelque chose de similaire à la Scala compilateur le fait toujours).
Que la question est de savoir où est cette transformation qui se passe? Semble Jill ne peut pas traiter de Java 8 bytecode comme pour l'instant, de sorte que, éventuellement, se produit dans le bloc (3) de l'hypothétique flux. Si c'est exact que la seule source Java, les fichiers de projet sont soumis à la transformation et la réponse à la 2ème question est: "Pas de. Java 8 classes de bibliothèques ne peut pas être utilisé jusqu'à ce que Jill sera en mesure de le faire (si c'est possible). Qui est, nous ne pouvons pas utiliser Scala 12+.
Si tout le code, l'optimisation est effectuée dans le bloc (6) que la réponse à la 1ère question est Oui. Scala code converti à la bibliothèque .jar peuvent bénéficier de la Prise des optimisations. Mais au préalable, il doit être transformé .jayce (AST-comme représentation) qui permettront d'augmenter le temps de construction.
Et enfin Jack produit .dex bytecode Dalvik pour maintenir la compatibilité avec les anciens Dalvik temps d'exécution (ART consomme bytecode Dalvik trop). Donc la réponse à la 3-d question est: Oui, Java 8 fonctions peuvent être utilisées. Mais seulement dans le projet des sources Java. L'application est toujours compatible avec n'importe quel moment de l'exécution. Mais Java 8 avantages sont abandonnées en raison de la conversion de Java 7 (bytecode Dalvik).