In welchem ​​Verhältnis stehen Meta-Circular-Interpreter, virtuelle Maschinen und Leistungssteigerung?

12

Ich habe im Internet über Meta-Circular-Interpreter (einschließlich SICP) gelesen und mich mit dem Code einiger Implementierungen (wie PyPy und Narcissus) befasst.

Ich habe ziemlich viel über zwei Sprachen gelesen, die sich der metazirkulären Auswertung bedienten, Lisp und Smalltalk. Soweit ich verstanden habe, war Lisp der erste selbsthostende Compiler und Smalltalk hatte die erste "echte" JIT-Implementierung.

Eine Sache, die ich nicht vollständig verstanden habe, ist, wie diese Interpreter / Compiler eine so gute Leistung erzielen können, oder mit anderen Worten, warum ist PyPy schneller als CPython? Liegt es am Nachdenken?

Meine Smalltalk-Recherchen haben mich auch zu der Annahme geführt, dass es eine Beziehung zwischen JIT, virtuellen Maschinen und Reflexion gibt. Virtuelle Maschinen wie die JVM und die CLR ermöglichen viel Selbstbeobachtung von Typen, und ich glaube, dass sie diese bei der Just-in-Time-Kompilierung (und AOT, nehme ich an?) Hervorragend nutzen. Aber soweit ich weiß, sind virtuelle Maschinen ähnlich wie CPUs, da sie einen grundlegenden Befehlssatz haben. Sind virtuelle Maschinen effizient, weil sie Typ- und Referenzinformationen enthalten, die eine sprachunabhängige Reflexion ermöglichen?

Ich frage dies, weil viele sowohl interpretierte als auch kompilierte Sprachen jetzt Bytecode als Ziel verwenden (LLVM, Parrot, YARV, CPython) und traditionelle VMs wie JVM und CLR unglaubliche Leistungssteigerungen erzielt haben. Mir wurde gesagt, dass es sich um JIT handelt, aber soweit ich weiß, ist JIT nichts Neues, da Smalltalk und Suns eigenes Selbst dies vor Java getan haben. Ich kann mich nicht erinnern, dass VMs in der Vergangenheit besonders gute Leistungen erbracht haben. Außer JVM und .NET gab es nicht viele nicht-akademische VMs, und ihre Leistung war definitiv nicht so gut wie jetzt (ich wünschte, ich könnte diese Behauptung aufstellen, aber ich aus eigener Erfahrung).

Dann, in den späten 2000ern, änderte sich plötzlich etwas und es tauchten viele VMs auf, sogar für etablierte Sprachen und mit sehr guter Leistung. Wurde an der JIT-Implementierung etwas entdeckt, das praktisch jeder modernen VM einen Leistungssprung ermöglichte? Vielleicht ein Papier oder ein Buch?

Gomi
quelle
3
Geld. Das Geld, das früher in C ++ und Fortran
Jörg W Mittag
Ich kann nur raten, aber ich denke, es ist nur eine Verbesserung im Laufe der Zeit, wie hier beschrieben joelonsoftware.com/articles/fog0000000017.html
Doc Brown
1
@Gomi Es geht nicht darum, wie ähnlich die Implementierungssprache der implementierten Sprache ist. Es gibt in RPython geschriebene JavaScript-, Lisp-, Prolog-, SmallTalk- und Ruby-Interpreter, und sie erhalten genau die gleichen Extras, die PyPy anbietet. Der einzige Grund, warum RPython auf Python basiert, ist, dass es von einer Reihe von Python-Enthusiasten erstellt wurde. Die Funktionen von RPython, die PyPy schnell machen, haben nichts mit Python zu tun: Die automatische JIT-Compiler-Generierung, die Garbage Collectors usw. - und ja, das meiste davon könnte im Prinzip in anderen Sprachen erfolgen. Sie müssten jedoch einen ganz neuen Compiler erstellen.
4
-1 weil Sie hier mindestens 3 verschiedene Fragen zu haben scheinen : (a) Warum sind Meta-Circular-Implementierungen so gut? (b) Sind VMs aufgrund von Typinformationen effizient und wirkt sich eine Introspektion positiv auf die Leistung aus? (c) Wie kam es in den späten 2000ern zu einem Anstieg der VM-Popularität und wie kam es, dass sie plötzlich eine gute Leistung zeigten? Ich denke, es ist besser, diese Fragen getrennt zu stellen.
Oak

Antworten:

1

2 von 3: Es besteht kein Zusammenhang zwischen "Meta-Circular" - und "High-Performance" -Sprachlaufzeiten. Meta-Circular-Laufzeiten, die eine hohe Leistung erzielen, werden durch JIT-Kompilierung in systemeigenen Code und Ausführen des systemeigenen Codes ausgeführt. Es gibt keinen Grund, warum Ihre hochperfekte Python-Laufzeit in Python oder Lisp in Lisp usw. geschrieben werden muss. Aber wenn Sie der Meinung sind, dass Ihre Sprache mächtiger, ausdrucksvoller usw. ist, warum sollten Sie sie nicht zum Schreiben verwenden eine eigene Laufzeit? Oder wenn Sie nicht denken, dass Ihre Sprache irgendwie "besser" ist als andere, warum machen Sie sich dann die Mühe, sie überhaupt umzusetzen?

Alex D
quelle