「Pythonチュートリアル」 の翻訳者,鴨澤さんからmixiに お返事 いただいたのを読んで,ホントにそうだよなあ,と思った。なににか,っていうと,Python 3.0って機能がすっきりまとめられていて,説明が少なくて済むんだよなあ。
Pythonは確かに, Rubyに比べる と 変化を嫌う言語 何だけど,実は細かく変わっている。たとえば型の実装について,バージョンを横断して見てみると,面白いことが分かる。
例えば「int」の実装についてみてみようか。
Python1.5では,intは関数として実装されている。実装としては関数で,返り値としてintオブジェクトを返していたのね。
>>> int <built-in function int>
でもこれは,実装としては違和感があるね。Python 2.2から新スタイルクラスが導入されて,intはtypeという呼び出し可能オブジェクトになった。
>>> int <type 'int'>
関数に比べればまだ理解できるけど,2.2からはint自体が継承可能でクラスと同じような扱いになっている。なのにtypeという特別な型を導入しているのはちょっとヘンだ。
ついにPyton 3.0になって,intはこうなった。
>>> int <class 'int'>
旧スタイルクラスが廃止され,クラス実装が統一されたこともあって,やっとintをclassと呼べるようになった。実装としてはすっきりしているし,「実はクラスには新スタイルと旧スタイルがありまして。。。」みたいな余計な説明が必要ない。
Pythonは変化しないわけではないんだよ。こうやって後方互換性を守りつつ,空気を読みながら進化してゆくのが,Python流の変化なんだ。