Интересно, каковы технические различия между C # и Scala в реализации и как оба решения сравниваются с идеями и проблемами реализации, озвученными в электронном письме Peek Past lambda Брайана Гетца, отправленном в список рассылки Project Lambda (JSR 335) ?
Из электронной почты:
Мы исследовали путь «возможно, лямбды должны быть просто экземплярами внутреннего класса, это было бы действительно просто», но в итоге пришли к позиции «функции - лучшее направление для будущего языка».
и далее:
Взгляд мира на лямбды-объекты противоречит этому возможному будущему. Лямбда-это-функция видения мира не делает, и сохранение этой гибкости является одним из пунктов в пользу того, чтобы не отягощать лямбды даже появлением объектности.
Вывод:
Lambdas-are-functions открывает двери. Lambdas-are-объекты закрывают их.
Мы предпочитаем, чтобы эти двери оставались открытыми.
И некоторый комментарий от человека в ветке Reddit говорит:
На самом деле я написал по электронной почте Нилу Гафтеру об этом и, насколько я понимаю, его объяснение C # и нынешний дизайн Java очень похожи в том, что делегаты на самом деле являются объектами, а не типами функций. Похоже, он считает, что Java должна учиться на недостатках лямбд в C # и избегать их (так же, как C # учился на недостатках Java и избегал их в начале).
Почему подход «Лямбда-ан-функции» дает больше возможностей в будущем, чем «Лямбда-ан-объекты»? Может кто-нибудь объяснить, какие существуют различия и как они повлияют на то, как будет написан код?
Видя, что вещи в Scala «просто работают», я продолжаю думать, что мне что-то не хватает в подходах, предложенных / предложенных в C # / Java (8), возможно, это связано с проблемами обратной совместимости?