Selon Scala 2.10, quels sont les avantages (le cas échéant) de l’émission de bytecode pour la JVM 1.7, par rapport au défaut d’émission pour la 1.6?
Réponse
Trop de publicités?Précédent Scala versions émis version 49.0 de l'octet de code, ce qui correspondait à Java 5. Avec Scala 2.10 version par défaut a été changé pour la version 50.0, correspondant à la version 6 de Java et qui a l'avantage principal de l'activation la plus rapide vérificateur introduit avec cette version, il devrait donc conduire à (un peu) meilleur moment de l'exécution de la performance.
Comme vous le notez, avec 2.10 il est devenu possible d'émettre de la version de 51,0 du byte-code qui correspond à Java 7. Il y a quelques différences entre la version 50.0 et la version de 51,0: le plus grand est l'inclusion de l' invokedynamic
enseignement, avec la plomberie qui va avec (voir le fichier de la classe de définition de format pour les détails techniques).
Aussi loin que l'utilisation de la Scala de la 51.0 de byte code va, même si les pièces techniques sont en place, il est ma compréhension que le travail est encore à un stade expérimental à l'aide de cette fonction. Voir cette présentation de l'EPFL et de ce fil, ce qui montre que l'équipe est de travailler sur l'obtention de la performance avantages de la méthode des poignées, sans avoir à introduire une dépendance sur Java 7.
Scala 2.11 maintenu le défaut d'émettre de la version de 50,0 du bytecode, mais le plan officiel est maintenant pour accéder directement à Java 8 bytecode avec Scala 2.12. Dans l'intervalle, il y a un nouveau back-end disponible pour Scala 2.11 qui va vous permettre de tester certaines des fonctionnalités qui sont prototypée pour Scala 2.12, et qui deviendra le défaut de back-end avec Scala 2.12.
De toute façon, le tant attendu avantages proposés proviennent tous de l'aide de l' invokedynamic
bytecode (et sa MethodHandle structures). Ils comprennent:
- la réduction de la taille du code et de temps d'exécution pour des fermetures
- l'amélioration de la spécialisation des types génériques
- potentiellement plus rapide des types de construction
(Spoiler: à l'Aide d' MethodHandles
pour mettre en œuvre les bouchons dans le expérimentales backend est actuellement plus lent que le présent optimisé fermeture de la création!)