Cosa rende alcune cose più facili da analizzare rispetto ad altre?


8

Stavo solo leggendo la pagina di Wikipedia per WebAssembly e dice: " WebAssembly è ... progettato per essere più veloce da analizzare di JavaScript ", il che mi ha fatto pensare, cosa rende più veloce un determinato linguaggio o formato di dati rispetto ad altri e quali algoritmi di analisi sono Usato?

Risposte:


18

Questo argomento è molto complesso. Puoi cercare su Google algoritmi parser e otterrai un sacco di materiale dettagliato.

In generale:

  • Meno ambiguità devono essere risolte, più veloce è il processo di analisi.
  • Più token devono essere considerati prima che una decisione possa essere presa, più diventa complessa.

Ad esempio:
quando un parser JS vede la functionparola chiave in questo codice function xyz(a, b) {}:, la parola chiave funzione è ambigua. Deve prima elaborare il token successivo xyze verificare che sia un identificatore prima di poter decidere che si tratta di una dichiarazione di funzione.

Tuttavia, se il token successivo fosse un (si tratta di una funzione letterale: function(a, b) {}. Ciò richiede che il parser si comporti in modo molto diverso, quindi più codice nel parser, quindi un'esecuzione più lenta.

Se ci fossero parole chiave diverse per questi due scopi, non ci sarebbero ambiguità:

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

Tuttavia, nessuno vorrebbe scrivere in una tale lingua. Ma WebAssembly non dovrebbe essere scritto a mano. Ciò consente al linguaggio di essere adattato alle macchine, piuttosto che agli umani.


1
Ciò significherebbe che Lisp è analizzato molto facilmente?
Mosè,

9
@Moses: Sì, scrivere un parser lisp ingenuo è banale, perché la sintassi è omoiconica con la struttura di un albero di sintassi astratto e non esistono quasi ambiguità.
Phoshi

4
Un altro buon esempio è il bytecode, spesso può essere analizzato con un'istruzione switch in loop e il gioco è fatto.
whatsisname

@whatsisname In effetti, lo stesso vale per l'Assemblea ordinaria e l'Assemblea Web
marstato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.