Can A Python Go Beyond The Python

  • 1,527 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,527
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ヘビはヘビを超えることはできるか ?
  • 2. PyPyとは?
    • Python で実装された Python 処理系
    • 解釈できる言語は RPython
    • オリジナルの Python にはない様々な機能
    • 処理系全てがPythonで作られている。
      • パーサ、抽象構文木(AST)、インタプリタ、環境フレームなども
    • Pure Pythonなモジュールも動作実績がある
      • Django, Pylons, BitTorrent, Twisted, SymPy, Pyglet, Nevow, Pinax
  • 3. こんな感じ # トレースオプション >>>> __pytrace__ = 1 Tracing enabled >>>> a = 1 + 2 |- <<<< enter <inline> a = 1 + 2 @ 1 >>>> |- 0 LOAD_CONST 1 (W_IntObject(3)) |- 3 STORE_NAME 0 (a) |- hash(W_StringObject('a')) -> W_IntObject(-468864544) |- int_w(W_IntObject(-468864544)) -> -468864544 |- 6 LOAD_CONST 0 (<W_NoneObject()>) |- 9 RETURN_VALUE |- <<<< leave <inline> a = 1 + 2 @ 1 >>>>
  • 4. PyPyとは?
    • Python で実装された Python 処理系
    • 解釈できる言語は RPython
    • オリジナルの Python にはない様々な機能
    • Python言語のサブセット
      • Restricted Python
    • 一番大きな違いはyieldが使えないこと
      • ジェネレータが使えない
    • http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html
  • 5. PyPyとは?
    • Python で実装された Python 処理系
    • 解釈できる言語は RPython
    • オリジナルの Python にはない様々な機能
    • Prologインタプリタ
    • 多様なGC
    • 多種なバックエンド
      • C, CLI, JVM向けのバイナリを出力できる
    • Stackless
    • JIT
  • 6. JIT
  • 7. ヘビはヘビを超えることはできるか ? ( 速度的な意味で )
  • 8. JIT?
    • JIT とは ?
    • PyPy に積まれてる JIT
    • Just In Timeコンパイラ
    • Sun JVMのHotSpotで使われている
      • コードのよく実行される箇所を高速化する
    • 最近だとTraceMonkeyやV8にも使われて話題に
  • 9. 余談(V8のJITについて) http://www.slideshare.net/dynamis/trace-monkey?type=presentation
  • 10. JIT?
    • JIT とは ?
    • PyPy に積まれてる JIT
    • Tracing JIT
      • Trace Monkeyと同じ手法
      • バイトコードレベルでよく実行される箇所を検出して、それを最適化する
      • psycoの人が関わってる
      • 関数を超えた最適化も可能
        • だけど今のPyPyでの実装は、、、
  • 11. こんな感じ def f(a, b) : if b % 46 == 41: return a - b else: return a + b def strange_sum(n): result = 0 while n >= 0: result = f(result, n) n -= 1 return result
    • # corresponding trace:
    • loop_header(result0, n0)
    • i0 = int_mod(n0, Const(46))
    • i1 = int_eq(i0, Const(41))
    • guard_false(i1)
    • result1 = int_add(result0, n0)
    • n1 = int_sub(n0, Const(1))
    • i2 = int_ge(n1, Const(0))
    • guard_true(i2)
    • jump(result1, n1)
    <= ガード条件に失敗するとインタプリタに戻る <= http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit.pdf
  • 12. こんな感じ class __exten d__(PyFrame): def dispatch(self, pycode, next_instr, ec): next_instr = r_uint(next_instr) try: while True: pypyjitdriver.jit_merge_point( frame=self, ec=ec, next_instr=next_instr, pycode=pycode) co_code = pycode.co_code self.valuestackdepth = hint(self.valuestackdepth, promote=True) next_instr = self.handle_bytecode(co_code, next_instr, ec) except ExitFrame: return self.popvalue() def JUMP_ABSOLUTE(f, jumpto, next_instr, *ignored): ec = f.space.getexecutioncontext() pypyjitdriver.can_enter_jit(frame=f, ec=ec, next_instr=jumpto, pycode=f.getcode()) return jumpto
  • 13. で、速いの ?
  • 14. こんな感じらしい
  • 15. 結論 Psyco 最強