[Python-de] Minimal Python, Nachsatz
holger krekel
pyth at devel.trillke.net
Sun Jan 5 20:37:41 EST 2003
Christian Tismer wrote:
> Christian Tismer wrote:
>
> Holger Krekel schrieb:
> ...
>
> >> Vielleicht liesse sich der schon in Python schreiben? Erst mal klingt
> >> das widerspruechlich. Wie sollte der Interpreter
> >> jemals einen bytecode interpretieren, wenn diese interpretation
> >> auch wieder aus der interpretation von bytecodes besteht.
> ...
>
> >> Andererseits ist es durchaus vorstellbar, einen Interpreter komplett
> >> in python zu schreiben. Es hindert uns nichts daran, die C-Frame
> >> Funktionalitaet in python zu implementieren, oder? Insofern duerfte
> >> das "nur" ein bootstrapping problem sein.
>
> Habe nochmal kurz nachgedacht -- eigentlich hast Du
> ja recht. Natürlich kann man einen kompletten
> Interpreter in Python schreiben und sich zunächst
> um nichts weiter kümmern. Das würde dann als
> Aufsatz von Standard-Python laufen.
und waere - obwohl sehr langsam - ein gutes Testbett
fuer den bytecode-level. analog zu
compile.c <-> pycodegen.py dann
ceval.c <-> pyeval.py
> Allerdings müßte man dann stückweise einen Übergang
> des in Python laufenden Interpreters zu etwas Neuem,
> Eigenständigen basteln. Es ist die Frage, ob das
> nicht ein Umweg ist?
gute frage.
ein pyeval.py waere sicher instruktiv. Und es waere ein
gut releasebarer Meilenstein :-)
Ich vermute zum beispiel, dass viele bytecodes rekursiv
sind, d.h. dass der bytecode einer bytecode-interpretation
sich letztlich selbst enthaelt. Das gilt nicht nur fuer
sowas wie CALL_FUNCTION (dessen python interpretation mit
sicherheit einen CALL_FUNCTION bytecode beinhaltet), sondern
wahrscheinlich schon fuer LOAD_FAST. eine naive
python-implementierung saehe vielleicht so aus:
...
elif op==LOAD_FAST:
stack.append(fastnames[oparg])
...
aber der bytecode fuer die codezeile "stack.append..."
wuerde selbst 'LOAD_FAST' benoetigen. Wenn wir
'self-contained' werden wollen, muesste der obige
sourcecode auf etwas abgebildet werden was sich letztlich
nicht selbst aufruft. Das duerfte ja in deine Stackless
Philosophie passen :-)
> Vielleicht macht es Sinn, wenn dieser Interpreter
> wirklich *alles* implementiert.
macht schon Sinn, ist nur etwas unabsehbar. IOW
eignet sich nicht als Meilenstein :-)
> Es müßten auch
> die erforderlichen Datenstrukturen emuliert werden,
> in einer Weise, die die Transition zu einer
> "realen" Implementierung überlebt. Insbesondere
> hieße das, eine Python-Beschreibung für C-Strukturen
> zu entwickeln.
> Macht es Sinn, dafür das Struct-Modul
> einzusetzen, oder macht man es "abstrakt" uber
> entsprechende Klassen?
da kenne ich mich zuwenig aus, aber wenn man mit
struct oder ctypes (!?) beliebige C-Strukturen
lesen und schreiben kann, sollte das helfen.
> Stattdessen könnte man gleichzeitig "von unten"
> anfangen und erforderliche minimale Basisstrukturen
> in C entwickeln.
>
> Wenn man z.B. eine Frame-Struktur passend in C
> anlegt und alle Felder für Python zugreifbar macht,
> könnte man das "von unten" an die Interpreter-Schicht
> weitergeben, welche dann, in Python, darauf operiert.
Mir erscheint vielversprechend, pyeval.py zu schreiben
und dass dann auf einem minimalisierten ceval.c zum
laufen zu bringen. Das neue ceval.c brauechte keine
nested scopes, keine iterator-bytecodes, keine
namespace-optimierungen etc., weil sich diese features
in pyeval.py mithilfe der restlichen bytecodes
simulieren lassen koennen muessten.
Mir gefaellt an diesem Vorgehen, dass man von python-code
losgeht und der C-Code schrittweise vereinfacht bzw.
pythonifiziert wird. Ohne Armin's Magie waeren wir
allerdings geschwindigkeits-technisch verloren.
gruss,
holger
More information about the Python-de
mailing list