歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【PyCon】『メタプログラミングPython』を復習して言語の理解を深めよう

PythonのカンファレンスであるPyConJP2016に一般参加してきました。

様々な発表や催しがあったのですが、特に素晴らしかったのが@tell_kさんの『メタプログラミングPython』という発表です。その名の通りオライリーの「メタプログラミングRuby」の内容に沿って、Pythonについて同様の内容を解説するという内容です。

togetter.com

まず、Pythonのオブジェクトのクラスの継承関係や、+演算子__add__メソッドの糖衣構文で、自作のクラスでも自由に演算子を設定できる(また、右から左に足し算する__radd__というメソッドがあることは初めて知りました)など、なんとなく知っていたことが素晴らしく整理されていました 。

Pythonのコードの文字列を、astモジュールで抽象構文木に変換し、printpprintに変換して実行するというLispのマクロみたいなことを始めたときは脳汁が出そうになりました。こんなことPythonでもできたんですね。

ただし、密度の濃い発表で後半は全く付いていけなかったし、「既に以前のPyConで素晴らしい発表があったので〜」と詳しい解説の無かった箇所もあったので、 今週〜来週あたりで、発表資料や映像をもう一度見返したいです。

メタプログラミングというと、「黒魔術だ」「必要性がなければ使わないほうがいい」と思って敬遠しがちですが、私自身『メタプログラミングRuby』を読んだ後に、Rubyの(継承関係を理解したことで)Mix-inや(Procを理解したことで)ブロックなど、(基本的な機能ばかりなのですが)納得して使えるようになりました。

端的に言うと、「バルス」を知ることで「リーテ・ラトバリタ・ウルス・アリアロス・バル・ネトリール」を使いこなせるようになった感じです。

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

同様の経験がPythonでもできることに感謝しています。