Pular para o conteúdo principal

Lançamento do V8 v7.3

· Leitura de 4 minutos
Clemens Backes, especialista em compiladores

A cada seis semanas, criamos um novo branch do V8 como parte de nosso processo de lançamento. Cada versão é derivada do Git master do V8 imediatamente antes de um marco do Chrome Beta. Hoje estamos felizes em anunciar nosso mais novo branch, V8 versão 7.3, que está em beta até seu lançamento em coordenação com o Chrome 73 Stable em algumas semanas. O V8 v7.3 está repleto de melhorias voltadas aos desenvolvedores. Este post fornece uma prévia de alguns destaques em antecipação ao lançamento.

Rastreamentos de pilha assincrônicos

Estamos ativando a flag --async-stack-traces por padrão. Rastreamentos de pilha assincrônicos sem custo tornam mais fácil diagnosticar problemas em produção com código intensivamente assíncrono, já que a propriedade error.stack, que geralmente é enviada para arquivos/serviços de log, agora oferece mais informações sobre o que causou o problema.

await mais rápido

Relacionado à flag mencionada acima, --async-stack-traces, também estamos ativando a flag --harmony-await-optimization por padrão, que é um pré-requisito para o --async-stack-traces. Veja funções assíncronas e promessas mais rápidas para mais detalhes.

Inicialização mais rápida do Wasm

Por meio de otimizações nos detalhes internos do Liftoff, melhoramos significativamente a velocidade de compilação do WebAssembly sem prejudicar a qualidade do código gerado. Para a maioria das cargas de trabalho, o tempo de compilação foi reduzido em 15–25%.

Tempo de compilação do Liftoff no demo Epic ZenGarden

Recursos de linguagem JavaScript

V8 v7.3 vem com vários novos recursos de linguagem JavaScript.

Object.fromEntries

A API Object.entries não é novidade:

const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]

Infelizmente, não há uma maneira fácil de voltar do resultado de entries para um objeto equivalente… até agora! O V8 v7.3 suporta Object.fromEntries(), uma nova API interna que realiza o inverso de Object.entries:

const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }

Para mais informações e exemplos de casos de uso, veja nosso explicador de recurso Object.fromEntries.

String.prototype.matchAll

Um caso comum de uso de expressões regulares globais (g) ou adesivas (y) é aplicá-las a uma string e iterar por todas as correspondências. A nova API String.prototype.matchAll torna isso mais fácil do que nunca, especialmente para expressões regulares com grupos de captura:

const string = 'Repositórios favoritos do 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]} em ${match.index} com '${match.input}'`);
console.log(`→ proprietário: ${match.groups.owner}`);
console.log(`→ repositório: ${match.groups.repo}`);
}

// Saída:
//
// tc39/ecma262 em 23 com 'Repositórios favoritos do GitHub: tc39/ecma262 v8/v8.dev'
// → proprietário: tc39
// → repositório: ecma262
// v8/v8.dev em 36 com 'Repositórios favoritos do GitHub: tc39/ecma262 v8/v8.dev'
// → proprietário: v8
// → repositório: v8.dev

Para mais detalhes, leia nosso explicador sobre String.prototype.matchAll.

Atomics.notify

Atomics.wake foi renomeado para Atomics.notify, correspondendo a uma recente mudança na especificação.

API do V8

Utilize git log branch-heads/7.2..branch-heads/7.3 include/v8.h para obter uma lista das mudanças na API.

Desenvolvedores com um checkout ativo do V8 podem usar git checkout -b 7.3 -t branch-heads/7.3 para experimentar os novos recursos no V8 v7.3. Alternativamente, você pode assinar o canal Beta do Chrome e experimentar os novos recursos em breve.