東京行きですっかりくたびれたか、異常に眠る。午前中はずっと寝ていた。 が、おかげで風邪引きかかっていたような気がしていたのが、直ったような。
スクリプト言語におけるGCの課題は、大量live objectとスレッド対応であると述べたが、 今回はスレッド対応の難しさについて考察する。
複数のスレッドが存在する環境でGCを行う場合に面倒なのは同期と排他制御だ。
そもそも、あるオブジェクトが死んでいる(プログラム終了まで使われることはない)かどうかは、 機械的には判定できない。そこで、どこからも参照されていないことを近似として用いているわけだが、 「どこからも参照されていない」かどうかを判定することも、それほど簡単ではない。
reference countを除くGC手法では、rootと呼ばれる「生きていることが分かっているオブジェクト」から始めて、 リンクをたどることで到達可能なオブジェクトを「生きている」と判定している。 生きているオブジェクト以外のオブジェクトはすなわち「死んでいる」わけだ。 ところが、GCがスキャンしている最中にほかのスレッドがオブジェクトの中身を書き換えてしまうと、 正確にスキャンできない。死んだはずのオブジェクトを生きていると判定するのは別に実害はないが、 生きているオブジェクトを死んでいると判定するのは非常にまずい。
これを避けるにはふたつの方法が知られている。
前者は簡単だが、GCのために毎回スレッドが全部止まってしまうようでは、処理効率が下がってしまい、 せっかくのスレッドの意味がなくなりかねない。多くの実装ではスレッドに「止まれ」と命令しても 次の「停止できる場所」に到達するまでは止まってくれないので、待ち合わせが必要になるし、 GCは思ったより頻繁に起きるものだし。
後者は オブジェクトのスキャンをやりなおしている間にまたマークがつけられてしまうと いつまでたっても回収が行えないことを考えると、実装が複雑になってしまう。 マークにpage protectionのような方法を使うと移植性が下がってしまうし。
そこで、世代別GCでminor collectionではスレッド間の協調なしに オブジェクトの回収ができるアルゴリズムがあれば、 スレッド環境下でも性能が維持できるのではないかと考えたのだが(まだ続く)。
あー、でもスクリプト言語では性能はあまり問題にならないと自分で書いたのだったな。
温泉ミーティングなどですこし取り掛かりが遅くなったが、原稿を書きはじめる。今月の〆切は8日。
オープンソースマガジンのテーマはオープンソースライセンス。 GPLv3のドラフトが発表されたので、それを枕にいろんなライセンスの話を。でも、GPLv3の個別の内容までには触れていない。どちらかというと以前この日記に書いたフリーソフトウェアライセンス診断のような感じか。
日経Linuxの方は多重継承。なんか最近多重継承への否定的な意見を何度か見かけたのがきっかけ。どうもいろいろ誤解があるようで、しかも、その一部は自分がきっかけになっているような気がする。 Mix-inを持ち上げるために素の多重継承の危険性を述べたら、それを根拠に多重継承一般が否定されたり。
日経の連載では以前にも継承について扱ったことがあったが、もう一度解説することにする。
そういえば、今日がるびま 13号の〆切であった。
今月の言語探訪はDylan。Apple Computerが設計した動的言語である。これが非常に面白い。広まらなかったのが残念だ。
なんか、ヘンな言語ばっかり紹介してるな。
ホテルのレストランでクーポン。Full American Breakfastとあるが、 いわゆるContinental Breakfastとどこが違うのかわからない。
「Javaの名づけ親」ことKim Polese女史の会社として知られる SpikeSourceへ訪問。 オープンソースビジネスについて熱く語ってもらう。
プロプライエタリソフトウェアがなくなることはないだろうが、 オープンソースこそソフトウェアの進歩の方向であるというメッセージは 力強い。っていうか、プレゼンうまいよ、この人(元Cygnus→RedHatの人)。
その他、技術者と話もした。
なのだそうだ。
で、ここで視察団は、分散。
私と一緒に次の訪問に行くチームはMountain Viewの「まるいちラーメン」へ。 シリコンバレーまで来てラーメン食べなくてもいいだろうという気もするが、 せっかく案内してもらったので素直に従うことにする。
で、Combo Bなるメニューを注文したのだが、 「ラーメン+揚餃子+カリフォルニア巻き」のコンボであった。 ちょっと量が多いよ..。
食べたけど。おいしかったけど。
この店で「ベイスポ」をゲット。 ベイエリアの無料日本語新聞。普通のコミュニティ紙に見えるが、 求人欄などアメリカらしい。
なんでもベイスポのある店に悪い店はないんだそうだ。
(株)SRAの米国法人SRA Americaは、今はSRAOSSという名前になっているのだそうだ。 日本支社長はPosgreSQLの石井さんだよね。
社長の人はインドの方なのだが、日本語がめちゃめちゃ上手。 終始、日本語で話しておられた。
が、日本語が上手でも日本人のように振る舞うとは限らない。 すっごいストレートで、「あれはダメだ」とか、 「結局どうしたいの」とか。これがインド風なんだろうか。 すがすがしいほどだ。
しかし、私が「Rubyを作った人」というのは認識しなかったみたいで、 最後の最後、帰る直前になって、 「Ruby作ったの? あなたが? 最初に?」とか言われた。
そうです、私が作りました。
同行者のデジカメのメモリカードがいっぱいになったので、 電気屋のFry'sへ。レンタカーのカーナビが(日本のに比べると信じられないくらい) お馬鹿さんで、迷いに迷う。
で、いざついた店が異常に巨大で。SDカードを探してさまようことになる。 時間に余裕がない時はFry'sはやめた方が良いかもしれない。
しかし、2GのSDカードが$29.99は安い。秋葉よりも安いか。
「シリコンバレーの日本人技術者の会」JTPAのミーティングに呼ばれる。 貴重な機会である。
で、Rubyのこととか、シリコンバレーの生活のこととか。
など。
あと、当日のレポート(写真付き)。
帰る前に、幹事の渡辺千賀さんの『4022731222』を売ってもらう($9)。 もちろんサイン入り。いいおみやげだ。
今回の出席者には「嫁さんに読ませたらギークの生き方を理解してもらえた」と言ってた人がいる。うーむ、もしかしてうちの妻も...いや、ちょっと無理かな。
うーん、でも、世間には「変数のスコープは小さい方がいい(必要のないスコープに漏れたりしない方がよい)」という汎用的なプラクティスも存在するので、よそからRubyに来たひとは「えー、なんで:=使わないの? 便利だよねー」とか言いながら、:=を使いまくるような気がとってもします。例えばRails方面とかRails方面とかRails方面とか(<超偏見。でも、過去のRubyのテイストになじみのない人が大量に流入している&&新しいもの好きという傾向があるのは事実)。
それならそれでいいんじゃないかな。YARVなら性能上のペナルティはないそうだし。
はてなブックマークで私の日記のエントリを見ると、 この記事への宣伝リンクが入るのだが、 それは「お前のPHP関連のエントリは失言だ」と、 はてなに認定されている、と。
そういうことでいいのか(笑)。
新しいWebアプリケーションフレームワークRuby Waves。
Waves is feature-rich, compact, and extensible. Waves is thread-safe, hot-patchable, and supports easy clustering. Waves relies on best-of-breed Ruby libraries, including Rack, Mongrel, Sequel, Markaby, and Erubis, among others. And it uses just-in-time class and module creation to minimize the code you have to write.
MerbといいWavesといい、ポストRailsを狙っている(?)フレームワークが登場することは 大変健全なことだと思う。競争のないところに発展はない。
複数選択肢があるということはマーケティング的には善し悪しなんだけどね。
「動的言語批判」への批判。一読あれ。
ちょっと読んでみるとわかるけど、 この批判って単なる「静的言語が優れている」という意見への批判を越えていて、 実は批判の対象は「単一の言語しか知らないユーザの思い込み」ではないかと。
単一言語脳の恐怖
というか、なんというか。
ひとつしか言語・環境を知らないと、 それがすべてであり最良であるとしばしば思い込む。 そりゃひとつしか知らなけりゃ、それが最良だよね。 で、知りもしないくせに他の言語・環境に噛みつく、と。
ぜひ、プログラマ諸氏には、複数の言語・環境を経験していただきたい。 たとえ仕事に直接使えなくても。とくに両極端な選択がいいな。
「CとRuby」とか、「JavaとLisp」とか、「EclipseとEmacs」とか。 「ForthとScheme」とか。「HaskellとC++」とか、「APLとPerl」とか。
目の前の席の同僚(特に名を秘す)がイスをバランスボールに置き換えた。
ま、それはそれでよいのだが、 スクリーンの向こうで彼の背中が上下にゆらゆらと揺れると 普段のイメージとのギャップもあいまって なごんでしまって、しょうがない。
あ、なごむんだから、いいのか。