Can A Python Go Beyond The Python
Upcoming SlideShare
Loading in...5
×
 

Can A Python Go Beyond The Python

on

  • 2,244 views

 

Statistics

Views

Total Views
2,244
Views on SlideShare
2,241
Embed Views
3

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 3

http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Can A Python Go Beyond The Python Can A Python Go Beyond The Python Presentation Transcript

    • ヘビはヘビを超えることはできるか ?
    • PyPyとは?
      • Python で実装された Python 処理系
      • 解釈できる言語は RPython
      • オリジナルの Python にはない様々な機能
      • 処理系全てがPythonで作られている。
        • パーサ、抽象構文木(AST)、インタプリタ、環境フレームなども
      • Pure Pythonなモジュールも動作実績がある
        • Django, Pylons, BitTorrent, Twisted, SymPy, Pyglet, Nevow, Pinax
    • こんな感じ # トレースオプション >>>> __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 >>>>
    • PyPyとは?
      • Python で実装された Python 処理系
      • 解釈できる言語は RPython
      • オリジナルの Python にはない様々な機能
      • Python言語のサブセット
        • Restricted Python
      • 一番大きな違いはyieldが使えないこと
        • ジェネレータが使えない
      • http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html
    • PyPyとは?
      • Python で実装された Python 処理系
      • 解釈できる言語は RPython
      • オリジナルの Python にはない様々な機能
      • Prologインタプリタ
      • 多様なGC
      • 多種なバックエンド
        • C, CLI, JVM向けのバイナリを出力できる
      • Stackless
      • JIT
    • JIT
    • ヘビはヘビを超えることはできるか ? ( 速度的な意味で )
    • JIT?
      • JIT とは ?
      • PyPy に積まれてる JIT
      • Just In Timeコンパイラ
      • Sun JVMのHotSpotで使われている
        • コードのよく実行される箇所を高速化する
      • 最近だとTraceMonkeyやV8にも使われて話題に
    • 余談(V8のJITについて) http://www.slideshare.net/dynamis/trace-monkey?type=presentation
    • JIT?
      • JIT とは ?
      • PyPy に積まれてる JIT
      • Tracing JIT
        • Trace Monkeyと同じ手法
        • バイトコードレベルでよく実行される箇所を検出して、それを最適化する
        • psycoの人が関わってる
        • 関数を超えた最適化も可能
          • だけど今のPyPyでの実装は、、、
    • こんな感じ 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
    • こんな感じ 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
    • で、速いの ?
    • こんな感じらしい
    • 結論 Psyco 最強