2012-01-23 7 views
8

C'è un modo semplice per creare un bytecode Python da un elenco di tuple da 2 con opcode e i loro argomenti?Creare il bytecode Python dall'elenco di opcode e argomenti?

Per esempio:

>>> bytecode_compile([ 
     ('LOAD_CONST', 2), 
     ('STORE_FAST', 'a'), 
     ('LOAD_FAST', 'a'), 
     ('RETURN_VALUE',)]) 
'd\x01\x00}\x00\x00|\x00\x00S' 
+1

Cosa c'è di sbagliato con la scrittura del codice Python e l'uso del compilatore Python per fare questo? –

+2

http://code.google.com/p/byteplay/ – reclosedev

+0

@ S.Lott Fair abbastanza. Non sono sicuro del motivo per cui sto cercando di rendere le cose così difficili. – exupero

risposta

2

Non credo che un pitone "assemblea bytecode" esiste assembler, ma potrebbe non essere così difficile costruire uno voi stessi. Nel codice sorgente Python in Python-X.Y.Z/Include/opcode.h, tutti i bytecode per gli opcode sono elencati con gli argomenti che accettano.

+0

Puoi anche ottenere una lista simile con' dis' module, f.e. 'len (dis.opmap)' restituisce 101 contro 103 opcode in 'opcode.h' di Python 3.4.3. – ilyaigpetrov

1

Ho scritto a lungo su questo here quindi non lo ripeterò ma fornirò alcuni commenti sommari.

È decisamente fattibile, ma mi chiedo quanto sarà generalmente utile. Il collegamento va a come eseguire e scrivere tali cose.

Il bytecode è soggetto a modifiche sia in termini di codice operativo, sia di nomi opcode o semantica degli opcode tra versioni. In effetti, in Python 3.6 e oltre un bytecode diventa un wordcode.

Se tuttavia si decide di percorrere questo percorso, xdis ha aggiunto di recente una funzione list2bytecode() per fare proprio questo.

Problemi correlati