Pular para o conteúdo principal

Lançamento do V8 v8.5

· Leitura de 5 minutos
Zeynep Cankara, acompanhando alguns Mapas

A cada seis semanas, criamos uma nova ramificação do V8 como parte de 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 nossa mais nova ramificação, V8 versão 8.5, que está em beta até seu lançamento em coordenação com a versão estável do Chrome 85 nas próximas semanas. O V8 v8.5 está cheio de diversas novidades voltadas para desenvolvedores. Este post fornece uma prévia de alguns dos destaques na antecipação do lançamento.

Lançamento do V8 v8.4

· Leitura de 5 minutos
Camillo Bruni, aproveitando alguns booleanos frescos

A cada seis 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 estamos felizes em anunciar nosso branch mais recente, V8 versão 8.4, que está em beta até seu lançamento em coordenação com o Chrome 84 Stable em algumas semanas. O V8 v8.4 está repleto de novidades voltadas para desenvolvedores. Este post fornece uma prévia de alguns dos destaques em antecipação ao lançamento.

Coleta de lixo de alto desempenho para C++

· Leitura de 11 minutos
Anton Bikineev, Omer Katz ([@omerktz](https://twitter.com/omerktz)), e Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)), especialistas em memória C++

No passado, já falamos muito sobre coleta de lixo para JavaScript, o modelo de objetos de documentos (DOM) e como tudo isso é implementado e otimizado no V8. No entanto, nem tudo no Chromium é JavaScript, já que a maior parte do navegador e de seu mecanismo de renderização Blink, onde o V8 está embutido, são escritos em C++. O JavaScript pode ser usado para interagir com o DOM, que é então processado pelo pipeline de renderização.

Entendendo a especificação ECMAScript, parte 4

· Leitura de 7 minutos
[Marja Hölttä](https://twitter.com/marjakh), espectadora especulativa de especificações

Todos os episódios

Enquanto isso em outras partes da Web

Jason Orendorff da Mozilla publicou uma análise aprofundada incrível sobre peculiaridades sintáticas de JS. Embora os detalhes de implementação sejam diferentes, todos os motores JS enfrentam os mesmos problemas com essas peculiaridades.

Até 4GB de memória em WebAssembly

· Leitura de 8 minutos
Andreas Haas, Jakob Kummerow, e Alon Zakai

Introdução

Graças ao trabalho recente no Chrome e Emscripten, agora você pode usar até 4GB de memória em aplicações WebAssembly. Isso é um aumento em relação ao limite anterior de 2GB. Pode parecer estranho que tenha havido um limite - afinal, nenhum trabalho foi necessário para permitir que as pessoas usassem 512MB ou 1GB de memória! - mas acontece que há algumas coisas especiais acontecendo no salto de 2GB para 4GB, tanto no navegador quanto na cadeia de ferramentas, que descreveremos neste post.

Lançamento do V8 v8.3

· Leitura de 4 minutos
[Victor Gomes](https://twitter.com/VictorBFG), trabalhando em segurança de casa

A cada seis semanas, criamos uma nova branch do V8 como parte do nosso processo de lançamento. Cada versão é ramificada a partir do Git mestre do V8 imediatamente antes de um marco Beta do Chrome. Hoje temos o prazer de anunciar nossa nova branch, V8 versão 8.3, que está em beta até seu lançamento em coordenação com o Chrome 83 Stable nas próximas semanas. O V8 v8.3 está repleto de todos os tipos de novidades voltadas para desenvolvedores. Este post fornece uma prévia de alguns dos destaques em antecipação ao lançamento.

O que há naquele `.wasm`? Introduzindo: `wasm-decompile`

· Leitura de 7 minutos
Wouter van Oortmerssen ([@wvo](https://twitter.com/wvo))

Temos um número crescente de compiladores e outras ferramentas que geram ou manipulam arquivos .wasm, e às vezes você pode querer dar uma olhada por dentro. Talvez você seja um desenvolvedor de tal ferramenta, ou, mais diretamente, um programador direcionado ao Wasm, e esteja se perguntando como é o código gerado, seja por motivo de desempenho ou outros.

Compreendendo a especificação do ECMAScript, parte 3

· Leitura de 12 minutos
[Marja Hölttä](https://twitter.com/marjakh), espectadora especulativa da especificação

Todos os episódios

Neste episódio, aprofundaremos na definição da linguagem ECMAScript e sua sintaxe. Se você não está familiarizado com gramáticas livres de contexto, agora é um bom momento para revisar o básico, já que a especificação utiliza gramáticas livres de contexto para definir a linguagem. Consulte o capítulo sobre gramáticas livres de contexto em "Crafting Interpreters" para uma introdução acessível ou a página da Wikipédia para uma definição mais matemática.

Compressão de Ponteiros no V8

· Leitura de 23 minutos
Igor Sheludko e Santiago Aboy Solanes, *os* compressores de ponteiros

Há uma batalha constante entre memória e desempenho. Como usuários, gostaríamos que as coisas fossem rápidas e consumissem o menor espaço de memória possível. Infelizmente, normalmente melhorar o desempenho tem um custo no consumo de memória (e vice-versa).

Entendendo a especificação ECMAScript, parte 2

· Leitura de 11 minutos
[Marja Hölttä](https://twitter.com/marjakh), espectadora especulativa da especificação

Vamos praticar nossas incríveis habilidades de leitura da especificação um pouco mais. Se você não olhou o episódio anterior, agora é um bom momento para fazê-lo!

Todos os episódios

Pronto para a parte 2?

Uma maneira divertida de conhecer a especificação é começar com um recurso JavaScript que sabemos que existe e descobrir como ele está especificado.

Aviso! Este episódio contém algoritmos copiados da especificação ECMAScript de fevereiro de 2020. Eles eventualmente estarão desatualizados.

Sabemos que as propriedades são procuradas na cadeia de protótipos: se um objeto não possui a propriedade que estamos tentando ler, subimos na cadeia de protótipos até encontrá-la (ou encontrar um objeto que não tem mais um protótipo).

Por exemplo:

const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
// → 99

Onde está definida a caminhada no protótipo?

Vamos tentar descobrir onde esse comportamento está definido. Um bom lugar para começar é uma lista de Métodos Internos do Objeto.

Existem [[GetOwnProperty]] e [[Get]] – estamos interessados na versão que não está restrita às propriedades próprias, então vamos com [[Get]].

Infelizmente, o tipo de especificação Descriptor de Propriedade também tem um campo chamado [[Get]], então, ao navegar pela especificação de [[Get]], precisamos distinguir cuidadosamente entre os dois usos independentes.