Lanzamiento de V8 v7.3
Cada seis semanas, creamos una nueva rama de V8 como parte de nuestro proceso de lanzamiento. Cada versión se ramifica desde el maestro de Git de V8 inmediatamente antes de un hito de Chrome Beta. Hoy nos complace anunciar nuestra rama más reciente, V8 versión 7.3, que está en beta hasta su lanzamiento en coordinación con Chrome 73 Stable en varias semanas. V8 v7.3 está llena de toda clase de novedades orientadas a desarrolladores. Esta publicación proporciona una vista previa de algunos de los aspectos destacados en anticipación al lanzamiento.
Rastros de stack async
Hemos activado el flag --async-stack-traces
de forma predeterminada. Los rastros de stack async sin costo facilitan el diagnóstico de problemas en producción con código altamente asíncrono, ya que la propiedad error.stack
que generalmente se envía a archivos de registro/servicios ahora proporciona más información sobre lo que causó el problema.
await
más rápido
Relacionado con el flag --async-stack-traces
mencionado anteriormente, también estamos habilitando el flag --harmony-await-optimization
de forma predeterminada, que es un prerequisito para los --async-stack-traces
. Consulta funciones y promesas async más rápidas para obtener más detalles.
Inicio más rápido de Wasm
A través de optimizaciones en los internals de Liftoff, hemos mejorado significativamente la velocidad de compilación de WebAssembly sin afectar la calidad del código generado. Para la mayoría de las cargas de trabajo, el tiempo de compilación se redujo entre un 15 y un 25%.
Características del lenguaje JavaScript
V8 v7.3 viene con varias nuevas características del lenguaje JavaScript.
Object.fromEntries
La API Object.entries
no es nada nueva:
const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]
Desafortunadamente, no había una forma sencilla de volver del resultado entries
a un objeto equivalente… ¡hasta ahora! V8 v7.3 soporta Object.fromEntries()
, una nueva API integrada que realiza la operación inversa de Object.entries
:
const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }
Para más información y casos de uso de ejemplo, consulta nuestra explicación de la característica Object.fromEntries
.
String.prototype.matchAll
Un caso de uso común de las expresiones regulares globales (g
) o con adherencia (y
) es aplicarlas a una cadena e iterar a través de todas las coincidencias. La nueva API String.prototype.matchAll
hace esto más fácil que nunca, especialmente para expresiones regulares con grupos de captura:
const string = 'Repositorios favoritos de GitHub: tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;
for (const match of string.matchAll(regex)) {
console.log(`${match[0]} en ${match.index} con '${match.input}'`);
console.log(`→ propietario: ${match.groups.owner}`);
console.log(`→ repositorio: ${match.groups.repo}`);
}
// Salida:
//
// tc39/ecma262 en 23 con 'Repositorios favoritos de GitHub: tc39/ecma262 v8/v8.dev'
// → propietario: tc39
// → repositorio: ecma262
// v8/v8.dev en 36 con 'Repositorios favoritos de GitHub: tc39/ecma262 v8/v8.dev'
// → propietario: v8
// → repositorio: v8.dev
Para más detalles, lee nuestra explicación de la característica String.prototype.matchAll
.
Atomics.notify
Atomics.wake
ha sido renombrado a Atomics.notify
, en conformidad con un cambio reciente en la especificación.
API de V8
Usa git log branch-heads/7.2..branch-heads/7.3 include/v8.h
para obtener una lista de los cambios en la API.
Los desarrolladores con un checkout activo de V8 pueden usar git checkout -b 7.3 -t branch-heads/7.3
para experimentar con las nuevas características en V8 v7.3. Alternativamente, puedes suscribirte al canal Beta de Chrome y probar las nuevas características pronto.