Mi chiedo quali siano le differenze tecniche di implementazione tra C # e Scala e in che modo entrambe le soluzioni si confrontino con le idee e le preoccupazioni di implementazione espresse nell'email Peek Past lambda di Brian Goetz, inviato alla mailing list di Project Lambda (JSR 335) ?
Dall'email:
We explored the road of "maybe lambdas should just be inner class instances, that would be really simple", but eventually came to the position of "functions are a better direction for the future of the language".
e ulteriormente:
The lambdas-are-objects view of the world conflicts with this possible future. The lambdas-are-functions view of the world does not, and preserving this flexibility is one of the points in favor of not burdening lambdas with even the appearance of object-ness.
Conclusione:
Lambdas-are-functions opens doors. Lambdas-are-objects closes them.
We prefer to see those doors left open.
E alcuni commenti di una persona sul thread Reddit dicono:
I actually e-mailed Neal Gafter about this and to my limited understanding of his explaination C# and the current Java design are quite similar in that Delegates are actually objects and not function types. It seems like he believes that Java should learn from the disadvantages of C#'s lambdas and avoid them (much like C# learned from Java's disadvantages and avoided them in the beginning).
Perché l'approccio "Lambdas-is-functions" offre più opportunità in futuro di "Lambdas-are-objects"? Qualcuno può spiegare quali differenze esistono e come influenzerebbero il modo in cui il codice sarebbe stato scritto?
Visto che cose in Scala "funzionano", continuo a pensare che mi manchi qualcosa sugli approcci adottati / proposti in C # / Java (8), probabilmente è legato alle preoccupazioni sulla retrocompatibilità?