PHP 8 oficial GA

El equipo de PHP acaba de anunciar la  GA oficial de PHP 8.

Enlace de descarga: https://www.php.net/downloads

PHP 8.0.0 es la última versión principal. Introduce algunos cambios importantes, así como muchas funciones nuevas y mejoras de rendimiento. A continuación, se muestran algunos aspectos destacados:

JIT, compilación Just-In-Time, Just-In-Time

La característica más importante no es otra que JIT. La investigación y el desarrollo de esta función duró muchos años y sobrevivió a las series principales de PHP 5 y 7 (proyecto PHP 6 abortado), y no fue hasta marzo del año pasado que finalmente se confirmó votando para ingresar a PHP 8 .

JIT es una estrategia de compilador que expresa el código como un estado intermedio, lo convierte en código de máquina que depende de la arquitectura en tiempo de ejecución y lo ejecuta inmediatamente. En PHP, esto significa que JIT trata las instrucciones generadas por Zend VM como representaciones intermedias y las ejecuta en código máquina que depende de la arquitectura, es decir, ya no es Zend VM la que aloja el código, sino la CPU de menor nivel. .

Aunque desde PHP 7.0, a través de medidas específicas como la optimización de la estructura de datos central HashTable, el fortalecimiento de ciertos códigos de operación en Zend VM y la mejora continua del componente Optimizador de OPCache, el rendimiento de PHP ha mejorado significativamente, pero de hecho estas optimizaciones parecen haber llegado a sus límites. . Ahora, JIT comienza desde abajo y se considera la mejor manera de mejorar el rendimiento de PHP.

Con respecto a la comparación de rendimiento después de la introducción de JIT (y el rendimiento general de PHP 8), puede consultar la prueba de referencia de Phoronix (Nota: la prueba se realizó utilizando la versión de compilación del código fuente a finales de mayo). 

Tipos de unión, tipo de unión

Tipos de unión admite la recepción de varios tipos diferentes de valores. Es una colección de dos o más tipos. Puede elegir uno de ellos cuando lo use. El uso de tipos de unión en las bibliotecas estándar de ecosistemas de código abierto, incluido PHP, es muy común. PHP admite tipos de unión, lo que permitirá que se migre más información de tipos de phpdoc a firmas de funciones. Se puede decir que después de los genéricos, el tipo conjunto es el mayor avance en el sistema de declaración de tipo actual.

Atributos, anotación

Los Atributos aquí son las anotaciones en otros idiomas, que brindan una forma de agregar metadatos a la clase sin analizar el bloque del documento.

Nuevo tipo de retorno estático

Aunque es posible devolver self, considerando la naturaleza de la tipificación dinámica de PHP, el soporte de tipos de retorno estáticos en PHP 8 será más eficiente y debería ser muy útil para muchos desarrolladores.

class Foo
{
    public function test(): static
    {
        return new static();
    }
}

WeakMap, mapa débil

WeakMaps permite la creación de mapeos de objetos a valores arbitrarios (similar a SplObjectStorage) sin prevenir la recolección de basura de los objetos usados ​​como claves. Siempre que el objeto se agregue al WeakMap, el GC puede recuperar la memoria que ocupa cuando se activa la condición.

En PHP 7.4, se ha introducido el soporte para WeakReference (referencia débil). Sin embargo, la referencia débil original en sí misma tiene un uso limitado, y en la práctica se usa más comúnmente el mapeo débil. Dado que no existe una función para registrar y destruir las devoluciones de llamada, es imposible implementar un mapeo débil efectivo sobre las referencias débiles de PHP. El caso de uso general del mapeo débil es asociar datos con una sola instancia de objeto sin forzarlos a permanecer vivos, evitando procesos de larga ejecución que ocupan memoria innecesariamente.

class Foo 
{
    private WeakMap $cache;
 
    public function getSomethingWithCaching(object $obj): object
    {
        return $this->cache[$obj]
           ??= $this->computeSomethingExpensive($obj);
    }
}

Con respecto a WeakMap / WeakReference, puede consultar la parte de WeakRef de este artículo. Aunque se trata de JS, los principios son los mismos:

https://www.oschina.net/news/106670/what-s-new-in-javascript-google-io-2019

Se pueden ver más funciones relacionadas:

  • https://www.php.net/index.php#id2020-06-25-1

  • https://wiki.php.net/rfc

  • https://github.com/php/php-src/blob/master/UPGRADING

  • https://derickrethans.nl/archive.html (el blog de Derick Rethans, es un colaborador principal de PHP y el administrador de versiones de PHP 7.4)

Cabe señalar que PHP 8 es una versión de actualización importante con algunos cambios importantes, por lo que es mejor verificar los asuntos relacionados del documento ACTUALIZACIÓN. Pero, de hecho, muchos de estos cambios importantes se han introducido en la versión 7. * anterior, por lo que si siempre mantiene la última versión, la actualización a PHP 8 tendrá poco efecto.

El principal colaborador de JIT en PHP 8, @Laruence, ha publicado artículos relacionados sobre el proceso de desarrollo de JIT.Si está interesado, puede consultarlo: palabras escritas antes del lanzamiento de PHP 8 .

Supongo que te gusta

Origin www.oschina.net/news/121754/php-8-ga
Recomendado
Clasificación