追記: dict の実装で出てくる図が間違っています*1.あとで修正します.
スライドを差し替えました.変更点は次の2点です.
- dictの図を開番地(オープンアドレス)法のものに訂正
- バイトコードについて追記(2バイトで1つの命令と引数を表す旨)
先日 KMC で春合宿があり,そこで Python の処理系に関する講座をしました.
内容
プログラミング言語を実行体系で分類すると,次の2つに分けられるのではなかろうかと思います*2.
また,型付けで分類すると,次の2つに分けられます.
- 静的型付け言語
- 動的型付け言語
C言語のコンパイラの実装に関する情報は巷に溢れており,また書籍も数多くあります. 一方で Python のインタプリタに関する詳細な情報は,もちろんあるのですが,気にせずに使っている人が大半かと思われます*3.
そこで,Python の処理系がどう実装されており,どう動いているのか,をスライドにまとめ,春合宿の講座として行いました.
要点をまとめると,
になります. バイトコードにコンパイルして仮想機械で実行する,という体系は,最近のプログラミング言語の処理系に多いようです(Java, C#, Ruby など). しかしながら,インタプリタ言語は今でもコードを逐次実行しており,そのために遅いのではないか,と思っている方が少なくないと思います. そんな人にも資料を読んでもらい,実際の実行体型に肉薄してもらえればと思います*4.
反省とか
- 講座をした日に体調を崩していたので,はきはき喋れなかったと思う…….
- とりあえずC言語が分かればいいぐらいのつもりでスライドを作ったけど,numpy とか Cython が説明なしに登場していたし,もう少し説明を加えるべきだった.時間余ってたしなあ.
- 参考にしたページ,Scrapbox を見るとこれだけ記録されていた.
- http://postd.cc/python-internals-pyobject/
- https://tech.blog.aknin.name/2010/04/02/pythons-innards-introduction/
- https://www.slideshare.net/pfi/python-61443627
- http://svn.coderepos.org/share/docs/jbking/vmdoc/about_python_vm.html
- https://www.python.org/dev/peps/pep-0330/
- https://www.python.org/dev/peps/pep-0339/
- https://leanpub.com/insidethepythonvirtualmachine/read
- http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/PyVM.htm