Mi chiedo quali siano le differenze tecniche di implementazione tra C # e Scala e come entrambe le soluzioni si confrontino con le idee e le preoccupazioni di implementazione espresse nell'e-mail Peek Past lambda di Brian Goetz, inviata alla mailing list di Project Lambda (JSR 335) ?
Dall'email:
Abbiamo esplorato la strada di "forse i lambda dovrebbero essere solo istanze di classe interiore, sarebbe davvero semplice", ma alla fine siamo arrivati alla posizione di "le funzioni sono una direzione migliore per il futuro del linguaggio".
e inoltre:
La visione lambda-sono-oggetti del mondo è in conflitto con questo possibile futuro. La visione del mondo delle lambda-sono-funzioni no, e preservare questa flessibilità è uno dei punti a favore del non appesantire le lambda con persino l'apparenza di oggettività.
Conclusione:
Lambdas-are-funzioni apre le porte. Lambdas-are-oggetti li chiude.
Preferiamo vedere quelle porte lasciate aperte.
E alcuni commenti di una persona sul thread di Reddit dicono:
In realtà ho inviato un'e-mail a Neal Gafter su questo e alla mia limitata comprensione della sua spiegazione C # e l'attuale progetto Java sono abbastanza simili in quanto i delegati sono in realtà oggetti e non tipi di funzioni. Sembra che crede che Java dovrebbe imparare dagli svantaggi degli lambda di C # ed evitarli (proprio come C # ha imparato dagli svantaggi di Java e li ha evitati all'inizio).
Perché l'approccio "Lambdas-are-funzioni" offre più opportunità in futuro rispetto a "Lambdas-are-object"? Qualcuno può spiegare quali differenze esistono e come influenzerebbero la scrittura del codice?
Vedendo che alla Scala le cose "funzionano", continuo a pensare che mi manca qualcosa degli approcci adottati / proposti in C # / Java (8), probabilmente è correlato a preoccupazioni sulla retrocompatibilità?