2009年5月1日金曜日

大規模(壮大)な名前の変更

原文:http://python-history.blogspot.com/2009/03/great-or-grand-renaming.html
原文投稿者:Guido van Rossum

Pythonが最初に作られた当初は、私はいつも、時々サードパーティのライブラリとリンクする程度で、基本的にはスタンドアローンのプログラムとしてしか動かすことはないだろうと考えていた。そのため、ソースコードの中ではC言語のリンカのレベルのグローバル名を自由に定義していた。例えば、'object', 'getlistitem', 'INCREF'などといったグローバルな名前が使用されていた。Pythonの人気が高まるにつれて、組み込みバージョンのPythonについての問い合わせが増えてきた。組み込みというのは他のアプリケーションにライブラリとしてリンクして使用することである。EmacsがLispインタプリタを統合しているのとはそれほどの違いはない。

しかし、Pythonのプログラムが持つグローバル名と、組み込みを行うアプリケーションが定義しているグローバル名の名前の衝突が発生するために組み込み作業は複雑であった。特に、'object'という名前は人気があったために衝突が多かった。この問題に対処するために、すべてのPythonのグローバル名の先頭に"Py"もしくは"_Py"(内部的にしか使用しないが、技術的な理由からグローバルにしているもの)、"PY"(マクロ向け)を付けるという命名規約を導入することにした。

すでにサードパーティ製のモジュールがたくさん作られていたため、移行作業は後方互換性に考慮して行われることになった。コアな開発者であるほど以前の名前を覚えているだろうということを考え、2つのフェーズが用意された。フェーズ1ではリンカからは古い名前に見えるが、ソースコードでは新しい名前が使用できるように、大量のC言語のプリプロセッサマクロを使用して新しい名前を古い名前に変換するようにした。フェーズ2では、リンカからは新しい名前が見えるようにしたが、移行作業が遅れていた拡張モジュールのことを考慮し、今度は古い名前から新しい名前に変換するという、また別のマクロのセットを用意した。この2つフェーズの中では、古い名前と新しい名前が混在することができたので、プログラムが動作しなくなるということはなかった。

Subversionのログから、これらの名前の変更の歴史を少し調べてみた。1995年の1月12日のr4583から作業が開始されていることが分かった。この時に大規模な名前の変更が行われることが通知され、新しい名前をもつヘッダファイルが導入された。しかし、1996年の12月の時点ではまだ.cのソースファイルの名前の変更作業は継続していた。"Grand Renaming(壮大な名前の変更)"という内容で調べると、名前を変更しているだとか、名前を変更したという、この時期のチェックインコメントを頻繁に見つけることができる。後方互換性のためのマクロが最終的に削除されたのは2000年の5月で、Python 1.6のリリース作業の中で行われた。r15313のチェックインコメントの中に、このイベントを祝うコメントが書かれている。

この壮大な作業の功績の多くは、Barry Warsaw氏とRoger Masse氏によるものである。彼らはスクリプトの助けも得ながら、ファイルの中の名前の変更という、地味な作業に参加して次々と進めてくれた。彼らは多くの標準ライブラリにユニットテストを追加するという、退屈な作業をコツコツと行うこともしてくれたのである。

Wikipediaでは、かつて行われた大規模な名前変更(Great Renaming)の出来事ついて紹介されている。見たところ、USENETのグループの再編成のことのようである。私はおそらく、無意識のうちに「PythonのGreat Renaming」というイベントの名前を付けたということを思い出した。これ以降に行われた大規模な名前の変更として見つけられるのは、Pythonのドキュメント生成にも使用していたSphinxである。Zopeもかつて大規模な名前の変更を行ったことがある。ここであげた例と比較すると小さな話ではあるが、最近ではPy3kの議論の中で、PyStringをPyBytesに変更しようという議論も行われている。

大規模、もしくは壮大な名前の変更は、開発者のコミュニティにとっては、高い確率でケガを伴うイベントである。プログラマの頭の配線をつなぎ直す必要があるし、ドキュメントも書き直さなければならない。また、名前の変更前のパッチを名前の変更後に統合するという複雑な作業が発生することもある。これは特に、名前の変更が行われていないブランチが残っている場合多く発生する問題である。

0 件のコメント:

コメントを投稿