Pular para o conteúdo principal

16 postagens marcadas com "ECMAScript"

Ver todas os Marcadores

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.

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.

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.

Conteúdo adicional para "Compreendendo a especificação ECMAScript, parte 2"

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

Por que o2.foo é uma AssignmentExpression?

o2.foo não parece ser uma AssignmentExpression, já que não há atribuição. Por que ela é uma AssignmentExpression?

Na verdade, a especificação permite uma AssignmentExpression tanto como um argumento quanto como o lado direito de uma atribuição. Por exemplo:

function simple(a) {
console.log('O argumento foi ' + a);
}
simple(x = 1);
// → Registra “O argumento foi 1”.
x;
// → 1

…e…

x = y = 5;
x; // 5
y; // 5

o2.foo é uma AssignmentExpression que não atribui nada. Isso decorre das seguintes produções gramaticais, cada uma tomando o caso "mais simples" até a última:

Uma AssignmentExpression não precisa ter uma atribuição, ela pode ser apenas uma ConditionalExpression:

AssignmentExpression : ConditionalExpression

(Existem outras produções também, aqui mostramos apenas a relevante.)

Uma ConditionalExpression não precisa ter uma condicional (a == b ? c : d), ela pode ser apenas uma ShortcircuitExpression:

ConditionalExpression : ShortCircuitExpression

E assim por diante:

ShortCircuitExpression : LogicalORExpression

LogicalORExpression : LogicalANDExpression

LogicalANDExpression : BitwiseORExpression

BitwiseORExpression : BitwiseXORExpression

BitwiseXORExpression : BitwiseANDExpression

BitwiseANDExpression : EqualityExpression

EqualityExpression : RelationalExpression

RelationalExpression : ShiftExpression

Entendendo a especificação ECMAScript, parte 1

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

Todos os episódios

Neste artigo, analisamos uma função simples na especificação e tentamos entender a notação. Vamos lá!

Prefácio

Mesmo que você saiba JavaScript, ler sua especificação de linguagem, Especificação da Linguagem ECMAScript, ou apenas a especificação ECMAScript, pode ser bastante assustador. Pelo menos foi assim que me senti quando comecei a lê-la pela primeira vez.

APIs de internacionalização mais rápidas e com mais recursos

· Leitura de 6 minutos
[சத்யா குணசேகரன் (Sathya Gunasekaran)](https://twitter.com/_gsathya)

A Especificação da API de Internacionalização ECMAScript (ECMA-402, ou Intl) fornece funcionalidades essenciais específicas de localidade, como formatação de datas, formatação de números, seleção de formas plural e colação. As equipes do Chrome V8 e de Internacionalização do Google têm colaborado na adição de recursos à implementação da ECMA-402 no V8, enquanto lidam com dívidas técnicas e melhoram o desempenho e a interoperabilidade com outros navegadores.

Acelerando elementos espalhados

· Leitura de 10 minutos
Hai Dang & Georg Neis

Durante seu estágio de três meses na equipe do V8, Hai Dang trabalhou na melhoria do desempenho de [...array], [...string], [...set], [...map.keys()] e [...map.values()] (quando os elementos espalhados estão no início do literal do array). Ele até tornou Array.from(iterable) muito mais rápido também. Este artigo explica alguns dos detalhes técnicos de suas mudanças, que estão incluídas no V8 a partir da versão v7.2.

Funções assíncronas mais rápidas e promessas

· Leitura de 20 minutos
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)), sempre antecipando, e Benedikt Meurer ([@bmeurer](https://twitter.com/bmeurer)), profissional em desempenho de promessas

O processamento assíncrono em JavaScript tradicionalmente tinha a reputação de não ser particularmente rápido. Para piorar, depurar aplicativos JavaScript ao vivo — especialmente servidores Node.js — não é uma tarefa fácil, especialmente quando se trata de programação assíncrona. Felizmente os tempos estão mudando. Este artigo explora como otimizamos funções assíncronas e promessas no V8 (e até certo ponto em outros motores JavaScript também), e descreve como melhoramos a experiência de depuração para código assíncrono.

Organizando coisas no V8

· Leitura de 19 minutos
Simon Zünd ([@nimODota](https://twitter.com/nimODota)), comparador consistente

Array.prototype.sort estava entre os últimos recursos incorporados em JavaScript auto-hospedado no V8. Portá-lo ofereceu-nos a oportunidade de experimentar diferentes algoritmos e estratégias de implementação e finalmente torná-lo estável no V8 v7.0 / Chrome 70.

Melhorando o desempenho do `DataView` no V8

· Leitura de 9 minutos
Théotime Grohens, <i lang="fr">o especialista em Data-Vue</i>, e Benedikt Meurer ([@bmeurer](https://twitter.com/bmeurer)), especialista em desempenho profissional

DataViews são uma das duas maneiras possíveis de realizar acessos de memória em baixo nível no JavaScript, sendo a outra TypedArrays. Até agora, os DataViews eram muito menos otimizados do que os TypedArrays no V8, resultando em desempenho inferior em tarefas como cargas de trabalho intensivas em gráficos ou na decodificação/codificação de dados binários. As razões para isso foram principalmente escolhas históricas, como o fato de que asm.js escolheu TypedArrays em vez de DataViews, incentivando os motores a focarem no desempenho dos TypedArrays.