Gostaria de saber quais são as diferenças técnicas de implementação entre C # e Scala e como as duas soluções se comparam às idéias e preocupações de implementação expressas no email Peek Past lambda de Brian Goetz, enviado à lista de discussão do Project Lambda (JSR 335) ?
Do email:
Exploramos o caminho de "talvez lambdas devessem ser apenas instâncias de classe interna, isso seria realmente simples", mas finalmente chegamos à posição de "funções são uma direção melhor para o futuro da linguagem".
e ainda mais:
A visão lambdas-são-objetos do mundo entra em conflito com esse possível futuro. A visão lambdas-são-funções do mundo não existe, e preservar essa flexibilidade é um dos pontos a favor de não sobrecarregar as lambdas com a aparência de objeto.
Conclusão:
Lambdas-são-funções abre portas. Lambdas são objetos os fecha.
Preferimos ver aquelas portas abertas.
E algum comentário de uma pessoa no tópico do Reddit diz:
Na verdade, enviei um e-mail a Neal Gafter sobre isso e para meu entendimento limitado de sua explicação C # e o design atual do Java é bastante semelhante, pois os Delegados são na verdade objetos e não tipos de funções. Parece que ele acredita que Java deve aprender com as desvantagens das lambdas de C # e evitá-las (assim como o C # aprendeu com as desvantagens de Java e as evitou no início).
Por que a abordagem "Lambdas são funções" possibilita mais oportunidades no futuro do que "Lambdas são objetos"? Alguém pode explicar quais diferenças existem e como elas influenciam a forma como o código seria escrito?
Vendo que as coisas no Scala "simplesmente funcionam", continuo pensando que estou perdendo algo sobre as abordagens adotadas / propostas em C # / Java (8), provavelmente está relacionado a preocupações sobre compatibilidade com versões anteriores?