もっと知りたいPython3000

第1回 Python 3.0の思想と意義

この記事を読むのに必要な時間:およそ 2 分

2007年の8月に,オブジェクト指向スクリプト言語Pythonの次期バージョンである「Python 3.0」のα1がリリースされました。12月には引き続いてα2がリリースされています。Python 3.0は,2008年8月に予定されている正式版リリースに向け,順調に開発が進んでいます。

この特集では,「Python 3000」という愛称で呼ばれるPythonのバージョン3.0について,現時点でわかっていることをお伝えします。機能追加や仕様変更の詳細についてだけでなく,実働するコードや2.xからの移行方法についても,必要に応じて掲載していく予定です。

実際にPython 3.0の話に移る前に,ちょっとだけ時間を過去に戻してみましょう。

Python 3000にまつわる昔話

「Python 3000」という言葉が初めて世の中で使われたのは,私が知る限り今から8年前のことです。著名なPythonハッカーであるJim Fulton(現Zope corp. CTO)が投稿した,Pythonの名前空間に関する質問にメールに答える形で,Guidoが「Python 3000」という名前について言及しています。

当時,Pythonの最新バージョンは1.5.2で,次期バージョンの1.6を開発している最中でした。「時期が不確定な未来」という意味を込めて,当時の次期バージョンであったPython 2をそう呼んだのでしょう。2000年といえば新しい千年期の始まりの年です。「次期バージョンが出るまではもう1000年かかる」という,シニカルなジョークだったのかも知れません。

ところで,Python 2.0は同年リリースされたPython 1.6と同じ年,2000年の末にリリースされました。2.0は,1.6の機能をほぼそのまま継承する形でリリースされています。

同時期,Pythonの開発はGuidoを筆頭とする専門の開発チームに移り,リリース元も変わっています。2000年という年は,Pythonがプログラミング言語として独り立ちを果たした時期だったのです。このナンバリングには政治的,マーケティングな意味があったように推測しています。そういう意味では,Python 2.0は2000年当時Giodoが思い描いていた「Python 3000」にはほど遠い存在だったはずです。

Zen of Python

2001年,スラッシュドットのインタビュー邦訳にて,Guidoは再びPython 3000について言及しています。質問に答える中で,Pythonの精神に触れたZen(禅) of Python邦訳)」の一節を引用しています。

「誰にとっても明確な手法が,一つだけあることが好ましい(There should be one-- and preferably only one -- obvious way to do it.)」

言語仕様の一貫性について言及したこの文章は,Pythonの言語としての哲学をよりよく表した一文として,たびたび引用されています。Pythonの現在の仕様だけでなく,Pythonが目指すべき姿をよく体現した言葉だと言えます。

Pythonの将来像について答える前に,インタビューの原文では,以下のような含蓄のある言葉を挟んでいます。

「良いソフトウェアは生まれた時から進化する能力を備えている。そして,複雑さをコントロールしながら進化していくものだ(Good software has the ability to evolve built in from the start, and evolves in a way that keeps the complexity manageable.)」

続いて,Pythonの目指す次のステップについて「(言語としての)複雑さを減らすことが目的」と語っています。Guidoは当時から,Pythonを言語としてより長く発展させるために,シンプルさや一貫性を保つことが必須条件だと考えていたわけです。

後方互換性を崩す仕様変更

2001年のインタビューで直後にGuidoが触れている通り,Pythonには複雑さを助長し一貫性を崩す仕様が存在しています。そのような仕様のいくつかは,Pythonが設計された初期段階の間違いから来ていると,Guido自身が認めています。2002年のOSCONでは,Python Regrets(Pythonへの後悔:プレゼン資料)」と題した講演を行っています。この講演の中で,Guidoは言語の設計者自らPythonの設計上の間違いを示すという形で,Pythonの本来あるべき姿を逆説的に示して見せています。

Pythonの「複雑さを減らす」変更のうちいくつかは,Python 2世代に行われました。2.2で導入された「新スタイルクラス」はその代表例と言っていいかもしれません。ただし,そのような変更にも「後方互換性を守る」という足かせがありました。

Pythonはいまだに2種類の整数型を持っています。辞書型のキーを検査するには「has_key()」メソッドを使う方法と演算子「in」を使う方法の2種類が存在するのです。生成するリストの大きさによって使い分ける必要がある組み込み関数ragne()とxrange(),BaseHTTPServerやHTMLParserのように,PEP 8邦訳の推奨する命名規則に従わないモジュール。さまざまな意味合いで一貫性を崩す仕様のほとんどは,後方互換性を残すために変更できず,残されたままでいます。

著者プロフィール

柴田淳(しばたあつし)

Webcore株式会社代表取締役。Python,Ploneを使ったCMS/システム構築やコンサルティングが主な業務となっています。「みんなのPython」「TurboGears×Python」などの著書があります。日本Pythonユーザ会のほか,日本PostgreSQLユーザ会でも活動。

URLhttp://coreblog.org/ats/

著書

コメント

コメントの記入