PEP 3139 – Aufräumen von sys und dem "interpreter"-Modul
- Autor:
- Benjamin Peterson <benjamin at python.org>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 04-Apr-2008
- Python-Version:
- 3.0
Ablehnungsbescheid
Guidos -0,5 beendete diesen PEP. Siehe https://mail.python.org/pipermail/python-3000/2008-April/012977.html.
Zusammenfassung
Dieser PEP schlägt ein neues Low-Level-Modul für CPython-spezifische Interpreter-Funktionen vor, um das sys-Modul aufzuräumen und allgemeine Python-Funktionalität von Implementierungsdetails zu trennen.
Begründung
Das sys-Modul enthält derzeit Funktionen und Daten, die in zwei Hauptgruppen eingeteilt werden können
- Daten und Funktionen, die in allen Python-Implementierungen verfügbar sind und sich mit der allgemeinen Ausführung einer Python-virtuellen Maschine befassen.
- argv
- byteorder
- path, path_hooks, meta_path, path_importer_cache und modules
- copyright, hexversion, version und version_info
- displayhook, __displayhook__
- excepthook, __excepthook__, exc_info und exc_clear
- exec_prefix und prefix
- executable
- exit
- flags, py3kwarning, dont_write_bytecode und warn_options
- getfilesystemencoding
- get/setprofile
- get/settrace, call_tracing
- getwindowsversion
- maxint und maxunicode
- platform
- ps1 und ps2
- stdin, stderr, stdout, __stdin__, __stderr__, __stdout__
- tracebacklimit
- Daten und Funktionen, die den CPython-Interpreter beeinflussen.
- get/setrecursionlimit
- get/setcheckinterval
- _getframe und _current_frame
- getrefcount
- get/setdlopenflags
- settscdumps
- api_version
- winver
- dllhandle
- float_info
- _compact_freelists
- _clear_type_cache
- subversion
- builtin_module_names
- callstats
- intern
Die zweite Sammlung von Elementen ist im Laufe der Jahre stetig gewachsen und hat das sys-Modul unübersichtlich gemacht. Guido hat sogar gesagt, dass er einige Dinge darin nicht erkennt [1]!
Das Auslagern dieser Elemente in ein anderes Modul würde anderen Python-Implementierungen eine klare Botschaft darüber senden, welche Funktionen implementiert werden müssen und welche nicht.
Es wurde auch vorgeschlagen, den Inhalt des types-Moduls auf die Standardbibliothek zu verteilen [2]; das interpreter-Modul würde einen hervorragenden Aufenthaltsort für interne Typen wie Frames und Code-Objekte bieten.
Spezifikation
Ein neues integriertes Modul namens "interpreter" (siehe Namensgebung) wird hinzugefügt.
Die zweite Liste der obigen Elemente wird wie folgt auf die Standardbibliothek aufgeteilt
- Das interpreter-Modul
- get/setrecursionlimit
- get/setcheckinterval
- _getframe und _current_frame
- get/setdlopenflags
- settscdumps
- api_version
- winver
- dllhandle
- float_info
- _clear_type_cache
- subversion
- builtin_module_names
- callstats
- intern
- Das gc-Modul
- getrefcount
- _compact_freelists
Migrationsplan
Nach der Implementierung in 3.x wird das interpreter-Modul nach 2.6 zurückportiert. Py3k-Warnungen werden zu den ersetzten sys-Funktionen hinzugefügt.
Offene Fragen
Was soll verschoben werden?
dont_write_bytecode
Einige glauben, dass das Schreiben von Bytecode ein Implementierungsdetail ist und verschoben werden sollte [3]. Das Gegenargument ist, dass alle aktuellen, vollständigen Python-Implementierungen eine Art Bytecode schreiben, so dass es wertvoll ist, ihn deaktivieren zu können. Außerdem, wenn es verschoben wird, möchten einige es in das imp-Modul legen.
Verschieben zu einem imp?
Es wurde angemerkt, dass dont_write_bytecode oder vielleicht builtin_module_names gut in das imp-Modul passen könnten.
Benennung
Der Autor schlägt den Namen "interpreter" für das neue Modul vor. "pyvm" wurde ebenfalls vorgeschlagen [4]. Der Name "cpython" gefiel gut [5].
Referenzen
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-3139.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT