Sarah Palin

昨日の共和党全国大会で、副大統領候補のSarah Palinがよい演説をしたということであちこちのマスコミやラジオのトークショーに電話してくる一般人がとてもほめまくっているわけである。が、元テレビキャスターが、数日間みっちりと練習して他人の書いた台本をテレプロンプター越しに上手に読んだ、ということがなぜ彼女の政治能力の証明になるのかは私にはよくわからない。

わからないといえば、彼女が演説で"you know, they say, what is the difference between a hockey mom and a pit bull? Lipstick."といってすごい受けをとっていたのだが、どこが笑うところなのかも良くわからない。なんだったのだろう。

V8

http://kwakita.sakura.ne.jp/ken/ja/2008/09/what-the-things-v8-brought-us/

V8については私がいまさら書くほどのことはないのですが、脇田さんの記事にある

つまり、JavaScript が速く動作するんだから、PerlPHPPythonRuby も速く動作させなくてはならないという圧力がかかることでしょう。
でも、すでに述べたように、それは無理な相談です。きちんとした言語仕様がないのですから。ということは、とるべき道はあまりありません。まずは、きちんとした言語仕様を作り直し、それにあわせた言語処理系を作ることです。

というところにはちょっと同意できないですね。きちんとした仕様がなくても、核となるアイディアが十分に小さくて一般性が高ければ、一定の最適化手法を広い範囲に適用できるので少ない労力で高速化が図れるというのが、LispSmalltalkの教えるところであります(VisualWorksやAllegro Common LispのほうがV8よりも速いですから)。高速化のためには数値型や文字列に関する仮定は置かなくてはならないので、例外なしに完全にできるわけではないですが、四則演算みたいなものの定義は書き換えたら遅くなっちゃうけど、それら以外は別にIntegerやStringであっても少々変えても大丈夫、というようなものにはできると思います。

IanのTCP/IPスタック

http://practical-scheme.net/wiliki/wiliki.cgi?Shiro
で呼ばれました(「編集」のボタンが押せるのですが、いきなり編集してもよかったのでしょうか?)。

もひとつ、これも上に挙げた文法のカスタマイズにつながるんだけれど、問題のドメインがはっきりしている場合、それ用のDSLで書いてある方が検証しやすい。たとえばAlan KayのとこでIan Piumartaらがやってるプロジェクトでは、RFCに書かれてるTCPの仕様をDSLとして解釈してコンパイルすると実際に動作するTCPプロトコルスタックになる、というのを書いたそうだが(大島さん、間違ってたらツッコミお願い)、ここまでやって問題が出たらそれは仕様のバグってことになるわけだ。ここまでやらずとも、DSLを使うというのは、問題領域で使われる概念に良く対応する言葉を組み合わせてプログラムするということだら、プログラマの意図がより明確であり、その意図に照らした検証がしやすいと言えるだろう。

あともひとつ。これもIanの受け売りに近いんだけど、こうやってメタプログラミングを極めて行くと複雑なシステムがえらくコンパクトに書けるようになる可能性がある。実際、彼らはOS・言語処理系からアプリに至るまでの全てを20000行で書くというプロジェクトをやっていて、ネイティブコンパイラが1000行ちょい、とかは既に実現されてる。 で、1000万行のシステムと2万行のシステムなら後者の方が検証ははるかに楽だろう。1000万行のシステムの99.8%が機械的に除去可能な冗長性でない限り。 (そうそう、Ianのやつは上の「C的なレイヤ」の話の反例にもなってると思う。)

Ianのやつの話の一部は

http://piumarta.com/svn2/idst/trunk/function/examples/tcp/net-ip.k

みたいなやつで、確かに仕様書から切り出してきたものを元にパケットのフィールドのアクセサを生成したりするので、その部分は確かに仕様からの乖離の仕様のないものになっています。ただ、彼のTCP/IPの例で言うと、

http://piumarta.com/svn2/idst/trunk/function/examples/tcp/tcp2.k
の一番下にある文法で入力ストリームのパケットをparsingすることが仕様にある状態遷移になっているのだ、というところは飛躍があるので、そこは「短いがために人間による検証ができる」というところが味噌になっていますね。

コンピュータが扱う複雑性はやっぱり普通の数学が扱うことになっている規模とは相当に違うので、新しい数学としての発明がさらになされていく必要があるというのは確かですね。

OLPCNewsのBill Kerrの記事

Bill Kerrはオーストラリアの高校の先生なのだが、教育についてとてもよく勉強していてさらに文章にまとめて書くのが好きな人のようでいろいろよいことを書いている。OLPC Newsはそういう記事を取り上げて再掲することがよくあって、以下の記事もそのようなものである。

http://www.olpcnews.com/use_cases/education/an_answer_to_question_22.html

で、コメントがいくつかついているのだが、「世の中よくもここまで物事勘違いできる人がいるものだ」と思うくらい情けなかったり、独りよがりでいったい何が言いたいのかわからないようなものばかりである。すごいことだ。

OLPC

日記のほうはかなり休眠状態ですが、OLPCの仕事は時々しています。というか今週は締め切り間近なので、久しぶりに次々とパッチをあげるモードで仕事しています。

Pangoを使ったテキストレンダリングも完成度が上がって、日本語モードでも使えるようになるところまで来たと思います。興味のある方はぜひお試しください。

Collection>>sum

数日前からsqueak-devでは集合の全要素の合計を求めるsumというメソッドの定義と振る舞いについて盛り上がっていた。bike shedの部類ではあるが。

空集合のときの結果は当然0であるべきで議論の余地なしだと思っていたのだが、nilであるべきだ、という意見がAndreasから出て、それに同調する人が多いことに驚いた。そもそも今のSqueakの実装ではエラーになるのに、これまで気がついてなかったのであまりえらそうなことはいえないけど。

fold:かreduce:というメソッドを定義して、sumやmaxなどはそれを使って書けばよいだけなのに、みんな盛り上がりすぎ。

もっとも、うちのオフィスには数学に詳しい人が多いので、別の視点も次々出てくるわけではある。ペアノの公理に基づいて数がリストで表現されていて、SmallIntegerはその最適化だとしたらnilは加算に関する単位元として振舞うべきともいえるし、代数なら単位元と演算が定義できていればまあよいわけだしね。

でも、APLなら空リストの和は0ということで、やっぱり常識的には0が正しいのだ。