Je me demande quelles sont les différences de mise en œuvre technique entre C # et Scala et comment les deux solutions se comparent aux idées et préoccupations de mise en œuvre exprimées dans l'e-mail Peek Past lambda de Brian Goetz, envoyé à la liste de diffusion du projet Lambda (JSR 335) ?
De l'email:
Nous avons exploré la voie «peut-être que les lambdas ne devraient être que des instances de classe interne, ce serait vraiment simple», mais nous sommes finalement arrivés à la position «les fonctions sont une meilleure direction pour l'avenir du langage».
et plus loin:
La vision lambdas-are-objets du monde est en conflit avec ce futur possible. La vision lambdas-are-functions du monde ne le fait pas, et la préservation de cette flexibilité est l'un des points en faveur de ne pas surcharger les lambdas avec même l'apparence d'objectivité.
Conclusion:
Lambdas-are-functions ouvre des portes. Lambdas-are-objects les ferme.
Nous préférons voir ces portes ouvertes.
Et certains commentaires d'une personne sur le fil Reddit disent:
En fait, j'ai envoyé un courriel à Neal Gafter à ce sujet et à ma compréhension limitée de son explication, C # et la conception Java actuelle sont assez similaires en ce sens que les délégués sont en fait des objets et non des types de fonctions. Il semble qu'il pense que Java devrait apprendre des inconvénients des lambdas de C # et les éviter (un peu comme C # a appris des inconvénients de Java et les a évités au début).
Pourquoi l'approche "Lambdas-are-functions" ouvre-t-elle davantage de possibilités à l'avenir que "Lambdas-are-objects"? Quelqu'un peut-il expliquer quelles différences existent et comment elles influenceraient la façon dont le code serait écrit?
Voyant que les choses dans Scala "fonctionnent juste", je continue de penser que je manque quelque chose au sujet des approches adoptées / proposées en C # / Java (8), probablement est-ce lié à des préoccupations concernant la rétrocompatibilité?