来ないなあと思っていた、OOPSLAのproceedingsがやっときた。 船便なのでずいぶん遅れるのだ。
今年は面白そうな論文が一杯ある。やっぱ行くべきだったのかなあ。 OOPSLAは当たり外れが多いからなあ。
読もうと思っている論文
「Traits」はRubyのmoduleに近いものらしい。 ただし、Mix-inよりも優れていると主張しているので、確認しないと。
2003年はGCのセッションが充実していたようだ。
先日の「Python Optional Typechecking Redux」で、
特に良くないと思うのは、「新文法」の持つ「意味」が、 __typecheck__()関数の定義によってさまざまに変化することだ。
と書いたら、「丁稚な日々」で
Rubyのfor文におけるeachメソッドの立場と、GuidoたんのこのOptional Typechecking機構における__typecheck__メソッドの立場って、あんまり変わらないような気がするんですが、どうなんでしょう?
- 同じ。Rubyのfor文はよろしくない例である。
- 違う。これとあれとは別の次元の話である。
- その他。
どれなのかしらん。
と突っ込まれていた。正解は2番。
for文におけるeach(caseにおける === でもいいけど)は、 eachは「各要素に対して繰り返す」という共通の「意味」を持つことが、 仕様と実装(既存のクラスのeachはすべてそうなっているという意味で)で示されている。 多態というのは「実装は違うが意味は同じ」であるからこそ成立する概念だ。
一方の、__typecheck__()だが、こちらはまず第一に多態ではない。 「オブジェクトに適した動作」を選択する「オブジェクト」がないのだから。 また、「モジュールごとに適した型チェック」なるものも存在しない。 「モジュール作者が望んだ型チェック」ではあるだろうが。
また、もっと悪いことに「型チェックする」という「大まかな意図」こそ指定されているが、 それが意味するものが、
であるかは、決められておらず、逆に「好きなのを選んで」と任せてしまっている。 これでは共通の「意味」があるとは認められないだろう。
Paul Grahamの新作。川合さんによる訳。
共感を持った言葉:
実際のところ、もし16歳のシェークスピアやアインシュタインが君と同級生だったとしたら、たぶん彼らは才能を現しているだろうけれど、それ以外は君の他の友達とさほど変わらないはずだとぼくは思う。
こう考えるのは、おっかないことだ。彼らがぼくらと同じなんだとしたら、彼らはすごいことを成し遂げるためにものすごい努力をしたってことになる。そう思うのはこわいから、ぼくらは天才というものを信じたがるんだ。ぼくらが怠けている言い訳ができるからね。もし彼らが、魔法のシェークスピア属性やアインシュタイン属性のせいで素晴らしいことを成し遂げたんだとすれば、ぼくらが同じくらいすごいことをできなくてもぼくらのせいじゃないことになる。
そうなんだよ。「彼らは違う」というのは簡単だけど、実際はそんなに違わない。
今、ぼくは素晴らしい仕事をした人を何人も知っているけれど、みんな同じなんだ。自分を律するということをほとんどしない。延ばせることはぐずぐず先に延ばすし、興味のないことをやらせようとしても全くの無駄だ。そのうちの一人ときたら、自分の結婚式に出席してくれた人へのお礼の手紙をまだ半分しか出してない。結婚して4年経つのに。もう一人は、メールボックスに26000通のメールをため込んでる。
あはは。私もよく妻から「あなたって全然自制心がないのね」って言われてる。
自律心が全くのゼロだったら困るよ。走りに行こうかなと思うくらいの自律心は必要だ。ぼくも時々、走るのが面倒だなあと思うけれど、一度走り出せばあとは楽しめる。そして何日か走らないと具合が悪くなる。
そうか、「走りに行こうかなと思うくらいの自律心は必要」なのか。 体重も増加傾向だし、走ろうかなあ。
しかし、川合さんは、ばりばりプログラムも書くし、翻訳もうまいし、すごいなあ。 梅田さんも注目している。
「知られざるRuby 2.0のリリース」という話ではなくて、 Chris Pineのところに二番目の娘(Rubyちゃん)が産まれたという話。
ちなみに、Chris Pineの長男は「Cくん」だそうだ。
一昨年のOSCONに会った時、「娘が産まれたらRubyって名前にする」って言ってたけど、 本気だったらしい。
一番おかしかったフォローアップは
Congratulations to both of you!
The post was really neat and funny... thank goodness you don't program in PYTHON! ;-)
であった([ruby-talk:127818])。やっぱ、リアルで「Pythonちゃん」はマズいだろう、いくらなんでも。
ことの発端はO'Reilly ONLampのCurt Hibbsの記事であった。主にWindowsユーザを対象にRuby on RailsをMySQLのインストールからはじめて丁寧に解説する記事。
これが本家スラッシュドットに取り上げられた。
さらに、PHPとMySQLで実装されていた音楽配布サイトCD Babyが、 Ruby on RailsとPostgreSQLで再実装することを決定するニュースが。
その結果、RailsのRubyGemのダウンロードが1月21日の一日だけで935を記録。 同日、One-Click Installerのダウンロードも1499を記録した。
予想以上のインパクトだ。
4844317210 『4844317210』14章「コンテキスト」によると、Rubyには実行時スタックが「なんと七本もある」のだそうだ。
そんなにあったっけ。
ふむ、確かに七つリストされてるな。実際にはprot_tagもあるので8つだ。
この辺がRubyの実行系が複雑だと揶揄されている根源でもあるのだが、 ふと思い立って、ruby_blockをなくしてみようとやってみた。
ブロックとは本質的には引数の一部なので、引数が格納されるframeに置いてやるのがよいだろう。 ruby_frameに「struct BLOCK *block;」というメンバを追加する。
また、引数の一部であることからrb_call()やrb_call0()にblockを示す引数を追加する。 ブロックが与えられているときにはblock構造体を、ないときには0を渡すことにする。
イテレータを実現するNODE_ITERやNODE_FORを修正して、 rb_callを呼び出すときにblock構造体を渡すようにする。
ruby_blockがなくなったので、ruby_blockが現時点で有効かどうかを示すフラグである ruby_iterは不要になる。同様の理由でruby_frameのiterメンバも不要になる。
あとはそれらに付随していろいろごちゃごちゃと修正を加えると、 あら不思議ruby_blockは無くなってしまいました。 ついでにruby_iterもなくなってスタックは6本に。
スタックが少なくなって、 なんだかちょっとインタプリタがすっきりした(でもコード重複は増えちゃったけど)。
今までが100とすれば、今は99くらいかな。
パフォーマンスについても期待したんだけど、全然変わらないみたい。 まだ、make test-allが通らないんでcheck inはもう少し待ってね。
次はruby_classとruby_cbaseの統合かな。
しかし、『4844317210』って 絶版になってるの? Amazonでユーズド商品の価格が25,975円になってるんだけど。 こんなプレミア価格ってアリなの?
4840230242を購入したついでに買ってしまう。
いや、精神集中に素数計算を遅延実行すると書いてあったのに惹かれた というのが本音かもしれない。
sieve(n:ns) = n:sieve[m<-ns, m`rem`n/=0]
ってコードはHaskellだよね。前にakrさんがこの本のことに触れていたような気がするな。
でも、プログラムが出てくるのはそこだけで、 後はまあコンピュータは単なる小道具くらいかな。 登場人物の一人(女子高生)が「CとPerlならわかるけど」と発言するくらいかな、 業界人として面白かったのは。
しかし、
という設定はなかなかよろしかった。のに、ちょっと消化不良な感が。
いや、業界人が喜ぶ話は、きっと一般人には面白くもなんともないんだろうから、 ラノベとしては成功しなさそう。
ところで、二巻『4086301849』も 眺めてみたのだが、レベルは同じ程度。素材はいいと思うんだけどなあ。
この巻のタイトルであるGCには思い入れがあるぶん、辛くなってしまう。 なんだよ、「マーカー」と「リファレンサー」が 「ガーベージコレクター」が回収しないように保護するってのは。 そこは「マーカー」が「スイーパー」から保護するって言わなくちゃ。 「マーク&スイープ」を採用してるんなら。
いや、人間の記憶のGCってどうなってんのかな、正直な話。 なんか参照されてても平気で回収されてるような気がするな。
今日まで気がつかなかったのだが、 いつの間にかLinux PCから音が出なくなっている。
別にリブートもしてないから、なにかの設定がおかしいのだろうか。
まず、問題を切り分けなくてはいけない。
最近updateされたのはesoundだが、esoundなしに直接ALSAを叩いても音が出ないので、 問題はALSAモジュールのほうにあるのだろう。
典型的なトラブルはミュートがかかっていることに気がつかなかったり、 /dev/dspなどのパーミッションが間違ってたりすることだが(過去に何度も引っかかっている)、alsamixerでちゃんと設定しても音は出ない。パーミッションにも問題はなさそうだ。
問題が発生したのはDebian sidのlinux-image-2.6.18-3-686だったので、 古いカーネル2.6.17-2-686でも起動してみたが、 やっぱり鳴らない。ということは、カーネルモジュールのせいではなく、 どこかの設定のせいなのか。
しかし、ALSAの設定できるところってほとんどないんだよなあ。 で、いまだに原因が分からず音が鳴らないままなのであった。 ビープは鳴るんだけど。
どうしたもんだか。
という日記エントリを書いた1月27日早朝、改めて試してみたら鳴るようになっていた。 特に設定を変更していないのに...気持ち悪い。
だいぶ状況が分かってきた
ということらしい。さらに
ということのようだ。すべての現象の説明がつかないのが気持ち悪いが、 とりあえず基本的な状況は理解できた。 まあ、sidを使ってる宿命みたいなものか。
とりあえずflashをdowngradeする。
FirefoxからIceweaselにアップグレードしたらまた音が出なくなった(2007-02-01)。
きっかけはプラグインの検索順序が変わって、 またflashplugin-nonfree 9.0.31.0.1が使われるようになったこと。 しかし、これで一度音が出なくなると
なにをしても音が出ない(ビープは鳴る)。
だいぶ困ったあげく
で音が出るようになった。いや、他にもいろいろやったから もしかしたら別の理由があるのかもしれないけど。
LispとLispユーザがなぜS式を選択するか。 ハッカーのはしくれとして理解できないこともないが、 なんというか、見事に「普通の人」と立ち位置がずれている。 すがすがしいくらいだ。
ま、そういう態度もアリだろう。
でも、やっぱり一般受けはしないだろうなあ。 見かけはRuby(というか「普通の言語」)で、 セマンティックスはS式という「妥協」はできないものか。
できないんだろうなあ。
追記
えんどうやすゆきさんからトラックバックをいただいた
なぜ文法がRubyでなければいけないのか理解できないのですが。
というかそもそも「普通の人」って何さ。「Rubyは普通の人に優しい」と主張したいのだろうか?
いやもしかしてあの「普通のやつら」の「普通」なのか?
コメントをつけようと思ったが、反映されないみたいなので(スパムと見なされた?)、 ここにも書いておこう。
「普通の人」とは「プログラミングをする人のうち、かなりの割合」という程度の意味です。かなり多くの人々が「S式を受け入れがたい」と感じるのは観測された事実です。また、これらの人々はLisp(の外見?)よりもRuby(の外見?)の方が受け入れやすいと感じるようです。理由はまだ分かっていません。
私はS式を読み書きするのに抵抗はほとんどないので(それでもLisp Wayばりばりなプログラムは(おそらく別の理由で)読みにくいのですが)、この「普通の人」に私は含んでいません。
あのエントリの主張は、その前提を踏まえて「S式が『普通の人』にとって受け入れがたいなら、Rubyのような大衆ウケする文法を外部表現として使うのが良さそうだが、(その試みは成功したことがないので、なんらかの理由で)できないんだろうなあ」というようなものです。
けっして「文法がRubyでなければいけない」とは主張していないので、その理由を読み取ろうとしてもできないのは当然だと思います。
で、あの文章が「Rubyでなければいけない」と読まれてしまうようでは、私はまだまだ精進が足りませんね。
Lisp使いの人は、自分たちが愛する言語が
ことを認識することからはじめた方が良いと思う。余計なお世話だけど。 「普通の人」は本当にLispを知らない。
Ruby本体をハックしてアスペクト指向を実現した、という話。
こういう話は大好きだ。 実際問題として本体に取り込むかどうかは別として。
私自身はアスペクト指向についてなんともいえないモヤモヤしたものを感じている。 どうも、言語そのものが扱うべき領域を逸脱しているような。 実は(アスペクト指向の大家である)千葉滋先生には個人的に「それってどういう意味よ」とツッコまれているのだが、 しばらく考えてみるに、いまだに言語化できない。現時点ではただの直感である。
総務省中国総合通信局主催のセミナー。
IPAの田代OSSセンター長をはじめとするいろいろな方がいらっしゃって セミナーを開催していただけるとはありがたい限り。
でも、遅刻してしまった。
個人的に面白かったのは「Rubyで固い開発」の経験談であった。
Rubyで
の開発なんて、以前に誰もやったことのない未踏領域ではないだろうか、と。 興味深い。が、ただそれだけでない政治的な話までいろいろありそうだ。
夜の懇親会まで呼んでいただいた。
月曜日の梅田さんとの対談に出席された谷島さんのコラム。
私、谷島さんとは面識があると思いこんでいたのだが、 それは実はコラムを通じて「知った気になっていた」らしい。 これだから。
で、まあ、全体を通じていろいろと面白い(が、対談の内容には触れていない)コラムなのだが、 なんとも興味深かったのはここ。
まつもと氏が自然体でありながら,その難事(「自分の幸せを貪欲に追求する,つまりわがままを押し通す」こと)をやってのけているカギは,おそらく彼の信仰にある。梅田氏は1回目の対談で遠慮しつつ,その点を質問していた。自分が永遠に到達できない圧倒的な存在を信じればこそ,自立と自助が可能になる。
そうなのか。
日本には確固とした宗教を持つと公言する人が少ないこともあって、 結構ひんぱんに「Rubyの設計・開発と宗教の関連」について聞かれるが、 いつも「私にはよくわからない。けど、たぶんあまりない」と答えてがっかりされる。
関係が全くないとは断言しないが、 あると答えるもの難しい。
まず、第一に私は幼いときからクリスチャンであったため、 「クリスチャンでない自分」を想像できない。 まったく違った人生を歩んだであろうことは想像にかたくないが、 あまりにも違っていそうで、想像もつかない。
次に、いくら日本にクリスチャンが少ないといっても、 すべての宗派を合計すれば、それでも数十万人はいるはずだ(もっとかな)。 私の教会(末日聖徒イエス・キリスト教会)に限定しても 万単位でいるはず。
もし私の宗教や信仰とRubyやらオープンソースコミュニティの成功が 関係しているのだとしたら、 日本中に(あるいは世界中に)クリスチャンがリードする成功したオープンソースソフトウェアが 蔓延しているのではないか。
それはそれでうれしい世界だが、寡聞にして クリスチャンがリードした成功したオープンソースソフトウェアがたくさんあるとは 聞いていない。
私の知っている範囲内で、自分が信仰があると公言している 「有名な」オープンソースソフトウェア主要開発者は、 私とLarry Wallくらいではないかと。
LinusやStallmanは無神論者だと自称していたような気がするし。
とはいうものの、「難事をやってのけているカギ」が信仰にあるとは 今まで考えてもみなかった視点であるし、 もし本当にそれが真実であるとするならば、これほどうれしいことはない。