O que há de novo no Java 19?  Você deve dar o salto?

¿Qué hay de nuevo en Java 19? ¿Deberías dar el salto?

Java es un lenguaje de programación versátil y potente que permite a los desarrolladores crear aplicaciones sólidas y de alto rendimiento que pueden ejecutarse en cualquier plataforma. Java es la base para prácticamente todos los tipos de aplicaciones en red y es el estándar global para desarrollar y entregar aplicaciones móviles, juegos, contenido basado en web y software empresarial. Con su rico conjunto (…)

Imagem em destaque

Java es un lenguaje de programación versátil y potente que permite a los desarrolladores crear aplicaciones sólidas y de alto rendimiento que pueden ejecutarse en cualquier plataforma. Java es la base para prácticamente todos los tipos de aplicaciones en red y es el estándar global para desarrollar y entregar aplicaciones móviles, juegos, contenido basado en web y software empresarial.

Con su rico conjunto de bibliotecas, Java permite a los desarrolladores crear soluciones innovadoras y eficientes. La plataforma Java proporciona un entorno para desarrollar aplicaciones con comportamiento dinámico. La plataforma también incluye un conjunto de herramientas que permiten a los desarrolladores diseñar, probar, optimizar e implementar fácilmente sus aplicaciones.

Fue lanzado originalmente en 1995 y desde entonces ha pasado por varias actualizaciones. El lenguaje de programación Java es un lenguaje orientado a objetos de alto nivel conocido por su portabilidad e independencia de plataforma.

Con más de 20 años a sus espaldas, el lenguaje de programación Java se ha convertido en uno de los lenguajes más populares que se utilizan en la actualidad. De hecho, según el índice TIOBE de octubre de 2022, Java fue clasificado como el tercer lenguaje de programación más popular del mundo, solo detrás de C y Python, una tendencia que continúa desde 2018.

Nuevo en Java 19: Introducción

La última actualización del Java Development Kit (JDK) se lanzó el 20 de septiembre de 2021. Es una versión no LTS que tiene como objetivo agregar varias características nuevas, incluida la simultaneidad estructurada, patrones de registro, una vista de una función externa y memoria. API y soporte para la arquitectura de conjunto de instrucciones (ISA) Linux/RISC-V de código abierto.

¿Qué significa no LTS? El soporte a largo plazo (LTS) es una fase de soporte extendido para una versión de software específica. El soporte a largo plazo incluye actualizaciones de seguridad, correcciones de errores y mejoras de rendimiento durante el período de soporte. Aunque a menudo no es la versión más actualizada del software, los usuarios que requieren soporte a largo plazo para sus aplicaciones pueden considerar usar la versión LTS.

Para Oracle, la versión LTS de Java es el estándar de la industria hasta el final de su ciclo de vida. A partir de 2022, la versión LTS actual es Java 17 y está previsto que finalice su ejecución en 2026.

En este contexto, las versiones que no son LTS son pequeñas actualizaciones que normalmente se utilizan para probar nuevas funciones y recopilar comentarios de la comunidad. Por ejemplo, en el caso de Java 19, todas las características mencionadas anteriormente, excepto la característica Linux/RISC-V, se encuentran en las fases de vista previa o incubadora.

La diferencia entre capacidades experimentales, de visualización y de incubadora.

Para comprender cómo funcionan las versiones de Java, debemos familiarizarnos con la notación utilizada por Oracle: experimental, vista previa e incubadora. Todas estas etiquetas se utilizan para hacer referencia a nuevas funciones que no se han integrado completamente en Java.

Vistas previas de Java

Las visualizaciones se introdujeron en JEP12. Para citar a OpenJDK : “Una característica de vista previa es una nueva característica del lenguaje Java, la máquina virtual Java o la API Java SE que está completamente especificada, completamente implementada y, sin embargo, es impermanente. Está disponible en una versión de función JDK para obtener comentarios de los desarrolladores basados ​​en el uso en el mundo real”.

Sería justo comparar una vista previa con una prueba beta en etapa avanzada. La función ha sido probada exhaustivamente y debería ser estable. Las funciones que ingresan a una etapa de vista previa generalmente están sujetas a los comentarios de los usuarios que Oracle utiliza para realizar correcciones o cambios según corresponda o, eventualmente, publicarlos.

Las funciones de versión preliminar tienen un “período de gracia” muy corto, por lo que puede esperar muy pocos cambios y su adopción total suele ocurrir dentro del año posterior a su lanzamiento inicial.

Debido a que las funciones de vista previa no son funciones permanentes en la plataforma Java SE, no están disponibles de forma predeterminada en tiempo de compilación y ejecución. Los desarrolladores que quieran utilizar API y características del lenguaje de visualización deben habilitarlas explícitamente en el compilador y en tiempo de ejecución.

Java experimental

Las características experimentales son versiones tempranas (en su mayoría) de características a nivel de máquina virtual. Aunque se han probado, pueden ser riesgosos, incompletos o incluso inestables. Para acceder a funciones experimentales, el desarrollador normalmente necesita habilitarlas mediante indicadores dedicados.

A modo de contexto, si las funciones de vista previa están completas en un 95 %, entonces las funciones experimentales están completas en aproximadamente un 25 %. Se presentan para que los primeros usuarios y entusiastas puedan probar la nueva función y brindar comentarios, informar errores o comenzar a explorar su potencial.

Tenga en cuenta que cada proveedor es libre de habilitar/deshabilitar funciones experimentales en sus distribuciones como mejor le parezca.

Incubadora de Java

Los recursos de incubación son API distribuidas en forma de módulos con nombres con el prefijo "JDK.incubator". Al igual que las funciones experimentales, se espera que las API de la incubadora tengan errores y sean inestables. El nombre incubadora proviene del hecho de que estas API maduran a lo largo de varias versiones de Java hasta que están listas para la etapa de vista previa.

Proyectos Java

La mayoría de las características de las que hablaremos hoy son resultados de proyectos Java. Un Proyecto es un esfuerzo colaborativo para producir un artefacto específico, que puede ser un cuerpo de código, documentación o algún otro material.

Cualquier Colaborador podrá proponer la creación de un nuevo Proyecto. Si cuenta con el apoyo de al menos un líder de grupo, cuyo grupo patrocinará el proyecto, y lo aprueba un consenso lento de los miembros de OpenJDK, entonces se creará el proyecto.

Los proyectos famosos incluyen:

Proyecto de lágrima

Project Loom es un proyecto que promete ofrecer hilo liviano. Esto se hace haciendo que la máquina virtual Java (JVM) administre la programación en lugar del sistema operativo (SO). De esta manera, la JVM puede controlar la programación de todos los subprocesos y, en teoría, proporcionar un mejor rendimiento.

Proyecto Valhalla

Project Valhalla es un proyecto para mejorar el rendimiento en Java. Esto se hace introduciendo tipos de valor, que son una nueva forma de tipo de datos programados como objetos pero a los que se accede como primitivos. Esto significa que se pueden almacenar en una única matriz, con un solo campo de encabezado para toda la matriz y acceso directo a los campos individuales.

Proyecto Panamá

El Proyecto Panamá es un proyecto que facilita la conexión de programas Java a componentes que no son Java, como bibliotecas basadas en C. El proyecto tiene varios subproyectos, que se están lanzando en estado de incubadora en versiones recientes de Java. Estos subproyectos incluyen la API de acceso a memoria externa, la API de enlace externo, la API de vector y la API de interfaz de función externa.

Proyecto ámbar

Project Amber es un proyecto responsable de agregar varias características nuevas al lenguaje de programación Java. Su declaración de misión es: "explorar e incubar características del lenguaje Java más pequeñas y orientadas a la productividad que han sido aceptadas como candidatas para PEC".

Estas características incluyen la palabra clave var para variables locales, bloques de texto, registros y coincidencia de patrones en casos de comparaciones. El proyecto aún está en curso y actualmente está trabajando para agregar clases selladas, coincidencia de patrones en conmutadores y coincidencia de patrones para registros y matrices.

Nuevas funciones en Java 19

Simultaneidad estructurada

En informática, la concurrencia es la capacidad de diferentes partes o unidades de un programa, algoritmo, recurso o dispositivo para realizar acciones de forma independiente. La concurrencia puede mejorar el rendimiento de un programa o sistema al permitir que se procesen múltiples tareas simultáneamente. También puede ayudar a hacer un mejor uso de recursos como procesadores, memoria y espacio en disco.

Esta concurrencia ejecutará múltiples tareas en diferentes subprocesos y las tratará como una única unidad de trabajo. Los objetivos, según OpenJDK son los siguientes:

  • Mejore la mantenibilidad, confiabilidad y observabilidad del código multiproceso.
  • Promover un estilo de programación concurrente que pueda eliminar los riesgos de cancelación y terminación.

Esto es parte de Project Loom, un modelo de concurrencia liviano que permite a los desarrolladores escribir programas concurrentes más fácilmente. Agrega soporte para subprocesos virtuales, que son subprocesos que no están vinculados a un núcleo de CPU específico. Esto hace posible que un único subproceso utilice varios núcleos al mismo tiempo, lo que puede mejorar el rendimiento.

Vista previa de patrones de registro

Esta es una característica de visualización que permite anidar patrones de registro y patrones de tipo para permitir una forma poderosa, declarativa y componible de explorar y procesar datos. Basado en la coincidencia de patrones, por ejemplo, entregado en JDK 16 en marzo de 2021. Los planes pueden requerir que los patrones de registro se amplíen con características como patrones de matriz y patrones vararg. Según el JDK, los objetivos son ampliar la coincidencia de patrones para expresar consultas de datos más complejas sin cambiar la sintaxis de los patrones de tipos.

Vista de funciones externas y API de memoria

La API de función y memoria externa es una forma para que los programas Java interactúen con código y datos fuera del tiempo de ejecución de Java. Esta API es eficiente para invocar funciones externas y acceder a memoria externa. Es seguro de usar y ayuda a evitar los peligros y la fragilidad de la interfaz nativa de Java (JNI). La función externa y la API de memoria se incubaron en JDK 17 y se reincubaron en JDK 18. Los objetivos de esta propuesta incluyen ser fácil de usar, funcionar bien, ser general y ser segura.

Visualizando hilos virtuales

Los subprocesos virtuales son subprocesos livianos que pueden ayudar a reducir la cantidad de trabajo requerido para escribir, mantener y observar aplicaciones simultáneas de alto rendimiento. Los propósitos de los hilos virtuales incluyen:

  • Facilitar que las aplicaciones de servidor escritas en el estilo simple de subproceso por solicitud escale con una utilización de hardware casi óptima
  • Facilitar que el código existente que utiliza la API Java.lang Thread adopte subprocesos virtuales con cambios mínimos.
  • Habilitación de la resolución de problemas, la depuración y la creación de perfiles de subprocesos virtuales con herramientas JDK existentes

Vista de coincidencia de patrones para expresiones y declaraciones de cambio

La tercera vista de coincidencia de patrones para expresiones y declaraciones de cambio agrega refinamientos, incluido el reemplazo de patrones protegidos por cláusulas when en bloques de cambio. Además, la semántica en tiempo de ejecución de un cambio de patrón cuando el valor de la expresión del selector es nulo está más en línea con la semántica del cambio heredado.

Los objetivos del plan incluyen ampliar la expresividad y aplicabilidad de las expresiones y declaraciones de cambio al permitir que aparezcan patrones en las etiquetas de los casos. Otros objetivos incluyen permitir a los desarrolladores relajar la hostilidad nula histórica de un cambio cuando lo deseen, aumentar la seguridad de las declaraciones de cambio y garantizar que las expresiones y declaraciones de cambio existentes continúen compilándose sin cambios y ejecutándose con una semántica idéntica.

La esperanza es eventualmente admitir la coincidencia de patrones en Java agregándola a los lugares donde se usan expresiones. Esta característica también es parte del Proyecto Amber.

Cuarta incubación de una API vectorial

La API vectorial es una forma para que los desarrolladores escriban algoritmos vectoriales complejos en Java. La API se incubó previamente en JDK 16, JDK 17 y JDK 18. Las mejoras de API propuestas para JDK 19 incluyen mejoras en la carga y almacenamiento de vectores hacia y desde MemorySegments, según lo definido en la vista previa de Función externa y API de memoria. JDK 19 también agregaría dos operaciones de vectores cruzados, compactar y expandir, junto con una operación de compresión de máscara vectorial complementaria.

La operación de compresión de vectores asigna pistas desde un vector de origen, seleccionado mediante una máscara, a un vector de destino en el orden de las pistas, mientras que la operación de expansión hace lo contrario. La operación de compresión es útil para filtrar los resultados de la consulta. En otra adición a la API vectorial, se ampliarían las operaciones de carril integral bit a bit, incluidas operaciones como contar el número de un bit, invertir el orden de los bits y comprimir y expandir bits.

Los objetivos de la API incluían ser claro y conciso, independiente de la plataforma, tener un tiempo de ejecución y un rendimiento de compilación confiables en arquitecturas x64 y AArch64, y permitir una degradación "elegante", para situaciones en las que un cálculo vectorial no se puede expresar completamente en tiempo de ejecución como una secuencia. de operaciones vectoriales. La API vectorial es del Proyecto Panamá.

Puerto Linux/RISC-V

El puerto Linux/RISC-V agregaría soporte para un conjunto de instrucciones de hardware que ya utilizan muchas cadenas de herramientas de diferentes idiomas. RISC-V es una familia de arquitecturas de conjuntos de instrucciones (ISA) relacionadas, y el puerto solo admitiría la configuración RV64GV de RISC-V. Se trata de un ISA de propósito general de 64 bits que incluye instrucciones vectoriales. Los desarrolladores de Java pueden considerar agregar soporte para otras configuraciones RISC-V en el futuro.

Preparándose para una actualización

¿Quieres echarle un vistazo a Java 19? Bueno, si quieres actualizar, recuerda estos consejos:

  1. Sepa lo que necesita: antes de actualizar, es importante saber qué necesita su empresa. Haga una lista de características y funciones esenciales que ayudarán a que su negocio funcione de manera más eficiente. Si nada en nuestra lista de funciones parece obligatorio, quizás quieras preguntarte si es realmente necesario.
  2. Investigue: una vez que sepa lo que necesita, es hora de investigar y descubrir si Java 19 puede ayudarlo. Lea reseñas en línea, hable con otras empresas de su industria y obtenga recomendaciones de fuentes confiables. Tenga en cuenta que algunas de estas funciones aún son experimentales, así que preste mucha atención a posibles errores y problemas.
  3. Organícese: Actualizar su software puede ser un proyecto grande, por lo que es importante organizarse antes de comenzar cualquier cosa. Cree un cronograma para cuándo desea que se hagan las cosas y asegúrese de que todos los involucrados conozcan sus funciones y responsabilidades.
  4. Presupuestar adecuadamente: Uno de los aspectos más importantes de la actualización de su software es presupuestar correctamente. Obviamente, con probabilidades de lanzamiento a corto plazo, hay muy poco que considerar en términos de presupuesto. Pero sus desarrolladores aún necesitan leer y aprender la documentación para poder aprovechar al máximo la actualización. Esté preparado para este período de incubación.
  5. Comience poco a poco y pruebe: realice una instalación nueva en una zona de pruebas y juegue un poco. Aproveche esto como una oportunidad para informar a su equipo de las novedades. Tenga en cuenta que Oracle solo brindará soporte durante seis meses, por lo que deberíamos ver Java 20 alrededor de marzo de 2023.

¿Es hora de actualizar a Java 19?

Se prevé que Java 19 sea un lanzamiento a corto plazo, y Java 20 ya se asoma en el horizonte. Entonces, ¿deberías actualizar? Como siempre, depende. La primera pregunta a considerar es cómo te sientes acerca de lanzamientos a corto plazo como este. Si no le importa actualizar con frecuencia, será mejor que aproveche los beneficios que vienen con las últimas versiones.

Si prefiere seguir con una única versión de Java durante un largo período de tiempo, es posible que desee esperar a la próxima versión de LTS. ¿Cuáles son los beneficios de actualizar a Java 19? En primer lugar, es importante señalar que los cambios en Java 19 no son tan significativos como en algunas versiones anteriores. Quizás esto sea de esperar ya que se trata de un lanzamiento a corto plazo.

Los lanzamientos a corto plazo generalmente están dirigidos a entusiastas, personas a quienes les gusta probar nuevas funciones lo más rápido posible, pero pueden introducir nuevos errores y ser menos estables. Esto es de esperar; Después de todo, como hemos visto, la mayoría de las nuevas funciones aún se encuentran en fase de prueba.

Para las empresas que confían en Java 17, la respuesta es, francamente, un rotundo no. Si bien algunas de las nuevas funciones son extremadamente interesantes, no hay razón para arreglar lo que no está roto. Puede instalar el JDK en una zona de pruebas y jugar con las funciones; incluso puede comenzar a desarrollar utilizando funciones que hayan pasado por múltiples rondas de pruebas. Pero esto es una preparación para lo que está por venir, no subirse al carro.

Si te gustó esto, asegúrate de consultar uno de nuestros otros artículos sobre Java:

  • Los 6 mejores marcos de GUI de Java
  • Los 8 mejores IDE de Java y editores de texto
  • Las 7 mejores bibliotecas de aprendizaje automático de Java
  • C# x Java: principales diferencias explicadas
  • Golang vs Java: lenguajes de programación comparados y cómo elegir

Fuente: BairesDev

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.