このBlogは移転しました。今後は aish.dev を御覧ください。

Python2とその時代

宣伝が続いて恐縮だが、オライリージャパンよりPythonの解説書を上梓した。昔から、Python内部の仕組みも解説したPython解説書を書きたいと思っていて、ようやく実現した感じだ。

しかし、本書の執筆は、昔、構想を立てていたときに思っていたほどは楽しくはなかった。Python2ではなく、Python3.3以降を対象に書いてしまったからだ。Python3の型システムは綺麗に整理されてしまったし、メタクラスも扱いやすくなった。メモリアロケータは改善され、ガベージコレクションの注意点も大幅に減った。Unicodeの暗黙の変換も無くなった。私が書こうと思っていた知識の多くは、Python3では無用の長物と化した。

本書をPython2向けに書いていたら、今よりずっと多くのページ数を費やしただろう。Python3は、Python2よりも落とし穴が少なく、学習も容易なプログラミング言語だ。

そんな優れたPython3だが、「普及してないじゃないか」という声が上がっているようだ。以下、その件に関する感想を書いておく。

Python3は普及してない?

まあ、Python2に比べてば、普及してない。当然だ。Pythonは20年以上の歴史を持ち、熱心に開発され、幅広く利用されてきた。Pythonは、プログラミング史上、もっとも大きな成功を収めたプログラミング言語の一つだ。2008年末にリリースされた、若造プログラミング言語のPython3に太刀打ちできるはずがない。

一度作成されたプログラムが、大した理由もなしに別の言語や環境に対応することはありえない。時間が経てば、自然とPython2->3に移行されるというものではない。

現在、Python3がリリースされてから、5年ちょっと。Pythonが最初にリリースされてから5年経った頃というと、Python1.4とか1.5とかの頃だろうか。あの頃のPythonコミュニティも、まだまだ小さかった。今のPython3ユーザより、当時の全Pythonユーザの方が少ないのではないだろうか。comp.lang.pythonに流れるメールを全部読んでも大した量ではなかったし、開発者の数もわずかだった。リリースから10年以上たった2003年、私はPyCon USに遊びにいったが、その頃でも、参加者の数はたしか400人程度だった。

プログラミング言語の普及というのは、時間がかかるものだ。2000年代後半にも、いろいろなプログラミング言語が登場してきた。その中で、Python3以上のユーザを獲得した言語はどれだけあるだろうか?

issubclass(Python3, Python)?

同じ「Python」の名を冠してはいるが、Python3は、やはりPython2ではない。異なるプログラミング言語だ。Pythonはこれまで大きな成功を収め、巨大なエコシステムを築いてきた。沢山のモジュールが開発され、ほとんどのLinuxにはデフォルトでインストールされている。利用者に見えないところで、いろんなPythonアプリケーションが動いている。Windowsのシステムディレクトリには、いつの間にかPythonxx.dllがインストールされている。

Python3はPython2と互換性がないので、このエコシステムをそのまま利用することはできない。ほとんどのPython2モジュールは、Python3でも使えるようにするには修正が必要で、Python2と3両方で使えるようにするのは大変な作業だ。Python2専用か、Python3専用のどちらか決めてしまったほうが、はるかに簡単になる。

そういう意味で、Python2コミュニティと、Python3コミュニティは「分断」される。これから開発される、Python3用のモジュールやアプリケーションは、Python2コミュニティでは利用できないだろう。また、Python2だけを利用するユーザは、Python2専用のモジュールを開発するだろう。後知恵だが、Python開発者たちはPython2/3共用アプリの開発コストを低く見積もりすぎていた。Python3は、Python2という巨大なライバルを相手に、自分の陣地を獲得しなければならない。これには、まだ時間が必要だろう。

Python2の落日

Python2は、未だに隆盛をきわめているが、その未来は明るくはない。御存知の通り、Python2の開発は終了しており、今後、Python2に機能追加などが行われることはない。結果として、Python開発チームは、とてもポピュラーなプログラミング言語を「殺し」、かわりにPython3という、新しいプログラミング言語を開発することを選んだ。

Python3なんかいらない、Unicodeなんか使わない、というユーザのいらだちは理解できる。Python2は十分現役で、そのまま使い続けるのに何の問題もないのに、お前のアプリ・モジュールは時代遅れになるから書き直せ、と言われてしまう。Pythonを単にツールに利用しているだけの人たちにとっては、迷惑なことだろう。

とはいえ、Python2は、非常に広く普及したので、本当に消えてなくなるまでには長い時間がかかるだろう。現在、bash などのシェルがこれだけ普及していても、移植性があるスクリプトを書くときには /bin/sh 用のスクリプトだけで書いたりするが、そんな感じで、/bin/python に Pyton2 がインストールされ続けるのかもしれない。そうなると、Python2の利用者が目に見えて減ることは無いのかもしれない。

Python3のエコシステム

今、Python2を使っているなら、焦る必要はない。いまあるPython2とライブラリで目的を果たせるなら、当面、Python2を使い続けるのは悪いことでもなんでもない。Python2の方が好きなら、全力でPython2をサポートするのもよいだろう。

しかし、分断されたPython2/3を統合するには、Python3のエコシステムを整備するしかない。Python3を強化し、Python2からの移行コストより、メリットが大きいことが明らかになるようにしなければならない。そのためには、ユーザがPython3を使い、改善に協力することが必要だ。

(ちなみに、個人的には、PEP 3003 Python Language Moratorium は間違いだったと思ってる。追いかけて欲しければ、全力で逃げるべきなのだ)

Python2か、Python3かで迷うなら、Python2を使うのも良いだろう。その昔は、Perlを使うか、Pythonを使うかで迷ったものだ。多少のリスクは覚悟した上で、Pythonを使っていた人たちがいて、その積み重ねがPythonの今日を作り上げた。同じ積み重ねが、Python3でもまた繰り返されると信じて、私は今日もPython3を起動している。