2.5 から 2.6 は STORE_MAP が追加されただけだが、
2.6 から 2.7 へは BUILD_MAP,LOAD_ATTR,COMPARE_OP,IMPORT_NAME,IMPORT_FROM はコード値の入れ替わり。
LIST_APPEND は引数付きに変更。
JUMP_IF_FALSE,JUMP_IF_TRUE は削除、同じコード値の JUMP_IF_FALSE_OR_POP,JUMP_IF_TRUE_OR_POP と互換性があるのかは不明。
そもそも命令名が同じでも全く同じ動作をするのかはまだ分かってないです。
全てのバージョンは dis.HAVE_ARGUMENT=90 です。
pymite は pmImgCreator.py だけを動かして読んでみただけ vm では動かしてないのだが、
2.7 ではイメージは出来るが、既存の vm との互換性がなくて動かないだろう。 2.5 なら動くかもしれない。
,pyMite(p14p),python2.5,python2.6,python2.7 18,LIST_APPEND,LIST_APPEND,LIST_APPEND,None 54,STORE_MAP,None,STORE_MAP,STORE_MAP 94,None,None,None,LIST_APPEND 104,BUILD_MAP,BUILD_MAP,BUILD_MAP,BUILD_SET 105,LOAD_ATTR,LOAD_ATTR,LOAD_ATTR,BUILD_MAP 106,COMPARE_OP,COMPARE_OP,COMPARE_OP,LOAD_ATTR 107,IMPORT_NAME,IMPORT_NAME,IMPORT_NAME,COMPARE_OP 108,IMPORT_FROM,IMPORT_FROM,IMPORT_FROM,IMPORT_NAME 109,None,None,None,IMPORT_FROM 111,JUMP_IF_FALSE,JUMP_IF_FALSE,JUMP_IF_FALSE,JUMP_IF_FALSE_OR_POP 112,JUMP_IF_TRUE,JUMP_IF_TRUE,JUMP_IF_TRUE,JUMP_IF_TRUE_OR_POP 114,None,None,None,POP_JUMP_IF_FALSE 115,None,None,None,POP_JUMP_IF_TRUE
以下、比較に使ったプログラムです。
rem opcmp.bat c:\python27\python opdump.py > py27.py c:\python26\python opdump.py > py26.py c:\python25\python opdump.py > py25.py c:\python26\python opcmp.py > opcmp.csv
# opdump.py import dis opname = dis.opname for i in range(256): if opname[i][0] == "<": opname[i] = None print "opname=" + str(opname)
# opcmp.py import py27 import py26 import py25 import pmImgCreator import dis pic = pmImgCreator.PmImgCreator("pmfeatures.py") print ",pyMite(p14p),python2.5,python2.6,python2.7" for i in range(256): if len(set([pic.bcodes[i], py25.opname[i], py26.opname[i], py27.opname[i]])) > 1: print"%d,%s,%s,%s,%s" % (i, pic.bcodes[i], py25.opname[i], py26.opname[i], py27.opname[i])
(2013/2/26)
---
0 件のコメント:
コメントを投稿