Pular para o conteúdo principal

Lançamento do V8 v5.1

· Leitura de 4 minutos
a equipe do V8

O primeiro passo no processo de lançamento do V8 é a criação de um novo branch a partir do Git master, imediatamente antes de o Chromium criar um branch para uma versão beta do Chrome (aproximadamente a cada seis semanas). Nosso mais novo branch de lançamento é V8 v5.1, que permanecerá em beta até lançarmos uma versão estável em conjunto com o Chrome 51 Stable. Aqui está um resumo dos novos recursos voltados para desenvolvedores nesta versão do V8.

Suporte aprimorado ao ECMAScript​

V8 v5.1 contém várias alterações em direção à conformidade com o rascunho da especificação ES2017.

Symbol.species​

Métodos como Array.prototype.map constroem instâncias da subclasse como sua saída, com a opção de personalizar isso alterando Symbol.species. Alterações análogas foram feitas em outras classes embutidas.

Personalização de instanceof​

Construtores podem implementar seu próprio método Symbol.hasInstance, que substitui o comportamento padrão.

Fechamento de iteradores​

Iteradores criados como parte de um loop for-of (ou outra iteração embutida, como o operador spread) agora são verificados para um método close, que é chamado se o loop terminar precocemente. Isso pode ser usado para limpeza após a conclusão da iteração.

Método exec de subclasses de RegExp​

Subclasses de RegExp podem sobrescrever o método exec para alterar apenas o algoritmo principal de correspondência, com a garantia de que ele será chamado por funções de alto nível como String.prototype.replace.

Inferência de nomes de funções​

Nomes de funções inferidos para expressões de funções agora geralmente estão disponíveis na propriedade name de funções, seguindo a formalização das regras do ES2015. Isso pode alterar rastros de pilha existentes e fornecer nomes diferentes das versões anteriores do V8. Também dá nomes úteis para propriedades e métodos com nomes de propriedade computados:

class Container {
...
[Symbol.iterator]() { ... }
...
}
const c = new Container;
console.log(c[Symbol.iterator].name);
// → '[Symbol.iterator]'

Array.prototype.values​

Análogo a outros tipos de coleções, o método values em Array retorna um iterador sobre o conteúdo do array.

Melhorias de desempenho​

V8 v5.1 também traz algumas melhorias notáveis de desempenho para os seguintes recursos do JavaScript:

  • Execução de loops como for-in
  • Object.assign
  • Instanciação de Promise e RegExp
  • Chamadas para Object.prototype.hasOwnProperty
  • Math.floor, Math.round e Math.ceil
  • Array.prototype.push
  • Object.keys
  • Array.prototype.join & Array.prototype.toString
  • Redução de strings repetidas, por exemplo '.'.repeat(1000)

WebAssembly (Wasm)​

V8 v5.1 tem suporte preliminar para WebAssembly. Você pode habilitá-lo usando a flag --expose_wasm no d8. Alternativamente, você pode testar os demos do Wasm com o Chrome 51 (Canal Beta).

Memória​

O V8 implementou mais partes do Orinoco:

  • Evacuação paralela da geração jovem
  • Conjuntos de lembrança escaláveis
  • Alocação de espaço negro

O impacto é a redução de interrupções e consumo de memória em momentos de necessidade.

API do V8​

Por favor, veja nosso resumo das alterações na API. Este documento é atualizado regularmente algumas semanas após cada grande lançamento.

Desenvolvedores com um checkout ativo do V8 podem usar git checkout -b 5.1 -t branch-heads/5.1 para experimentar os novos recursos do V8 v5.1. Alternativamente, você pode inscrever-se no canal beta do Chrome e testar os novos recursos em breve.