Ich frage mich, was die technischen Implementierungsunterschiede zwischen C # und Scala sind und wie sich beide Lösungen im Vergleich zu den Implementierungsideen und -bedenken verhalten, die in der E-Mail Peek Past Lambda von Brian Goetz an die Mailingliste von Project Lambda (JSR 335) geäußert wurden .
Aus der E-Mail:
Wir untersuchten den Weg von "Vielleicht sollten Lambdas nur Instanzen der inneren Klasse sein, die wirklich einfach wären", kamen aber schließlich zu der Position "Funktionen sind eine bessere Richtung für die Zukunft der Sprache".
und weiter:
Die Sicht der Lambda-Objekte auf die Welt steht im Konflikt mit dieser möglichen Zukunft. Die Sicht der Lambdas-Are-Functions auf die Welt tut dies nicht, und diese Flexibilität beizubehalten, ist einer der Punkte, die dafür sprechen, Lambdas nicht mit dem Aussehen von Objektivität zu belasten.
Fazit:
Lambdas-are-Funktionen öffnen Türen. Lambdas-are-Objekte schließen sie.
Wir ziehen es vor, die Türen offen zu sehen.
Und ein Kommentar von einer Person im Reddit-Thread lautet:
Ich habe Neal Gafter darüber eine E-Mail geschickt, und nach meinem begrenzten Verständnis seiner Erklärung sind C # und das aktuelle Java-Design insofern ziemlich ähnlich, als Delegates tatsächlich Objekte und keine Funktionstypen sind. Anscheinend glaubt er, dass Java aus den Nachteilen von C # -Lambdas lernen und diese vermeiden sollte (ähnlich wie C # aus den Nachteilen von Java gelernt und sie am Anfang vermieden hat).
Warum bietet der Ansatz "Lambdas-Are-Functions" in Zukunft mehr Möglichkeiten als "Lambdas-Are-Objects"? Kann jemand erklären, welche Unterschiede bestehen und wie sie sich darauf auswirken, wie Code geschrieben wird?
Angesichts der Tatsache, dass die Dinge in Scala "einfach funktionieren", denke ich immer wieder, dass mir etwas an den in C # / Java (8) gewählten / vorgeschlagenen Ansätzen fehlt.