このサイトについて

Pythonは後方互換性を大事にするけど変わらないわけではない

Pythonは後方互換性を大事にするけど変わらないわけではない

「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流の変化なんだ。

2010-08-27 04:53