Guidoのインタビュー on Linux Journal
昨日届いてた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ビット文
字列型のみだった
昧さを導入した
- Python3では互換性を破壊して線引きを変えた。つまり
- これまでの8bit文字列型とほとんど同じのbytes型
でバイナリデータ(およびUTF-8などでエンコード済みのテキ
スト)を扱いを表現可能とした。
- 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のワーニングは構文だけを見るツールでは簡単には扱えない
部分を担う。
- 動的言語なので変数や属性の型について情報が必要な変換は自動
化できない。
- あなたのソースコードを2.6コンパチ、かつPy3K
ワーニングが出ないようにすることは可能。こうしたコードは
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冊フ
リーってのもありますが、日本に届けてくれるかどうかは知りません。鴨澤眞夫