Charles宇宙へ。

昨日のやつは登録する日を間違えてしまいましたので、移しました。

ところで、おとといの日記に出てくるCharles Simonyiは、http://www.nikkansports.com/general/f-gn-tp0-20061027-109112.htmlというニュースにもなっていました。つわものだ。

ちなみに、情報としてはhttp://www.cnn.com/2006/TECH/space/10/27/space.tourist.ap/index.htmlのほうが詳しいです。

OOPSLA

来年のOOPSLAはモントリオールということで、その紹介がフランス語こみで行われていた。

Philip Wadlerの"Faith Evolution, and Programming Languages."という題の招待講演。"the most cited computer scientist"ということだ(期間等は聞き逃したが)。

Wadlerはユダヤ系であることを折々触れるようだが、多文化主義と進化論の話からはじめていた。

Gentzenがナチのシンパであった事にも触れつつ、彼の推論規則(1935?)が論理学およびプログラミング言語における型理論の大きな基礎になっていること。Churchによってラムダ計算論が作られたこと。Curry-Howardによる型付ラムダ計算と自然推論の同型性、Hindley-Milnerの型理論Girard-Reynoldsの多相ラムダ計算などが生まれて、今の関数型の基礎になっていること。これらの名前のペアが表しているように、正しいアイディアというものは十分に優秀な研究者であれば、複数の人がそれぞれ独立にたどり着くものである。C++を複数人が思いつくようなことがあるだろうか?と言っていた。

その後は、Haskellのまじめな説明と、Java Genericsのまじめな説明と、ラムダマンへの変身(失敗してGuy Steeleに助けられていたが)と、ちょっとしたまとめ。

Java Genericsが行った、genericを使ったコードと使っていないコードの混在を許すためにした工夫を、「進化(evalution)」のためだといっていた。後は、Gentzenから連なる70年ほどの進歩も進化なのだと言っていたのだが、やっぱり科学的・数学的な積み重ねと、はやり廃りの話を「進化」というくくりに入れるのはいまいちかもしれない。この日記でも何度か書いたが、生物学的な進化のプロセスは、決して最適化や「進歩」を導くものではないのだから。後、「多文化」というときに、ダビデの星と十字架と、イスラムの三日月を出していたのだが、そこで一神教のものしか出てこないところに「視点」というものを感じたな。とはいうものの、なかなか良い講演だったと思う。

停電騒ぎもあってテクニカルセッションはあまり聞く元気が出なかったので、Camp Smalltalkのところでだべり。毛玉をデモしたりしていたのだが、闇雲に自分のやりたいこととつなげて話してくる人がいてちょっと閉口。Ryan Davisとはだいぶ話したし、David Simmonsが「はじめまして」と言ってきてくれたので、彼ともだいぶお話ができた(はじめましてじゃないんだけど)。彼はMicrosoftJavaScriptVBといった動的言語をやっているグループのリーダーの一人であるが、QKS Smalltalkという、いつまでも新バージョンが出ないことで有名だった処理系を作っていた人としても知られている。それより、Randy Smithにようやく挨拶ができたのが良かった。何年も機会がなかったのだよな。

午後は、Young Gunという若手研究者のパネルを少し覗いた後で、Rinardの招待講演。パネルのほうは、まあオーソドックスなことを言う優秀な若者達という感じでいまいちだったようには思った(途中までしか聞かなかったが、Alexも同様の感想だった。助教授達は、テニュアを取ることが最優先と言うばかりで、あまりcrazyなことはできないみたいだと。) Rinardの招待講演のほうは、エラーを全部つぶすことを目指すのではなく、上手に受け止めるべしという話。特にUIに関わるところでは、表示の際にメッセージが切れてしまったりしても、ユーザーが許してくれることが多い。既存の大きなオープンソースのプロジェクトをかなり大規模に調査していたが、バッファーオーバーフローとかがあっても、データのおしりをぶった切ったり適当な値で置き換えたりしても、問題のないところが多かった。バグは絶対に残るものなので、例外が出ても空のcatch{}で捕まえるのと同等な処理をしたり、もっともらしい値を変数に入れてしまったりしてプログラムを動かし続けるような方針でコードを書くべきだという話。Smalltalkerにしてみればまあ当たり前と思わなくもないが。

この講演に限らず、「大規模ソフトではバグは絶対に残るのだから、それをいかにembraceするべきか」ということが多くのところで語られていたOOPSLAではあった。

最後は、ACM のいくつかの表彰。Distinguished ScientistとかDistinguished Engineerとかも表彰されていたが、1986年から1996年までの間で、もっともインパクトのあったOOPSLAの論文を3本選んで表彰する、という今年から始まった企画が良かった。Pattie Maesによる"Concepts and Experiments Computational Reflection"、David UngarとRandy Smithによる"Self: The power of simplicity"、後は、"Subject-Oriented Programming"の話。この中で読んだことがあるのはDavidとRandyのやつだけなのであまり偉そうなことはいえないはずだが、彼らのやつが選ばれたのは非常に正しいと思われる(選考委員には松岡先生も入っていた)。

DavidとRandyはちょっと講演をしていた。Selfの論文は、新しいアイディアだが、証明もなし、速度評価もなし、既存のものの拡張でもなし、モダンだがポストモダンでもないと言っていた。Davidは、「このような論文は今採択されるだろうか?」と疑問を投げかけていた。今の論文選考の方法が合議制に偏りすぎて、incrementalなものが選ばれがちであり、面白い論文よりはPCの誰をも怒らせないことのほうが重要であるように思われる、と。

Randyも引き続いて話をした。performanceのために言語を犠牲にすることはない、オブジェクトの中に入っても、手続き的にコードを書くようにする必要はないというデザインの話と、direct manipulation UIとのシナジーが良かったという話。Alternate Reality Kitの話もあった。

DavidがXerox PARCにたびたび訪れて新しいことをやろうとRandyと話していたときは、毎回名札に手書きで名前を書かされていた。ある日それにうんざりしたDavidが、名前の代わりに"self"と書いて入ってきたことがあり、それがきっかけで新しい言語がselfという名前になったとか("name badge"という名前にしなくて良かった、と言っていたが)。RandyはPhDを理論物理でとったので、単純な原理を追求すると、より普遍性があっていろいろな使い方ができるものになる、という概念にはなじみがあったが、今のソフトウェアの作り方は単純性を求めてそぎ落としていくのではなく、、ほとんど何の役にも立たないコードを闇雲に追加する方向にある。単純性と動的言語の組み合わせという方向性を将来も残していってほしい、というメッセージであった。

というわけで、今回のOOPSLAはおしまいでした。

OOPSLA

Guy Steeleのキーノート。OOSPLA '98では
http://www.brics.dk/~hosc/local/HOSC-12-3-pp221-236.pdfという講演をしたらしく、それがhttp://homepages.inf.ed.ac.uk/wadler/にも書かれているようにとても話題になったそうであるが、今回は多分Fortressの説明としてはスタンダードなもので、スタイルとしてはコンサーバティブ。(OOPSLA '98にはいたはずなのに思い出せないが)。

ひとことまとめとしては、Fortressは良いところがたくさんあるということだ。

Onward!トラックに移って、Charles SimonyiによるIntentional Softwareの発表を聞く。ご存知のようにCharlesはBravoというワープロソフトを書いて、出来が良かったのでMicrosoftに引き抜かれてMS-Wordを書いた人である。コードの内部表現と外部表現を切り離して、いろいろな見た目と編集環境を提供するということである。Jonathan Edwardsのやつににているかも。どちらかといえば、Charlesを目撃したことで満足。その後Essayトラックにさらに移った。もしかしたら面白い話だったのかもしれないが、途中からだったので乗れず。システムデザインというものを大学教育で教えることができるのかどうか、という話。大規模なオープンソースプロジェクトのコミッターでない教授が教えるのはおかしい、というような言葉もあったが。

午後のテクニカルセッションは、まずcontext-sensitive parsing。モジュラーなパーザーとスキャナーをコンテキストに応じて使い分けるというものだ。Ianのやつでも似たようなことはやっているが、まあきれいといえばきれい。Javaだけど。また書くが、TeXのように、入力ストリームそのものがプログラムから見えていて、ストリーム内の次の文字列の解釈を変えることができるようなモデルが面白いのだがな。method specific optimizationは、大きなデータセットでメソッドごとにどのようなコンパイルオプションを使うべきかのヒューリスティクスをデータベースを作り、その後ベンチマークプログラムをそのヒューリスティクスに基づいてメソッドごとに違うコンパイルオプションでコンパイルして性能が出るかどうかを試した。SpecJVMのように、既存のVMが高速化を目指しているようなベンチマークであっても5%とかの向上が見られるし、それ以外の例では50%くらい速くなるベンチマークもある。教訓としては、SpecJVMを使ってJava VMのチューニングをしても、一般の例では遅くなることも多々あるということであった。Replay Compilationは、JITのでバッギングをするときに、JITがどのような入力を元にどのような変換を行ったのかについて、入力データの保存に必要な容量をなるべくせつやくするために、不変なデータはコアダンプに入るので保存するのは捨てて、可変なデータのみを保存するようにした。Ianのやつでも、なんらかのフレームワークは必要になるから(まあ考えているけど)、それなりに興味深い。

夜は、科学博物館でパーティー。なぜかスターウォーズの展示をがんばっていたが、その他体験型の出し物がたくさんあっておもしろかった。

OOPSLA

John Vlissides.といえば、2004年のOOPSLAでAlanがTuring賞受賞講演をしたときの座長だったのだよな。俺はそのとき最前列に座っていたのだが、Alanの紹介を終えたJohnが隣に座ったわけだ。Alanの講演の中でSutherlandの博士論文の表紙が写真として出てきたとき、指導教官の名前がClaude Shannonだったので俺がひとりごとで"Claude Shannon."と言ったら、Johnが"History, huh?"みたいなことを言ってきたことがあった。一期一会。

OOPSLA

Peri Tarrの開会の挨拶から。彼女はなぜすごいサングラスをしているのか?

参加者は43ヶ国から1140人。少ない。そのうち初めての人が460人。

最初のキーノートはBrenda Laurel。AlanともAtari時代からの知り合いで、Kimも昔から良く知っている人だそうだ。内容は、アリストテレスの哲学を援用して、後は舞台芸術からの経験と蓄積が、コンピュータ時代にどのような関係をもっているかということについて。タイトルのdesigned animismというのは、センサーネットワークで「自然」が人間に対して働きかけをするようになった時には、それが人間がデザインしたアニミズムとして見ることができる。ユビキタスネットワークを功利的なものとしてみるだけではなく環境との対話が行われるようになっていると考えるようになるから。

芸術が自然を模倣するというときに、Pollockの作品は本当の自然物を模倣しているようには思えなかったが、フラクタル理論で作られる波の形とそっくりでもある。音楽の場合は自然界に模倣する対象はないようでもあるが、ドビュッシーが星の配列を元にして(?)曲を作ったり、John Cageは自然を元にした乱数を使った音楽を作ったりすると言う意味で、数理的な自然解釈を芸術が模倣することもある。といった話など。もうちょっとめもったけど、まあこの辺で。質問コーナーでは、いつものように質問をするのではなくて、自分が知っていることを披瀝する時間だと勘違いして長々と話す人がある。長いコメントの後で「つまりあなたは私の話を楽しんでくれたようね」とまとめて受けをとっていた。Guy Steele Jr.は「Marvin Minskyは幸せになると先に進めなくなるから良くないといったが、あなたは詩や芸術が人を幸せにするという効果を強調しすぎている」と言っていた。Brendaは「Marvinが子供をつれてDisneylandに来ていたところに一緒にいたことがあるけど、あの人子供に嘘ばっかいってしょうもないやつだった」とか言っていた。インサイドジョークだなのだな、きっと。

最初のペーパーセッションはvirtual classなどのクラス拡張について。3件のうち1件は、われらがViewpoints ResearchのインターンAlexによるもの。贔屓目ではなく、Alexのものが一番プラクティカルで、シンプルで「使いやすい」もののようである。発表もジョークが入っていて面白かったし。夜のセッション中にScalaの人々(Lexもその中の一人だ)と話したのだが、Scalaの人からすると、「結局Scalaにはとっくの前にあるような機能なのに、classboxもexpanderもvirtual classも、みんな似たようなものを何度も何度もやり直しては論文にしている」ということになる。まあ俺もほかのことについて似たようなことを言っているが、ソフトウェア界は目先の変化によって、古いアイディアの焼き直しが新しいものに見えてしまうという側面があるからな。

Linda Northropのキーノートは、Ultra-Large Scale Systemについて。スケーラビリティということに関してはうるさい人が僕の周りに多いこともあり、normal failureとか、ビルディングではなくて都市を使ったアナロジーとか、まあ驚くべきことはないようには聞こえた。本を出したらしいのでそれを読むともっと面白いことがあるのかもしれない。

その後のテクニカルセッションは内職して聞かず。Camp Smalltalkのところもいつも同じ面子ながら、活気を持ってやっている。

Squeak BOFもちゃんと開かれた。BOFの最初の二人がそれぞれ40分くらいずつ自分がやっていることについての"gory detail"を話してしまったわけなのだが、その辺の仕切りの悪さ、およびそういう風に時間の感覚を失って話をしてしまう人というのは困るよなあ。その後の3人は一人5分ずつ位で切り上げたのに。俺もOLPC上のeToysについて、その中で5分くらい話してみた。

メインのトラックのほうでは、先日なくなってしまったGang of FourのJohn Vlissidesの追悼企画。JohnのリーダーシップについてRalphとErichからいろいろなエピソードが。Erichが保存していた3500通くらいのメールのやり取りの中から印象的なものが紹介されていた。以下はその他のfactoid。

- Ralphは、本を書いている途中に初めてUML図というものの読み方を覚える気になった。
- パターンのカタログを作ろうと言ったのはErichだった。
- RalphはJohnの実家に泊まったことがある。Johnの両親はギリシャ系移民だが、電気会社をやっていた。Johnは10才のころから親のところで手伝っていて、電卓やプログラム電卓を使うようになったのがプログラミングをするようになったきっかけだったと聞かされた。

  • Johnのお気に入りはFlyweightだったようである。(Johnが発明した、という言葉が出てきたようなきもするが、そんなはずはないだろう)

- (Andrew Blackの質問として)Alexanderの本は、150くらいのパターンが、各々2ページくらいで説明されているが、GoFの本は23のパターンがかなり詳しく説明されている。その違いはどこから来たのか。答えとしては、ドラフトを人々に見せたとき、エキスパートは理解できたようだが、普通の人が簡単に理解できるようなものではなかった。建築の場合は、説明を見たらそれをどうやって実現すればよいのか自分で考えられるプロ向けに書かれていた。
- 目撃した最悪のパターンの使い方はどのようなものだったかという質問に対してRalphが答えていわく。本を出して1, 2年後に、「われわれの会社では全員デザインパターンの本を持っている。やっているプロジェクトでも、15回Singletonパターンを使っている、10回Mediatorパターンを使っている」とパターンを使っていることを目的にしてやっている人がいたりして「お前らあほか」と思いはしたが言わないでいたこともある。Erichも、「われわれのプロジェクトでは23のパターンのうち20個まで使えましたが、後の3つを使う場所が見つかりませんでした。是非教えてください」といわれたことがあるとか。ErichとRalphの反省点としては、あの本ではパターンの使い方は説明したが、以下にパターンを使わないでもっとシンプルに書くべきかという説明がなされていなかったことがある。Singletonパターンというのはグローバルな状態を導入しているものだから、使わないですむ場合には使わないほうが良いものである。だが、グローバルな状態は良くない、ということはちゃんと説明しなかった。
- SketchPadの中にもObserverパターンは使われている。

僕が大学生のときにデザパタ本が出てはやり、その数年後には、確かに(fj.*をみても)なんとなく宗教的に扱っている人を時々見かけたことを思い出す。ちょっと下の後輩達も、卒論や修論デザインパターンのなんちゃらかんちゃらというのが続々とあったりして。今思うと、最初に見たものに支配されるということの実例だったのだなあ。

OOPSLA併設のDynamic Language Symposium

DLSも伝統になりつつあるのか、200人くらいは集めていただろうか。

最初はIanによる「Ianのやつ」の話。ストーリーラインはいつもとちょっと違って、dynamic languageとは何か、ということを、言語に関するsyntax, semantics, implementation, runtime, pragraticsのそれぞれのどこが動的に変更できるのか、という視点から説明。あとWikipediaには「使いやすい」ということがdynamic languageの重要な要素であるように書かれているということ。

徐々に実際の話に移って行って、オブジェクトはvtableを持つという一点のみによって定義されており、そのvtableもオブジェクトであること、vtableは、lookup:, methodAt:put:、intern: allocate:だけを理解するオブジェクトであることと、そのlookup:のチェインは一応不動点があってとまるけれども、その不動点のlookup:も動的に書き換えられることなど。

KelsayのPre-SchemeやTeslerのLISP-70にも似たアイディアがあった。Birmanの1970年のバックトラックつきパーズ、そして(この日記に何度も出ている)1962年のMeta-IIのアイディアを多く取り入れているとともに、TeXのように、入力ストリームの解釈法をダイナミックに変えるというアイディアも使っている。

というわけでデモをおりまぜつつ発表。聴衆のレベルも高いので、いつになくみな良く理解していたようだ。

次は、Armin RigoによるPyPyの発表。うーむ、としか言いようがないな。単純さを志向しているといいつつ、実際には難しいやり方をしているとしか思えん。David Ungarの正しくも厳しい質問として「今まで何人月使ってきたのか、および一点だけ一番良いアイディアだと思っているところはどこか」というものがあった。5人のフルタイムで2年以上やってこれはないでしょう。

Christopher MuellerによるHigh-Performanceもの。基本的にはCPU命令をほんのちょっと抽象化したPythonの関数をプログラマに見せて、Pythonでハイパフォーマンスものをやろうというもの。IanのVPU(のあるべき姿)にもちょっとにているわけではある。

Sam Tobin-Hochstadtによる、動的型言語と静的型言語の間をつなぐためのPLTScheme用型アノテーション。需要はともかく、やりたいことはわかる。

昼飯でちょっと遅れたが、今日一番面白かったのはAudrey Tangの発表。彼女は自分のやっていることが良くわかっている。今日の会議は、Philip Wadlerが静的型付けの言語派からきていたこともあり、David UngarやMatthias FelleisenやPhilip Wadlerなどが、講演者そっちのけで言語論争をしたりしていて、まあ一面としては面白いが、あまり実りのあるような議論にはなっていなかった。が、Audreyは、彼らからの質問も、びしっと自分の言葉で完璧にまとめて理解して、Perl 6利点と欠点と自分の考えをしっかりと言って、基本的にうるさ方をだまらせていたのがすごかった(彼女は背も高かった)。今日の一番感心したところである。Philipが、「遅延評価は、副作用があるとややこしくなってたいてい一番評価してほしくないときに式が評価される」と言って受けをとっていたが、Audreyの説明としては、Perl6には遅延コンストラクトはあるけど、遅延評価関数はない。遅延評価が役に立つのはもともとコンストラクトだけであるという話がある(ソース失念)と答えていたな。

その後の発表に対してはやや聞く元気を失った面もあるが、HopとTransactional Memoryの話などがあり、最後はAviによるDabbleDBの発表。late-binding式の発表が上手であった。しっかり作られていないワークシートのデータに型を与えたりして、データの情報の質を上げるという作業を、エンドユーザーができるWeb上のインターフェイスなわけであるが、Davidは「Smalltalkerとして、型を与えることによる効果についてどう思うのか」という質問があった。それでまた講演者そっちのけで話(というか言い合い)がはじまり(Mattiasなどはもう自分の演説上のように振舞っていたしな)、Gregor Kiczalesも参戦したりしていたが、新たな知見が得られるような場外乱闘ではなかった気もする。

というわけで、Audreyを目の前で見ることができたのと、Ianの話がばっちり受けていたのが大きな収穫の一日だった。Göranにはじめて会い、Lexにも久しぶりに会い、Robertにも久しぶりに会い、その他大勢のSqueakerと話をした日でもあった。