Il y a quelques temps Oracle a décidé que l'ajout de Fermetures de Java 8 serait une bonne idée. Je me demande comment concevoir les problèmes sont résolus, il y en comparaison à la Scala, qui avait fermetures depuis le premier jour.
Citant les Problèmes de javac.info:
Peut-Méthode Gère être utilisé pour des Types de Fonction? Il n'est pas évident pour vous de faire ce travail. Un problème est que la Méthode de Poignées de réification des paramètres de type, mais d'une manière qui interfère avec la fonction de sous-typage.
Peut-on se débarrasser de la déclaration explicite de "lance" paramètres de type? L'idée serait d'utiliser disjuntive l'inférence de type à chaque fois que l'a déclaré lié est un activée type d'exception. Ce n'est pas strictement compatible, mais il est peu probable que de briser véritable code existant. On ne peut probablement pas se débarrasser de la "jette" dans le type de l'argument, cependant, en raison d'ambiguïté syntaxique.
Interdire @Partagé sur style ancien indice de boucle variables
Gérer les interfaces Comparateur qui définissent plus d'une méthode, tous, sauf un, qui sera mis en œuvre par une méthode héritée de l'Objet. La définition de "interface avec une seule méthode" doit compter uniquement les méthodes qui ne seraient pas mises en œuvre par une méthode dans un Objet et doit compter plusieurs méthodes comme l'un, si la mise en œuvre de l'un d'eux serait de mettre en œuvre toutes. Principalement, ce qui nécessite une plus grande précision de ce que cela signifie pour une interface d'avoir une seule méthode abstraite.
Spécifier le mappage à partir de la fonction de types d'interfaces: les noms, les paramètres, etc. Nous devrions spécifier le mappage à partir de la fonction de types générés par le système et les interfaces avec précision.
L'inférence de Type. Les règles d'inférence de type doivent être augmentée pour accueillir l'inférence de type d'exception paramètres. De même, le sous-type de relations utilisées par la fermeture de conversion devrait être traduit ainsi.
Élidés exception des paramètres de type pour aider à rénover exception de la transparence. Peut-être élidés exception des paramètres de type moyenne du lié. Cela permet de rénovation existant interfaces génériques qui n'ont pas de paramètre de type de l'exception, comme java.util.de façon concomitante.Rachetables, par l'ajout d'un nouveau générique paramètre d'exception.
Comment font partie de la classe des littéraux pour des types de fonction formé? Est-il #void().de classe ? Si oui, comment ça fonctionne si les types d'objets sont effacées? Est-ce #?(?).de classe ?
Le système de chargeur de classe devrait générer dynamiquement le type de fonction d'interface. Les interfaces correspondant à des types de fonction doivent être générés à la demande, par la classe de bootstrap loader, de sorte qu'ils peuvent être partagées entre tous les utilisateurs du code. Pour le prototype, nous avons javac générer ces interfaces afin de prototype généré le code peut s'exécuter sur stock (JDK5-6) les machines virtuelles.
Doit l'évaluation d'une expression lambda produire une nouvelle objet à chaque fois? J'espère que non. Si un lambda capte pas de variables à partir d'un cadre englobant, par exemple, il peut être allouée de manière statique. De même, dans d'autres situations, lambda pourrait être déplacé hors d'une boucle interne si elle ne rend pas compte de toutes les variables déclarées à l'intérieur de la boucle. Il serait donc pour le mieux si les spécifications ne promet rien quant à la référence à l'identité du résultat d'une expression lambda, de sorte que ces optimisations peuvent être fait par le compilateur.
Comme je le comprends 2., 6. et 7. ne sont pas un problème en Scala, parce que Scala n'utilise pas Vérifié les Exceptions comme une sorte de "Shadow" type de système" comme Java.
Quid du reste?