Цікаво, чим відрізняються технічна реалізація між C # та Scala і як обидва рішення порівнюються з ідеями та проблемами впровадження, озвученими в електронному листі лямбда Peek Past від Брайана Геца, надісланого до списку розсилки Project Lambda (JSR 335) ?
З електронного листа:
Ми дослідили дорогу "можливо, лямбдаси повинні бути просто екземплярами внутрішнього класу, це було б дійсно просто", але врешті-решт прийшли до положення "функції є кращим напрямом для майбутнього мови".
і далі:
Погляд лямбда-об'єктів на світ суперечить цьому можливому майбутньому. Погляд на світ лямбда-є-функцій не відповідає, а збереження цієї гнучкості є одним із моментів на користь того, щоб не обтяжувати лямбдів рівним виглядом об'єктності.
Висновок:
Lambdas-are-function відкриває двері. Лямбда-це-об'єкти їх закриває.
Ми вважаємо за краще бачити ті двері відчиненими.
І деякі коментарі від людини щодо теми Reddit говорять:
Я насправді надіслав електронною поштою Нілу Гафтеру з цього приводу і на моє обмежене розуміння його пояснень C # та поточного дизайну Java досить схожий тим, що Делегати - це фактично об'єкти, а не типи функцій. Схоже, він вважає, що Java повинна вчитися на недоліках лямбдів C # і уникати їх (подібно до того, як C # дізнався з недоліків Java і уникав їх на початку).
Чому підхід "Лямбда-функції-функції" надає більше можливостей у майбутньому, ніж "Лямбда-це-об'єкти"? Чи може хтось пояснити, які існують відмінності та як вони впливатимуть на те, як буде написаний код?
Бачачи, що в Scala речі "просто працюють", я продовжую думати, що мені щось не вистачає щодо підходів, запропонованих / запропонованих у C # / Java (8), ймовірно, це пов'язано з проблемами щодо зворотної сумісності?