Core Concepts
C-Erweiterungen können durch Typinformationen optimiert werden, um die Leistung von dynamischen Sprachen zu verbessern.
Abstract
Abstract:
C-basierte Interpreter wie CPython nutzen C-"Erweiterungs"-Code, der für statische Analysetools und schnellere Laufzeiten mit JIT-Compilern undurchsichtig ist.
Häufige Aufrufe von C-Erweiterungscode führen zu unnötigen Overheads.
Die Einführung von "typed methods" ermöglicht es JIT-Compilern, den Overhead von C-Erweiterungsfunktionen zu reduzieren.
Einführung:
Dynamische Sprachen wie Python und Ruby nutzen C-Erweiterungsmodule für Leistungsverbesserungen.
C-Erweiterungen können nicht einfach von statischen Analysetools analysiert werden.
Die CPython C-API wird verwendet, um Typinformationen von C-Erweiterungsfunktionen zurück an Python zu übergeben.
Hintergrund:
CPython ist die Referenzimplementierung von Python und verwendet Bytecode-Quickening zur Beschleunigung der Bytecode-Ausführung.
PyPy ist eine alternative Python-Implementierung, die einen JIT-Compiler verwendet, um die Ausführungsgeschwindigkeit zu erhöhen.
Hinzufügen von Typinformationen zu C-Erweiterungen:
Ziel ist es, Typinformationen von C-Funktionen an Python zurückzugeben.
Die stabile ABI von CPython erfordert, dass Typinformationen rückwärtskompatibel sind.
Verwendung von Typinformationen in PyPy:
Typinformationen ermöglichen eine schnellere Implementierung von C-Erweiterungsfunktionen in PyPy.
Die Typüberprüfung von primitiven Argumenten kann auf der PyPy-Seite erfolgen, was die Leistung verbessert.
Evaluation:
Die Optimierungen verbessern die Leistung von PyPy sowohl mit als auch ohne JIT-Compiler.
Mikrobenchmarks zeigen signifikante Leistungsverbesserungen bei der Verwendung von Typinformationen in C-Erweiterungen.
Schlussfolgerung:
Typinformationen in C-Erweiterungen können die Leistung von dynamischen Sprachen verbessern.
Die Techniken sind nicht auf PyPy beschränkt und können auch von anderen dynamischen Sprachen übernommen werden.
Stats
C-basierte Interpreter wie CPython nutzen C-"Erweiterungs"-Code.
Typinformationen können die Leistung von C-Erweiterungen verbessern.
PyPy verwendet einen JIT-Compiler zur Beschleunigung der Python-Ausführung.
Quotes
"Wir haben gezeigt, dass die Hinzufügung von Typinformationen zu C-Erweiterungen die Leistung unter dem PyPy-JIT verbessern kann."
"Typinformationen in C-Erweiterungen können die Leistung von dynamischen Sprachen effektiv steigern."