このサイトについて

より良いPythonとして歩みを始めたPython 3.3

より良いPythonとして歩みを始めたPython 3.3

 

Python 3を「使わない」理由というのが実はいくつかある。

たとえば対応しているフレームワークとかモジュールが少ないとか,そもそも2との互換性が崩れてるとか。対応モジュールやフレームワークはかなり増えてきたし,Python 3の情報もそこそこ出そろってきた。3.0がリリースされて4年弱経ち,この2点は大きく改善され,今ではあまり気にする必要はなくなっていると思う。

3を使わない理由が実はもう一つ「あった」。そしてこれは,個人的に最も気になっていたことなんだけど,Python 3は,2に比べてメモリ消費量が多くなっている。一番大きな原因は,str型(文字列型)がユニコードベースになったこと。Python 2のstr型はバイト列で,ASCIIなら内部に1文字持つのに1バイトしか消費しなかったけど,Python 3になってstr型がユニコードベースに置き換わったことで,ASCII文字ひとつでも内部では多バイト消費するようになった。文字列は,str型のオブジェクトとしてだけではなく,辞書のキー(Pythonが内部で使っているのを含めた)など,様々な場所で使われている。3では,それらすべての文字列の内部表現がより多くメモリを消費するようになってしまい,同時に文字列処理の速度が遅くなってしまっていた。言語仕様はすっきりしたけど,その副作用で言語としての機能が後退してしまっているようにも見える。

これを改善するために,PEP 393で提案されたFlexible String Representation(柔軟な文字列表現)という改善が施され,先頃リリースされたPython 3.3に実装された。メモリの使用率で比べると,3.2と比べて三分の一から二分の一に大幅に改善,2.7と比べても若干改善している。エンコード変換の速度も速くなり,速度面でも3系は2系より良いパフォーマンスを見せるようになった。

Pythonの言語仕様はあんま変わんないんだけど,言語仕様を変えないまま,ボディブローのように効く機能改善が行われることがよくある。これがPython流の進化の方向性なんだと言える。ほぼ全ての面で2系より「より良いPython」になったという点で,3.3は記念すべきバージョンと言えると思う。

そしてもう一つ忘れてならないのは,新しい進化はもう,2系にはもたらされない,ということ。これからは3系と2系の機能差が開いてゆき,ついには深刻なセキュリティホールのメンテも止まって,2は緩やかに消えてゆく,という道程が,より現実的に見えてきたと言える。

3.3は,venvとかunittest.mockみたいに魅力的なモジュールも追加されているし,かなりいい。今が移行の良いタイミングかもね。

 

2012-10-04 00:48