前回に続き、現地参加したPyCon JP 2022のセッションのまとめになります。
今回は、Day1の「詳解 print("Hello, world")」です。
動画
スライド
- https://docs.google.com/presentation/d/19b0jIIj2-KmwXf49eWM2dgzZPeSuxABDyib_lpyTCxU/edit?usp=sharing
スピーカー
- Rei Suyamaさん
- 株式会社RevComm
- バックエンドエンジニア
内容まとめ
- シンプルな処理
print("Hello, world")
の裏側で何が起きているかの深掘り
Pythonとは2つの意味がある
- プログラミング言語としての言語仕様
- 文法や挙動の定義をまとめたもの
- その言語仕様に沿った処理系
- 実際のプログラム
-
PyPy
やJython
など
プログラミング言語とソースコード
- ソースコードは単なる文字列
- 文字列に意味を持たせるのが言語
- コンピュータに解釈してもらうのがプログラミング言語
抽象構文木(Abstract Syntax Tree, AST)
- プログラミング言語は、ソースコードの文字列を解析してコンピュータが解釈しやすい形式に変換する
- この変換工程がパース、これを行うのがパーサ
- このコンピュータが解釈しやすい形式が、抽象構文木
標準ライブラリtokenize
- Pythonソースコードをトークンに分割して出力するライブラリ
- トークンとは、意味を持つ最小単位の字句
標準ライブラリast
- Pythonソースコードの抽象構文木を出力するライブラリ
- 抽象構文木は、プログラムとして意味を持つ情報を木構造で表現したもの
標準ライブラリdis
- Pythonバイトコードの逆アセンブル結果を出力するライブラリ
- Pythonバイトコードは、Python VMが解釈するマシン語
Python VM
- Pythonバイトコードを逐次実行する仮想マシン
-
Python/ceval.c
に記述された巨大なループでバイトコードを実行する
CPythonのビルド
- CPythonは、C言語で書かれたPythonインタプリタ
- ビルド手順は、公式のPython Developer’s Guideに記載
感想
- こちらもDay1のkeynoteに続き、Pythonの処理系に関するセッションでした。
-
tokenize
・ast
・dis
といった標準ライブラリを使うと、抽象構文木やバイトコードの処理系を簡単に確認できるのは、初めて知りました。 - 今まで気にしたことはなかったけど、PHPやRubyの他の言語にもこういうライブラリはありそうですね。