Pular para o conteúdo principal

Lançamento do V8 v6.4

· Leitura de 4 minutos
a equipe do V8

A cada seis semanas, criamos uma nova ramificação do V8 como parte do nosso processo de lançamento. Cada versão é ramificada a partir do Git master do V8 imediatamente antes de uma milestone Beta do Chrome. Hoje temos o prazer de anunciar nossa mais nova ramificação, V8 versão 6.4, que está na fase beta até seu lançamento em coordenação com o Chrome 64 Stable nas próximas semanas. O V8 v6.4 está repleto de novidades voltadas para desenvolvedores. Este post fornece uma prévia de alguns dos destaques em antecipação ao lançamento.

Desempenho

O V8 v6.4 melhora o desempenho do operador instanceof em 3,6×. Como resultado direto, o uglify-js agora é 15–20% mais rápido de acordo com o Web Tooling Benchmark do V8.

Esta versão também aborda alguns gargalos de desempenho em Function.prototype.bind. Por exemplo, o TurboFan agora inlinha consistentemente todas as chamadas monomórficas para bind. Além disso, o TurboFan também suporta o padrão de callback vinculado, o que significa que, em vez do seguinte:

doSomething(callback, someObj);

Agora você pode usar:

doSomething(callback.bind(someObj));

Dessa forma, o código é mais legível e você ainda obtém o mesmo desempenho.

Graças às últimas contribuições de Peter Wong, WeakMap e WeakSet agora são implementados usando o CodeStubAssembler, resultando em melhorias de desempenho de até 5× em geral.

Como parte do esforço contínuo do V8 para melhorar o desempenho de métodos embutidos em arrays, aprimoramos o desempenho de Array.prototype.slice ~4× ao reimplementá-lo usando o CodeStubAssembler. Além disso, as chamadas para Array.prototype.map e Array.prototype.filter agora são inlinhadas em muitos casos, conferindo-lhes um perfil de desempenho competitivo com versões escritas manualmente.

Trabalhamos para que as leituras fora dos limites em arrays, typed arrays e strings não incorram mais em uma penalidade de desempenho de ~10× após notar esse padrão de codificação sendo utilizado na prática.

Memória

Os objetos de código embutidos e manipuladores de bytecode do V8 agora são desserializados de forma preguiçosa a partir do snapshot, o que pode reduzir significativamente a memória consumida por cada Isolated. Testes no Chrome mostram economias de várias centenas de KB por guia ao navegar em sites comuns.

Fique atento a um post dedicado a este assunto no início do próximo ano.

Recursos da linguagem ECMAScript

Esta versão do V8 inclui suporte para dois novos recursos interessantes de expressões regulares.

Em expressões regulares com a flag /u, escapes de propriedades Unicode agora estão ativados por padrão.

const regexGreekSymbol = /\p{Script_Extensions=Greek}/u;
regexGreekSymbol.test('π');
// → true

O suporte para grupos de captura nomeados em expressões regulares agora está ativado por padrão.

const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
const result = pattern.exec('2017-12-15');
// result.groups.year === '2017'
// result.groups.month === '12'
// result.groups.day === '15'

Mais detalhes sobre esses recursos estão disponíveis em nosso post intitulado Próximos recursos de expressões regulares.

Graças ao Groupon, o V8 agora implementa import.meta, o que permite que os incorporadores exponham metadados específicos do host sobre o módulo atual. Por exemplo, o Chrome 64 expõe o URL do módulo via import.meta.url, e o Chrome planeja adicionar mais propriedades a import.meta no futuro.

Para auxiliar na formatação localmente ciente de strings produzidas por formatadores de internacionalização, os desenvolvedores agora podem usar Intl.NumberFormat.prototype.formatToParts() para formatar um número em uma lista de tokens e seus tipos. Obrigado à Igalia por implementar isso no V8!

API do V8

Por favor, use git log branch-heads/6.3..branch-heads/6.4 include/v8.h para obter uma lista das mudanças na API.

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