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?