Lançamento do V8 v5.1
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
eMath.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.