expressions - lambda stream java
¿Alguien ha respaldado Lambda Expressions con Java 7? (1)
Ahora existe github.com/orfjackal/retrolambda para convertir Java 8 bytecode, que utiliza expresiones lambda y referencias de métodos, para trabajar en Java 7, 6 o 5. (Java 1.4 dio errores de verificación; no investigó más).
Leyendo acerca de qué tipo de código de bytes produce Java 8 de lambdas , me vino a la mente el momento en que se lanzó Java 5. En aquel entonces existía Retroweaver y otras herramientas para convertir el bytecode compilado con JDK 5 para que se ejecutara en JRE 1.4.
¿Alguien ha creado una herramienta de backporting para Java 8 lambdas? Permitiría que los desarrolladores de Java comiencen a usar lambdas hoy en día en JRE Java 7 de calidad de producción, sin tener que esperar entre 6 y 12 meses para la versión GA de Java 8.
Aquí está mi análisis de por qué, como backporter, debería poder implementarse con relativa facilidad:
Java 8 lambdas no parece usar ninguna característica de JVM que Java 7 no tenga (por ejemplo, invokedynamic
), y la clase java.lang.invoke.LambdaMetafactory
y sus dependencias parecen puramente Java, por lo que debería ser posible implementarlas en una biblioteca de terceros. Por lo tanto, el bytecode compilado con JDK 8 podría ejecutarse en JRE 7 agregando una biblioteca de terceros con una copia de LambdaMetafactory (en un paquete diferente) y transformando el bytecode para usar esa metafactory en su lugar. Tal vez también genere algunas clases sintéticas y métodos para eludir las comprobaciones de accesibilidad, como java.lang.invoke.MagicLambdaImpl
parece implicar. O bien, genere clases internas anónimas para todas las lambdas, como lo hicieron algunos de los primeros JDK de acceso anticipado habilitados para lambda.