stringtranslate.com

Proyecto Valhalla (lenguaje Java)

Project Valhalla es un proyecto experimental OpenJDK para desarrollar nuevas funciones de lenguaje importantes para Java 10 y versiones posteriores. El proyecto fue anunciado en julio de 2014 y es un esfuerzo experimental de Oracle , dirigido por el ingeniero Brian Goetz. [1]

Funciones planificadas

Valhalla está incubando características y mejoras del lenguaje Java en estas áreas: [2]

Estas características requerirán cambios tanto de sintaxis como a nivel de VM.

Actividad del proyecto

El proyecto está organizado en la lista de correo de OpenJDK 'Project Valhalla'. El Proyecto Valhalla ha comenzado en las etapas experimentales, con un anuncio inaugural y propuestas iniciales preliminares.

Publicado a enero de 2022:

También se pueden construir prototipos experimentales de OpenJDK a partir de los repositorios de Mercurial. Estos están empezando a incorporar muchas características de especialización. Tenga en cuenta que estas son fuentes de Gnu Make/C++ y la creación de OpenJDK requiere experiencia técnica. Consulte las instrucciones de compilación de OpenJDK para obtener más detalles.

Componentes del proyecto

El proyecto está organizado en varias JEP (JDK Enhancement Proposals):

Clases de valor

Las clases de valor son tipos de referencia, al igual que todas las clases Java existentes. Sin embargo, renuncian a la capacidad de tener identidad. Esto significa que el ==operador compara instancias de la clase de valor por igualdad de sus componentes, en lugar de por identidad. Además, se producirá un error en la sincronización de instancias de clases de valor.

Las clases de valor aún son compatibles null, ya que son tipos de referencia. Se espera que la máquina virtual Java pueda aprovechar las restricciones adicionales de las clases de valor para eliminar la asignación de tipos de valor en el montón en la gran mayoría de los casos. Sin embargo, almacenar instancias de clases de valor en un campo o actualizarlas a una interfaz aún requerirá una asignación.

Los tipos existentes en la API de Java, como los que se conocen como clases basadas en valores, son candidatos para convertirse en clases de valores en una futura versión de JDK.java.util.Optional

Clases primitivas

Las clases primitivas están sujetas a todas las restricciones de las clases de valor, pero no son tipos de referencia. Esto significa que renuncian a la capacidad de apoyar null. En cambio, sus valores predeterminados son el valor cero para cada uno de los tipos de componentes ( 0para tipos numéricos, falsebooleanos, nulltipos de referencia y el valor cero para clases primitivas anidadas).

Todas las clases primitivas se almacenan "en línea", es decir, sin requerir una asignación de montón. Las matrices de clases primitivas no requerirán una dirección indirecta del puntero desde la matriz al montón. Cuando sea necesario, se insertarán conversiones para "encuadrar" la clase primitiva en una versión de clase de valor de sí misma y viceversa.

Clases para los Primitivos Básicos

Este JEP pretende expresar los tipos primitivos clásicos de la máquina virtual Java (byte, char, short, int, long, boolean, float, double) como clases primitivas.

Tradicionalmente, los ocho tipos primitivos se tratan por separado de todos los demás tipos. Proporcionarles declaraciones de clases primitivas elimina gran parte de esta mayúscula especial, lo que lleva a un sistema de tipos más elegante y fácil de entender.

Beneficios técnicos e implicaciones.

El rendimiento del acceso a la memoria y la eficiencia del acceso al valor "en caja" son un área importante que deben abordar estas características. Las características de 'Tipo de valor' y 'Especialización genérica' (cuando se aplican a listas o colecciones) reducen el uso de memoria, pero lo más importante es que evitan la dirección indirecta del puntero que normalmente provoca una pérdida de caché. [3] [4]

En lugar de una lista o conjunto de referencias de objetos, que apuntan a valores de datos dispersos por la memoria, las mejoras de Project Valhalla permitirán que los valores de lista o conjunto se distribuyan potencialmente de forma lineal, sin dirección indirecta, como un bloque de memoria consecutivo.

Los tipos de valor se conciben como "¡Códigos como una clase, funcionan como un int!" [5] La sincronización y la herencia se excluirían para los tipos de valor. Estos ya no requerirían identidad de objeto ni sobrecargas de memoria/puntero asociados, aunque podrían asumir una forma "en caja" para compatibilidad. [4]

Ver también

Referencias

  1. ^ Goetz, Brian. "¡Bienvenidos al Valhalla!". Archivo de correo OpenJDK . AbiertoJDK . Consultado el 12 de agosto de 2014 .
  2. ^ Evans, Ben. "Oracle lanza el proyecto Valhalla para Java". InfoQ . InfoMundo . Consultado el 12 de agosto de 2014 .
  3. ^ Kril, Paul. "Se propuso el Proyecto Valhalla de próxima generación; los tipos de valor, la especialización genérica y los volátiles mejorados encabezan la lista de deseos del Proyecto Valhalla". Mundo Java . InfoMundo . Consultado el 12 de agosto de 2014 .
  4. ^ ab "¿Lista y tipos de valores <int> disponibles para Java 10?". LiterateJava.com . Consultado el 12 de agosto de 2014 .
  5. ^ Rosa, Juan; Goetz, Brian; Steele, chico. "Estado de los Valores". AbiertoJDK . Consultado el 12 de agosto de 2014 .

enlaces externos