Lançamento do V8 v9.5
A cada quatro semanas, criamos um novo branch do V8 como parte do nosso processo de lançamento. Cada versão é ramificada do Git master do V8 imediatamente antes de um marco Beta do Chrome. Hoje, temos o prazer de anunciar nosso mais novo branch, V8 versão 9.5, que está em beta até seu lançamento em coordenação com o Chrome 95 Stable em algumas semanas. O V8 v9.5 está repleto de várias novidades voltadas para desenvolvedores. Este post fornece uma prévia de alguns dos destaques em antecipação ao lançamento.
JavaScript
Intl.DisplayNames
v2
No v8.1 lançamos a API Intl.DisplayNames
no Chrome 81, com tipos suportados “language” (idioma), “region” (região), “script” (escrita) e “currency” (moeda). Com o v9.5, agora adicionamos dois novos tipos suportados: “calendar” (calendário) e “dateTimeField” (campo de data e hora). Eles retornam os nomes visíveis dos diferentes tipos de calendários e campos de data e hora correspondentes:
const esCalendarNames = new Intl.DisplayNames(['es'], { type: 'calendar' });
const frDateTimeFieldNames = new Intl.DisplayNames(['fr'], { type: 'dateTimeField' });
esCalendarNames.of('roc'); // "calendario de la República de China"
frDateTimeFieldNames.of('month'); // "mois"
Também aprimoramos o suporte para o tipo “language” com uma nova opção languageDisplay, que pode ser “standard” (padrão) ou “dialect” (dialeto) (como valor padrão se não especificado):
const jaDialectLanguageNames = new Intl.DisplayNames(['ja'], { type: 'language' });
const jaStandardLanguageNames = new Intl.DisplayNames(['ja'], { type: 'language' , languageDisplay: 'standard'});
jaDialectLanguageNames.of('en-US') // "アメリカ英語"
jaDialectLanguageNames.of('en-AU') // "オーストラリア英語"
jaDialectLanguageNames.of('en-GB') // "イギリス英語"
jaStandardLanguageNames.of('en-US') // "英語 (アメリカ合衆国)"
jaStandardLanguageNames.of('en-AU') // "英語 (オーストラリア)"
jaStandardLanguageNames.of('en-GB') // "英語 (イギリス)"
Opção estendida timeZoneName
A Intl.DateTimeFormat API
no v9.5 agora suporta quatro novos valores para a opção timeZoneName
:
- “shortGeneric” para exibir o nome do fuso horário em um formato genérico abreviado sem local, como “PT” ou “ET”, sem indicar se está em horário de verão.
- “longGeneric” para exibir o nome do fuso horário em um formato genérico longo sem local, como “Pacific Time” ou “Mountain Time”, sem indicar se está em horário de verão.
- “shortOffset” para exibir o nome do fuso horário no formato GMT local curto, como “GMT-8”.
- “longOffset” para exibir o nome do fuso horário no formato GMT local longo, como “GMT-0800”.
WebAssembly
Tratamento de Exceções
O V8 agora suporta a proposta de Tratamento de Exceções do WebAssembly (Wasm EH) para que módulos compilados com uma toolchain compatível (por exemplo, Emscripten) possam ser executados no V8. A proposta foi projetada para manter o overhead baixo em comparação com os workarounds anteriores usando JavaScript.
Por exemplo, compilamos o otimizador Binaryen para WebAssembly com implementações antigas e novas de tratamento de exceções.
Quando o tratamento de exceções está habilitado, o aumento no tamanho do código cai de cerca de 43% para a implementação antiga baseada em JavaScript para apenas 9% para o novo recurso Wasm EH.
Quando executamos wasm-opt.wasm -O3
em alguns arquivos grandes de teste, a versão Wasm EH não mostrou perda de desempenho em comparação com a linha de base sem exceções, enquanto a versão baseada em JavaScript levou cerca de 30% mais tempo.
No entanto, o Binaryen usa verificações de exceções esparsamente. Em cargas de trabalho com muitas exceções, espera-se que a diferença de desempenho seja ainda maior.
API do V8
O arquivo de cabeçalho principal v8.h foi dividido em várias partes que podem ser incluídas separadamente. Por exemplo, v8-isolate.h
agora contém a classe v8::Isolate
. Muitos arquivos de cabeçalho que declaram métodos passando v8::Local<T>
agora podem importar v8-forward.h
para obter a definição de v8::Local
e todos os tipos de objetos de heap do V8.
Por favor, use git log branch-heads/9.4..branch-heads/9.5 include/v8\*.h
para obter uma lista das alterações de API.