Guidoのインタビュー on Linux Journal

[Python-ml-jp 4521]

昨日届いてたLinux JournalにGuido von Roosumのイン
タビューが載ってました。
つーか表紙がGuidoです。
http://www.linuxjournal.com/issue/174

インタビューの内容は、主としてPython3について。みなさま
よくご存知のことから、あまり知られてないと思われる具体的な
tipsまでよくまとまっていたので、軽く概要をば。

                  • -

Python 3000(Python 3)はこれまでとほとんど同じ
言語で、ちょっとクリーンアップしただけ。
・異論の出そうな変更もあるが、それらは実際には大きな改良だ。

  • printは関数にしたことで馴染のkeyword=value構文が使え

るようになり

    • 改行の抑制など振舞いを変えるのが楽になり
    • 新しいオプションが足しやすくなり
    • 組み込みのprint関数を自前の関数で置き換えやすくなった

・(相対的に言えば)革新的で、移行のキツさと安堵の両者の源と
なるものもある。たとえば、Unicodeに対してこれまでと根本
的に違った態度を取ることを受け入れた。

  • Python1では文字列とバイナリを同じように扱う8ビット文

字列型のみだった

  • Python2では8ビット文字列+Unicode文字列で、これは
    • Python1との後方互換性を確保したが
    • テキスト文字列の表現方法を2種類にしてしまうという曖

昧さを導入した

  • Python3では互換性を破壊して線引きを変えた。つまり
    • これまでの8bit文字列型とほとんど同じのbytes型

でバイナリデータ(およびUTF-8などでエンコード済みのテキ
スト)を扱い

    • str型はテキストのみを扱い、すべてのUnicodeキャラク

を表現可能とした。

  • bytes型の実装は従来の8bit文字列型とほぼ同じ、str

型の実装は従来のUnicode型からコピー。
(鴨澤疑問: 文字列メソッド同士の非互換性はどうなったの?)

  • これで使用法(データかテキストか)と型(bytesかstr

か)の対応がちゃんと1:1になった。

  • Djangoなどでは本質的に同じことをやってるが、Python2に

はそれを助ける仕組みが無かった。

いようになった(制御文字は別)。

・すでに後悔してるような変更はない。
・現状3000は2.5より遅いが、どんどん速くなる。
・(後方互換性を破るようなバージョンアップは大胆すぎないか、
覚えてる限り他にこんなことをやったのはVB6からVB.NET
への移行で、VB6プログラマは6年経ってもまだ怒って
るが、という質問に対し)

  • VB6とVB.NETは根本的に違うのに対し、Python3は

2と比較的表面の部分でしか違わない。

  • 基礎部分の実装をあまり変えない、という決定を意識的にやった。
  • VBではバーチャルマシンまで変えたはずだが、Python3では

Python2のVMからブランチして新しい言語仕様をサポートする
よう段々変更した。

  • 実装詳細の大部分は同じであり、しかも2.6トランクへの変更は3

ブランチに定期的にマージしてる。

・2から3への移行コストを過小評価することはまった
くしたくない。
・移行には2年は掛かるだろうし、それを楽にすべくいくつか
並行した戦略を持ってる。

  • まず、Python2系統は3年〜5年くらい、3

と同レベルで完全にサポートされる。リリースも並行する。

  • また、2方面攻撃式の移行戦略を用意した。
    • 2.6と3.0を同時リリースし、2.6には3000に

持って行ったら出てくる問題を警告する一連のオプション
warningを入れる(コマンドラインで指定しないと出ない)のがひと
つ。2.6には3.0の機能の一部をバックポートしてるの
で、お試しに向く。

か、long型の数字の末尾のLを取るといった構文上の小
さな違いを変換する。

      • ディクショナリメソッドの.keys()や.iterkeys()をPy3k

版に直すようなことまでやる。

  • この二つは互いを補完する。
    • 2to3は構文上の変更の面倒を見る。
    • 2.6のワーニングは構文だけを見るツールでは簡単には扱えない

部分を担う。

    • 動的言語なので変数や属性の型について情報が必要な変換は自動

化できない。

ワーニングが出ないようにすることは可能。こうしたコードは
2to3で安全に移行できる。

・2から3への移行ワークフローは一般的に次のようになる。
1. 2.4や2.5で動き、かつ、良いテストスイートを持ったコー
ドからスタート。
2. Python 2.6に移植する。これは素直に行くはず。2.6でテ
ストを走らせて問題が出てたら直し、全部のテストにパスするよう
にする。
3. Py3Kワーニングをオンにしてテストスイートを再実行。レポート
される問題を解決。ワーニングが出なくなるまで繰り返し。
4. 2to3をかける。テストスイートにもかける。そしてテストスイー
トを走らせる。

    • 問題が出ても直さないこと。
    • 2.6コードベースで直す。そして 3.に戻って繰り返し。

・リビジョン管理の点から言うと、普通は2.6と3.0両
方のブランチを長期間持っておくことになるだろう。ただし2.6
に変更をくわえて2to3で3.0にマージするというやり方で。

あとは「反響は(いろいろ)」とか「大きなプロジェクトで3000
に移行したのはありますか(まだ早いよ)」とか、そんな質問が続
いてました。
残りは適当に抜き書き。

Djangoは理論と実践の間で非常にパイソニックにバランス
が取れてるし、プロジェクトの組織がPythonのと似てるから
大好き」
「最近ディベロッパが増えて、古くからの人が楽になった。」
「PyPyがいい感じ。EUのファンディングで猛烈に発展
した。将来CPythonに対するちゃんとした選択肢になるだろう。」
Googleではまず内部向けのコードレビューウェブツールの
Mondrianをやった。11月からはGAEをやってる。GAE
のデモ用にModreanの一部を流用してSubversion用の
コードレビューツールに仕立て直した。Googleの許可を得て
オープンソースとした。codereview.appspot.comで動いてる
ところとソースが見られる。」
Googleでは、ビジネスに潜在的に価値があるであろう個人
プロジェクトに20%の時間が使えるが)
Pythonに50%の時間を使えるという同意を(ヒモなし
で)得ている。だから『ぼくの50%プロジェクト』って呼んで
るよ。」

          • -


詳細は原文を当たってください。Linux Journalはデジタル版だと2
年分で50ドル(1年なら30ドル)、冊子版
(+デジタル版へのアクセス可能)なら2年分で130
ドル(1年なら70ドル)ほど。お試しで2冊フ
リーってのもありますが、日本に届けてくれるかどうかは知りません。

鴨澤眞夫