Ich habe CPython eine Funktion hinzugefügt (Build & Structure Grasp)

1. Zuallererst

In diesem Abschnitt werden der CPython-Build und die CPython-Dateistruktur beschrieben, die zum Hinzufügen von Funktionen zu CPython erforderlich sind. Dieser Artikel verwendet Python 3.10.

Ich habe CPython (ternärer Operator) eine Funktion hinzugefügt Fügen Sie Python zwei Arten von switch-Anweisungen hinzu Präfixinkrement

2. Was ist CPython?

CPython ist Python, das in C-Sprache geschrieben ist, und wenn es allgemein als Python bezeichnet wird, bezieht es sich häufig auf dieses Python. Der Code wird auf GitHub verwaltet und Sie können auch eine PR veröffentlichen.

3. Erstellen Sie CPython

Der offizielle Artikel ist sehr hilfreich beim Erstellen von CPython. Klonen Sie zunächst den Code aus dem CPython 3.10-Repository.


$ git clone https://github.com/python/cpython

Ändern Sie dann das Verzeichnis und führen Sie das Konfigurationsskript aus. Hier enthält -g "Debug-Symbole" in der ausführbaren Datei, und -O0 ist die niedrigste Optimierungsstufe. Außerdem wird der zu installierende Ordner durch Hinzufügen von --prefix angegeben.


$ cd cpython
$ CFLAGS="-O0 -g" ./configure  --with-pydebug   --prefix=(Installationsverzeichnis)

Als nächstes kompilieren und installieren.

$ make -s -j2
$ make install

Jetzt können Sie CPython sicher installieren. So führen Sie das installierte Python aus:

$cd (installiertes Verzeichnis)/bin
$ ./python3

4. Hinzufügen von Funktionen zu CPython

Die Checkliste zum Hinzufügen von Funktionen zu CPython ist offiziell zusammengefasst. Im Folgenden werden wir diesbezüglich erläutern.

4.1 CPython-Dateistruktur

Dies sind die vier wichtigsten Dateien, die Sie ändern, wenn Sie CPython Funktionen hinzufügen. Ich werde sie der Reihe nach anschauen. スクリーンショット 2020-10-20 18.40.25.png

4.1.1 python.gram Lassen Sie uns zunächst über python.gram sprechen. スクリーンショット 2020-10-25 12.00.23.png Es ist eine Datei in Grammer / python.gram von CPython. python.gram definiert die Grammatik von Python. Schreiben Sie die Syntax, die dieser Datei hinzugefügt werden soll.


$ make regen-pegen

Es wird automatisch ein Parser generiert.

4.1.2 python.asdl Als nächstes werde ich über python.asdl erklären. スクリーンショット 2020-10-25 12.00.27.png Eine Datei zum Erstellen eines abstrakten Syntaxbaums (AST). Wenn Sie in python.gram eine neue Funktion definiert haben, müssen Sie auch die Funktionsdefinition in diese Datei schreiben.


$ make regen-ast

AST wird automatisch generiert.

4.1.3 compile.c Als nächstes werde ich über compile.c erklären. スクリーンショット 2020-10-25 12.00.29.png Eine Datei, die AST in Bytecode konvertiert. Beschreiben Sie die Verarbeitung für jede Syntax im Bytecode. Beschreiben Sie hier beim Hinzufügen einer Grammatik die Verarbeitung dieser Grammatik im Bytecode.

4.1.4 ceval.c Als nächstes werde ich über ceval.c erklären. スクリーンショット 2020-10-25 12.00.32.png Führen Sie den Bytecode aus. Wenn der vorhandene Bytecode nicht implementiert werden kann, fügen Sie hier einen neuen Bytecode hinzu.

5. Zusammenfassung

Bisher haben wir erklärt, wie die Struktur von CPython aufgebaut und verstanden wird. Die Menge an Code in CPython ist riesig, aber ich hatte das Gefühl, dass die Menge an Code, die Aufmerksamkeit benötigt, gering war, da das Verfahren zum Ändern der Syntax in der offiziellen Checkliste organisiert war.

Referenzmaterial

Recommended Posts

Ich habe CPython eine Funktion hinzugefügt (Build & Structure Grasp)
Ich habe CPython (ternärer Operator) eine Funktion hinzugefügt.
Ich möchte eine Python-Umgebung erstellen
Ich habe versucht, eine Super-Resolution-Methode / ESPCN zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
So rufen Sie eine Funktion auf
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Leistungsfunktion zu Sublime Text hinzugefügt
Ich habe gerade ein Skript geschrieben, um Android auf einem anderen Computer zu erstellen
So erstellen Sie eine rekursive Funktion
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Es wurde eine Funktion hinzugefügt, um gewünschte Verschiebungen in der Django-Verschiebungstabelle zu registrieren
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
So erstellen Sie eine Sphinx-Übersetzungsumgebung
Ich möchte in der Einschlussnotation drucken
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich ließ Schildkröte eine Dreiecksfunktion zeichnen
Ein einfaches IDAPython-Skript zum Benennen einer Funktion
Ich habe versucht, der CPython-Implementierung ein Post-Inkrement hinzuzufügen
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe eine Web-API erstellt
Ich habe versucht, ein Wörterbuch ohne Berücksichtigung der Groß- und Kleinschreibung zu erstellen
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte einen DataFrame in MSSQL einfügen
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Ich möchte ein Spiel mit Python machen
Ich möchte keinen Codierungstest machen
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Ich las "Wie man ein Hacking Lab macht"
Ich habe ein Skript geschrieben, um ein WordPress-Plug-In hochzuladen
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich habe versucht, der CPython Extra Edition ein Post-Inkrement hinzuzufügen
Ich möchte leicht einen leckeren Laden finden
[Go] So schreiben oder rufen Sie eine Funktion auf
Ich möchte mit Python in eine Datei schreiben
[PyTorch] Beispiel ⑧ ~ So erstellen Sie ein komplexes Modell ~
Wie man eine öffentliche Funktion in Pytest verspottet
Ich möchte die Aktivierungsfunktion Mish verwenden
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich möchte eine Django-App auf Heroku hochladen
Ich kann nicht schlafen, bis ich einen Server erstellt habe !! (Einführung in den Python-Server an einem Tag)