私が歌川です

@utgwkk が書いている

KMC の春合宿で Python の処理系の講座をした

追記: dict の実装で出てくる図が間違っています*1.あとで修正します.

スライドを差し替えました.変更点は次の2点です.

  • dictの図を開番地(オープンアドレス)法のものに訂正
  • バイトコードについて追記(2バイトで1つの命令と引数を表す旨)

先日 KMC で春合宿があり,そこで Python の処理系に関する講座をしました.

speakerdeck.com

内容

プログラミング言語を実行体系で分類すると,次の2つに分けられるのではなかろうかと思います*2

また,型付けで分類すると,次の2つに分けられます.

  • 静的型付け言語
  • 動的型付け言語

C言語コンパイラの実装に関する情報は巷に溢れており,また書籍も数多くあります. 一方で Pythonインタプリタに関する詳細な情報は,もちろんあるのですが,気にせずに使っている人が大半かと思われます*3

そこで,Python の処理系がどう実装されており,どう動いているのか,をスライドにまとめ,春合宿の講座として行いました.

要点をまとめると,

になります. バイトコードコンパイルして仮想機械で実行する,という体系は,最近のプログラミング言語の処理系に多いようです(Java, C#, Ruby など). しかしながら,インタプリタ言語は今でもコードを逐次実行しており,そのために遅いのではないか,と思っている方が少なくないと思います. そんな人にも資料を読んでもらい,実際の実行体型に肉薄してもらえればと思います*4

反省とか

*1:Python の dict では開番地(オープンアドレス)法が使われています http://dsas.blog.klab.org/archives/python-dict-internal.html

*2:どちらにも標準で対応している言語もあります.

*3:それはC言語でも同じ???

*4:遅い原因は他にありそう.