sábado, 12 de noviembre de 2016

¿Qué viene con Java 9?


¿Qué viene con Java 9?

Java 9 está avanzando hacia su disponibilidad general (23 de marzo de 2017). JDK committers están trabajando duro para entregar porque la cuenta regresiva ha comenzado.

Java Enhancement Proposals (JEP) ha publicado una larga lista de características como sus propuestas de mejora. Incluye muchas mejoras importantes / menores en la forma de nuevas capacidades, cambios sintácticos, ajustes de rendimiento y la modularidad muy esperada.

Estas mejoras pronto traerán algunos cambios notables en la forma en que programamos en Java. Este artículo recoge diez áreas clave del índice JEP que van a influir en los programadores Java en los próximos años.

1. Característica principal: Proyecto Jigsaw

Si lambda es una característica insignia de Java 8, la modularidad es la característica insignia de Java 9. La modularidad es el resultado de la gran influencia de Project Jigsaw. Es realmente una característica diferida que se suponía que iba a incluirse desde Java 8, pero tuvo un adelanto con Java 9. Se espera que cambie el paradigma de la codificación Java en el mantenimiento de problemas de dependencia popularmente llamado infierno jar, algo que rima con DLL infierno. Aunque Maven ha proporcionado un cierto respiro, se prevé que el proyecto Jigsaw será la respuesta principal a la tan necesaria capacidad de Java. Mantener una dependencia transitiva en una aplicación es y siempre ha sido un dolor en el cuello. Java 9 comprenderá mejor la dependencia entre módulos y los resolverá en tiempo de compilación o tiempo de ejecución. Según JEP, el objetivo principal de esta función es:


  • Mejorar la escalabilidad de la plataforma Java SE y JDK hasta los pequeños dispositivos informáticos
  • Mejorar la seguridad y la facilidad de mantenimiento
  • Proporcionar fácil construcción y mantenimiento de bibliotecas
  • La mejora tendrá un impacto general en las plataformas Java SE y Java EE.


2. Actualizaciones de la API de proceso (JEP 102)

Otra mejora importante se puede ver con las API que se ocupan de controlar y organizar los procesos del sistema operativo. Hasta Java 8, este había sido un área descuidada y el soporte de Java API era bastante limitado. Los programadores tuvieron que recurrir a códigos nativos para manejar muchas de las características principales del sistema operativo subyacente. Las nuevas APIs brindarán un apoyo considerable en esta área.

3. Imágenes multi-resolución (JEP 251)

La API que trata con imágenes en el paquete java.awt.image también se actualiza. La mejora de la API permitirá que un conjunto de imágenes se encapsule en una única imagen multi-resolución. La varianza de la resolución se puede recuperar basándose en métricas DPI y un conjunto de API de transformación de imagen.

4. API de apilamiento (JEP 259)

Java 8 no tiene ninguna API eficaz para recorrer marcos seleccionados en la pila de ejecución y para acceder a la instancia de Clase de cada trama. El nuevo stack-walking APIs nos permitirá filtrar y perezosamente cargar la información en trazas de pila.

5. API y servicio de registro (JEP 264)

Java 9 mejoró la infraestructura de registro utilizada por las clases JDK con la ayuda de las nuevas API de Service Loader. Hasta ahora (Java 8), las clases JDK utilizan su propia infraestructura de registro. Con Java 9, tendremos la opción de usar la implementación de registro por defecto basada en los mensajes de registro de plataforma java.util.logging o de ruta en el marco de registro, como SLF4J o Log4J.

6. Actualizaciones lingüísticas (JEP 213)

Hay muchos pequeños ajustes introducidos con las sintaxis del lenguaje Java 9, aparte de mejorar las capacidades de las interfaces. Una interfaz Java 9 puede declarar métodos privados, manteniendo intacta la característica del método predeterminado introducido por Java 8. La sintaxis de la sentencia try-with-resource se ha mejorado. Las sintaxis con clase anónima ahora pueden inferir su tipo designado. Otras mejoras incluidas en el área como anotación @SafeVarargs, sintaxis obsoletas, y así sucesivamente.

7. Actualizaciones simultáneas (JEP 266)

Las actualizaciones de concurrencia son mínimas y se supone que son una respuesta en apoyo de la red de suscripción pública de Reactive System. Un puñado de interfaces se proporciona, que puede ayudar a los desarrolladores a construir componentes personalizados para apoyar la interoperabilidad a través de varios sistemas asíncronos que se ejecutan en JVM.

8. Métodos de fábrica para las colecciones (JEP 269)

Java 9 hizo cambios importantes en el proceso de creación de una colección ad-hoc con la ayuda del método estático de fábrica. Esto funcionará en la interfaz de Colección para crear una instancia de colección no modificable. Java 8 y sus predecesores habían sido muy detallados incluso en la creación de una lista simple, de la siguiente manera:


List<String> list1 = new ArrayList<>();
list1.add("Uno");
list1.add("Dos");
list1.add("Tres");
list1 = Collections.unmodifiableList(list1);

Alternativa,

List<String> list2 = Collections.unmodifiableList(new ArrayList<> (Arrays.asList("Cuatro", "Cinco", "Seis")));

O,

List<String> list3 =
Collections.unmodifiableList(new ArrayList<String>() {
{
   add("Siete");
   add("Ocho");
   add("Nueve");
   add("Diez");
}});

Con Java 9, podremos lograr lo mismo con el método simple de fábrica de ayuda, de la siguiente manera:

List<String> list4=List.of("Once", "Doce", "trece");

9. Características del escritorio (JEP 272)

Java 9 introduce una API para soportar la manipulación de características de escritorio específicas de la plataforma. Las plataformas específicas son Windows, Linux y Mac OS X. Las API públicas permitirán a los programadores interactuar con la barra de tareas o la base de acoplamiento, o escuchar sistemas o eventos de aplicaciones.

10. Mejoramiento del Proceso de Serialización (JEP 290)

Ha habido críticas sobre el mecanismo de serialización de objetos implementado convencionalmente por el marco principal de la JVM. La transmisión de datos es una tarea de serialización y puede verse comprometida, lo que a su vez puede hacer que la propia JVM sea vulnerable. Java 9 parece tener en cuenta el problema y proporciona una especie de mecanismo de filtrado en los flujos entrantes para mejorar la seguridad y robustez del sistema existente de los procesos de serialización y deserialización.

Conclusión

Aparte de estos diez, hay muchos otros ajustes y mejoras a ser servido una vez que la característica completa Java 9 se libera. Otras áreas de mejoras están en el ámbito de API de bajo nivel, redes, XML, API de análisis de Nashorn, extensiones de API existentes, jshell, etc. Se han eliminado muchas API antiguas de la biblioteca principal. Además, la estructura de archivos JDK 9 también ha sido renovada. Java 8 y sus usuarios anteriores de la versión encontrarán algo nuevo derecho del directorio de la instalación. Sin embargo, nada nos tranquiliza hasta que vemos la versión final. Hasta entonces, esperamos la cuenta final.