Me pregunto cuáles son las diferencias de implementación técnica entre C # y Scala y cómo ambas soluciones se comparan con las ideas y preocupaciones de implementación expresadas en el correo electrónico Peek Past lambda de Brian Goetz, enviado a la lista de correo del Proyecto Lambda (JSR 335) .
Desde el correo electrónico:
Exploramos el camino de "quizás las lambdas deberían ser solo instancias de clase interna, eso sería realmente simple", pero finalmente llegamos a la posición de "las funciones son una mejor dirección para el futuro del lenguaje".
y además:
La visión lambdas-son-objetos del mundo entra en conflicto con este posible futuro. La visión del mundo de las lambdas-son-funciones no lo hace, y preservar esta flexibilidad es uno de los puntos a favor de no cargar a las lambdas incluso con la apariencia de objetividad.
Conclusión:
Lambdas-are-functions abre puertas. Lambdas-are-objects los cierra.
Preferimos ver esas puertas abiertas.
Y un comentario de una persona en el hilo de Reddit dice:
De hecho, envié un correo electrónico a Neal Gafter sobre esto y para mi comprensión limitada de su explicación C # y el diseño actual de Java son bastante similares en el sentido de que los Delegados son en realidad objetos y no tipos de funciones. Parece que él cree que Java debería aprender de las desventajas de las lambdas de C # y evitarlas (al igual que C # aprendió de las desventajas de Java y las evitó al principio).
¿Por qué el enfoque de "Lambdas-son-funciones" permite más oportunidades en el futuro que "Lambdas-son-objetos"? ¿Alguien puede explicar qué diferencias existen y cómo influirían en cómo se escribiría el código?
Al ver que las cosas en Scala "simplemente funcionan", sigo pensando que me falta algo sobre los enfoques adoptados / propuestos en C # / Java (8), ¿probablemente esté relacionado con preocupaciones sobre la compatibilidad con versiones anteriores?