O que torna algumas coisas mais fáceis de analisar do que outras?

8

Eu estava lendo a página da Wikipedia para o WebAssembly e dizia: “O WebAssembly é ... projetado para ser mais rápido para analisar do que JavaScript ”, o que me fez pensar sobre o que torna um determinado idioma ou formato de dados mais rápido do que outros e quais algoritmos de análise são usava?

Moisés
fonte

Respostas:

18

Este tópico é muito complexo. Você pode pesquisar no Google por algoritmos de analisador e obterá bastante material detalhado.

Em geral:

  • Quanto menos ambiguidades tiverem que ser resolvidas, mais rápido será o processo de análise.
  • Quanto mais tokens precisam ser considerados antes que uma decisão possa ser tomada, mais complexo fica.

Por exemplo:
Quando um analisador JS vê a functionpalavra - chave neste código function xyz(a, b) {}:, a palavra-chave da função é ambígua. Primeiro, ele precisa processar o próximo token xyze verificar se é um identificador antes de poder decidir que é uma declaração de função.

No entanto, se o próximo token fosse um (estamos lidando com um literal de função: function(a, b) {}. Isso requer que o analisador se comporte de maneira muito diferente, portanto, mais código no analisador e, portanto, execução mais lenta.

Se houvesse palavras-chave diferentes para esses dois propósitos, não haveria ambiguidade:

function_decl xyz(a, b, c) {} e function_lit(a, b, c) {}

No entanto, ninguém gostaria de escrever em um idioma assim. Mas o WebAssembly não deve ser escrito à mão. Isso permite que o idioma seja adaptado às máquinas, e não aos humanos.

marstato
fonte
11
Isso significa que o Lisp é analisado com muita facilidade?
Moses
9
@Meses: Sim, escrever um analisador ingênuo de cisco é trivial, porque a sintaxe é homoicônica com a estrutura de uma árvore de sintaxe abstrata e quase não existem ambiguidades.
Phoshi 10/03/19
4
Outro bom exemplo é o bytecode, geralmente pode ser analisado com uma instrução de chave em loop e é isso.
Whatsisname
@whatsisname Na verdade, o mesmo se aplica a Assembléia regular e Assembléia Web
marstato