PyCon JP 2012参加レポート

第1回 複雑さは幸せを殺す ─初日/2日目キーノートと開発者向け注目セッションから

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

[2日目キーノート]小飼 弾(@dankogai)

小飼氏はプログラミング言語PerlのJcode.pmというライブラリを開発したことで知られています。また,Perl 5.8の開発にも携わりました。

小飼 弾氏

小飼 弾氏

The Three Virtues of a programmer

小飼氏はまず,Perl開発者であるLarry Wall氏が提唱した⁠The Three Virtues of a Programmer⁠にPerl,Ruby,Pythonを当てはめて,⁠Laziness⁠はPerl,⁠Impatience⁠はRuby,そして⁠Hubris⁠はPythonであると述べました。

PythonがHubrisである理由を⁠Zen of Python⁠に絡めてキーノートの主題としてお話になりました。

Zen of Python

Zen of Pythonとは,⁠Pythonらしさ⁠を示した19行の短い詩です。Pythonのインタプリタを立ちあげ,⁠import this⁠を実行することでいつでも全文を読むことができます。

Beautiful is better than ugly.

小飼氏はまず,Zen of Pythonの⁠Beautiful is better than ugly.⁠という記述について,配列の各要素をjoinする処理を例として取り上げました。

オブジェクト指向言語であるRuby,JavaScript,Pythonにおいて,RubyとJavaScriptは⁠配列オブジェクトのメンバメソッド⁠を使って配列要素をjoinするのに対し,Pythonは"文字列オブジェクトのメンバメソッド"を使って行う,という特徴を持っています。この独特な方法は果たして,⁠Beautiful⁠なのか,小飼氏は会場にいるPythonistaに問いかけました。結果,会場でこの実装を⁠Beautiful⁠だと思っている人がマイノリティであることが印象的でした。

Explicit is better than implicit.

次に,小飼氏はPythonで文字列を表現する際のuリテラルを取り上げました。

Python 2系では文字列を表すのに,str型とunicode型が存在します。ただのクオートでくくられたものはstr,uリテラル付きクオート(u""ないしu'')でくくられたものはunicode型として扱われています。小飼氏はまず,この表現は明示的でよい,と評価しました。

一方,Python 3では文字列を表すものはPython 2のunicode型が名を変えたstr型のみになりました。この変更に伴い,Python 3系ではuリテラルが廃止されました。しかし,Python 3.3ではこのuリテラルが復活し,ただのクオートとuリテラル付きクオートが同じものとして扱われることになりました。この過去からのimportについて,小飼氏は⁠わけがわからないよ⁠とおっしゃっていました。

セッションの部屋があふれたために別室でのストリームの放送も行われた

セッションの部屋があふれたために別室でのストリームの放送も行われた

There should be one- and preferably only one -obvious way to do it.

さらに小飼氏はPythonのlen関数を取り上げました。

len(u"\U0001F40D") これを実行するとどんな結果が返ってきますか?─小飼氏の問いかけに対して,会場から出てきた答えは,1, 2,⁠わからない⁠の3つで,小飼氏が示した正解は⁠わからない⁠でした。

u"\U0001F40D"はUnicodeのサロゲートペアで,未定義領域にある2文字をあわせて1文字を表現します。Pythonが"-enable-unicode=ucs4"オプションと共にコンパイルされたならサロゲートペアは適切に扱われlenは1を返しますが,そうでない場合は2を返します。この動作は言語としての一貫性を失っており大きな問題である,と小飼氏は指摘しました。

また小飼氏は,Perlはサロゲートペアの問題の対応を10年前に対応を終わらせ,Rubyは5年前に対応を終わらせているが,Pythonもこの問題の対応は終わったと言っているものの,このとおりの振る舞いを見せている,という事実も加えて説明しました。

小飼氏はPerlの開発者としてJcode.pmなど文字エンコードに関するモジュールを開発してきた経験からか,Pythonの文字の扱いに関することについて特に大きな時間を割いたお話となりました。

セッションの最後に小飼氏は

  • “禅は唱えるべきものではありません。禅はなすべきものです”

と述べ,キーノートを締めくくりました。

発表スライド
Python as a Foreign Language

著者プロフィール

吉田昂平(よしだこうへい)

高校2年生。小学6年生の時に同級生からウェブサイト制作を依頼されたことからプログラミングの世界に足を踏み入れる。得意とする言語はPython。PyCon JP 2012では,「ナウでヤングな17歳のVPS構築記」というタイトルでセッションをしたことに加え,運営スタッフも務めた。

URL:http://yosida95.com/

Twitter:@yosida95