こんにちは、いりすです。最近youtubeでバ美肉配信にハマってます
今回は最近読んでいるCPython Internalsについて紹介します。
CPython InternalsはReal Pythonというコミュニティから出た本で、CPython 3.9の実装を概念、コードリーディング、コードの改変を通して解説していく本となっております。
自分でまとめたnotionは以下となります
- cpythonをコンパイラするまで
- Language and Grammar: Pythonの文法を定義するBNFとTermが格納されたGrammarについて解説する章
- Configuration and Input: Python実行時の設定と入力(-cで渡すか、コンパイルするか、REPLか、など)をどのように受け取っているかを解説する章
hammerhead-calendula-6a6.notion.site - Lexing and Parsing: Pythonがコードを実行する前にどのように文法から解釈するための木構造(CST, AST)を作っているか、つまり、parsingについて解説する章
ついでですが、自分が読書配信した再生リストです:
本記事ではCPython Internalsを読んでみた感想を紹介します。
まず、CPython Internalsはcpython コンパイラを読んで理解するという意欲的な本ですが、解説が非常に丁寧でわかりやすいです。
最初の章では、cpythonをgitでcloneして、利用するOSごとにビルド方法を解説して、IDEごとに読むのに助かるextensionを紹介、そして、コンパイルするところまでを行います。
非常に導入が丁寧で好感が持てました。
また、並列処理の章では、そもそもPOSIXの並列処理(threadやprocess)ってどういう構造なの? OSでどういう処理がされているの? という基本的なところから解説を始めております。
基礎から、だんだんとPythonのmultiprocessingライブラリの説明やPool, Pipeの構造、GILの説明へと進んでいき、最終的にCoroutinesとasyncioの解説までを扱います。
解説だけでなく、実際にコードを動かし、理解をさせるバランスも上手いです。
まず、一番最初のLanguage and Grammarの章では、PythonのGrammarファイルを編集して、passと同等の処理をする命令を追加し、実際にGrammarからparserの再生成を行って、ファイルとPythonの動きがどのように同期するかを説明します。
Lexing and Parsingの章では、実際に入力したコードをCSTを木構造の形で出力するコードを書いたり、ASTをvisualizeするライブラリであるinstavizを用いてコードに対してどのようなCST, ASTが作られてCST, ASTとは何かを説明します。
章の順序も素晴らしいです。
Grammar -> Configure -> Parsing -> CompileとCPythonコンパイラの処理の順序から順に解説していくので、本当の本当の基礎からCPythonを理解できます。
ただし、Pythonのことを少し知っていないと読むのは厳しいかもしれません。python文法の解説は全くしないので。
おそらく、CPythonコンパイラを読む人だから、Pythonのことを知らない人はいないと思うのですが…
とにかく非常によく書かれている本です。
Pythonのことを実装レベルで深く知りたい人や、Pyhtonのコードリーディングを通してコンパイラやプログラミング言語を知りたいという人はかなりオススメの本となっております。
では。