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?
Antworten:
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?
quelle