2011-02-06 10 views
48

EDIT: sfortunatamente LuaJIT è stato tolto dal confronto nel link sottostante.Perché LuaJIT è così buono?

Questo comparison dei linguaggi di programmazione mostra che LuaJIT ha un miglioramento di oltre dieci volte rispetto alla normale implementazione di Lua. Perché il cambiamento è così grande? C'è qualcosa di specifico su Lua che fa beneficiare molto la compilation JIT? Python viene digitato dinamicamente e compilato anche in bytecode, quindi perché PyPy (che ha JIT ora, credo) mostra un salto così grande nelle prestazioni?

+33

la risposta semplice: Mike Paul è un dio :) – Necrolis

risposta

56

Mike Pall ha parlato di questo in pochi luoghi:

Come per ogni sistema performante, la risposta alla fine si riduce a due cose: algoritmi e ingegneria. LuaJIT utilizza tecniche di compilazione avanzate e ha anche un'implementazione molto ben progettata. Ad esempio, quando le tecniche di compilazione di fantasia non sono in grado di gestire un pezzo di codice, LuaJIT ricade su un interprete molto veloce scritto in assembly x86.

LuaJIT ottiene punti doppi sull'aspetto ingegneristico, perché non solo lo stesso LuaJIT è ben progettato, ma il linguaggio Lua stesso ha un design più semplice e più coerente di Python e JavaScript. Ciò rende (marginalmente) più facile per un'implementazione fornire costantemente buone prestazioni.

+20

LuaJIT è inequivocabilmente un ottimo esempio di algoritmi eccellenti e ingegneria eccellente. Se questo (o questo) legge come testo di marketing è irrilevante. I loop dell'interprete codificati a mano in assembly sono misurabili molto più velocemente rispetto alla versione C dell'interprete sono esempi di buona ingegneria. Analisi alias, sinking del magazzino, load forwarding, nan-tagging, allocazione del registro ed efficiente combinazione di combinazione/uscita sono esempi di algoritmi eccellenti (e di ingegneria). – Eloff