Qual è la relazione tra interpreti meta-circolari, macchine virtuali e prestazioni migliorate?


12

Ho letto degli interpreti meta-circolari sul web (incluso SICP) e ho esaminato il codice di alcune implementazioni (come PyPy e Narcissus).

Ho letto un bel po 'di due lingue che hanno fatto grande uso della valutazione metacircolare, Lisp e Smalltalk. Per quanto ho capito, Lisp è stato il primo compilatore self-hosting e Smalltalk ha avuto la prima "vera" implementazione JIT.

Una cosa che non ho capito appieno è come possono quegli interpreti / compilatori ottenere così buone prestazioni o, in altre parole, perché PyPy è più veloce di CPython? È a causa della riflessione?

Inoltre, la mia ricerca Smalltalk mi ha portato a credere che ci sia una relazione tra JIT, macchine virtuali e riflessione. Le macchine virtuali come JVM e CLR consentono una grande quantità di introspezione di tipi e credo che lo utilizzino molto nella compilazione Just-in-Time (e AOT, suppongo?). Ma per quanto ne so, le macchine virtuali sono un po 'come le CPU, in quanto hanno un set di istruzioni di base. Le macchine virtuali sono efficienti perché includono informazioni di tipo e di riferimento, che consentirebbero una riflessione indipendente dal linguaggio?

Lo chiedo perché molti linguaggi sia interpretati che compilati utilizzano ora bytecode come target (LLVM, Parrot, YARV, CPython) e macchine virtuali tradizionali come JVM e CLR hanno ottenuto incredibili miglioramenti delle prestazioni. Mi è stato detto che si tratta di JIT, ma per quanto ne so JIT non è una novità dal momento che Smalltalk e il sé stesso di Sun lo hanno fatto prima di Java. Non ricordo le VM che si sono comportate particolarmente bene in passato, non c'erano molte non accademiche al di fuori di JVM e .NET e le loro prestazioni non erano sicuramente buone come lo sono ora (vorrei poter trovare questo reclamo, ma io parla per esperienza personale).

Poi all'improvviso, alla fine degli anni 2000, qualcosa è cambiato e molte macchine virtuali hanno iniziato a comparire anche per lingue consolidate e con prestazioni molto buone. È stato scoperto qualcosa sull'implementazione di JIT che ha permesso a quasi tutte le VM moderne di salire alle stelle in termini di prestazioni? Un libro o un libro forse?


3
I soldi. Il denaro che veniva versato in C ++ e Fortran ora viene versato in HotSpot, CLR, Mono, V8, Nitro, SpiderMonkey, ecc.
Jörg W Mittag,

Posso solo indovinare, ma penso che sia solo un miglioramento nel tempo, come descritto qui joelonsoftware.com/articles/fog0000000017.html
Doc Brown,


1
@Gomi Non si tratta di quanto sia simile il linguaggio di implementazione al linguaggio implementato. Ci sono interpreti JavaScript, Lisp, Prolog, SmallTalk e Ruby scritti in RPython e ottengono esattamente le stesse chicche offerte da PyPy. L'unica ragione per cui RPython si basa su Python è che è stato creato da un gruppo di appassionati di Python. Le funzionalità di RPython che rendono PyPy veloce non hanno nulla a che fare con Python: generazione automatica di compilatori JIT, garbage collector, ecc. Dovresti creare un compilatore completamente nuovo però.

4
-1, perché ti sembra di avere almeno 3 diverse domande qui: (a) Perché sono implementazioni meta-circolare così bene? (b) Le macchine virtuali sono efficienti grazie alle informazioni sul tipo e l'introspezione è vantaggiosa per le prestazioni? (c) Come è cresciuta la popolarità delle VM alla fine degli anni 2000 e come mai all'improvviso hanno avuto buone prestazioni? Penso che sia meglio porre queste domande separatamente.
Oak

Risposte:


1

2 su 3: non esiste alcuna relazione tra i runtime linguistici "meta-circolari" e "ad alte prestazioni". I runtime meta-circolari che raggiungono prestazioni elevate lo fanno compilando JIT in codice nativo ed eseguendo il codice nativo. Non c'è motivo per cui il tuo runtime Python hi-perf debba essere scritto in Python o Lisp in Lisp, ecc. Ma se pensi che il tuo linguaggio sia più potente, espressivo, ecc. Degli altri, perché non usarlo per scrivere il suo runtime? O se non pensi che la tua lingua sia in qualche modo "migliore" rispetto ad altre, perché hai problemi a implementarla?

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.