というわけで東京に帰ってきました。 まつもとさん・前田さんはじめ NaCl のみなさんに大変にお世話になりました。 ありがとうございました。
で、こっから昨日の話。
また子供自慢大会だった。
net/http の NTLM 対応パッチ改訂版が来たのでコミットしてしまおうと作業を始める。 しかし、真面目に見るとけっこう問題があって泣けた。 raise するときは例外クラス書いてくれよ (とかなんとかいろいろやってたのでまだコミットしてない)。
今度はちゃんとピザを 6 つに切った。
まつもとさん一家勢揃いでえらく大層なお見送りであった。
バスの中でもまだ Ruby 話は続く。 キーワード引数の穴はないのか、OSS ラボの議論の続きをやる。 俺の考えた範囲では、
def kwm(x = nil, k:) end kwm(k:1)
というときに x = {:k=>1}, k = nil になってしまうのが直感的でないと感じた。 でもこれを特別扱いしてしまうと互換性は保てないし一貫性もなくなるので、 (1.9 でキーワード引数を導入したとして) k = 1 にするのはむずかしいな。
それと関連して、「引数として明示的にデフォルト値を渡す」 という構文があるといいのかなあと思った。 例えば次のようなメソッドがある場合、
def m(a = 77) end
m() と呼ぶと a = 77 になるが、明示的に引数を渡して m(xxx) と書いても a = 77 にできるような xxx が欲しい。 いまはデフォルト値を直接書かないとその値にはできない。
飛行機の中でもまだ Ruby 話は続く。 マルチ VM の使い道を考える。 デバッガを作るってのは我ながらいい案だと思った。
ゴルフ専用 Ruby、ごるびー。 デフォルトで -a などの便利オプションがオン、 重要ライブラリは全部 require 済 (g.rb を含む)、 g.rb によるメソッド補完呼び出しを有効にするため putc などの邪魔なメソッドはすべて undef、 -eruby オプションで eruby スタイルの出力、 ソースコードが 7 ビットクリーンなときは -7 オプションで 7 ビット列にパックできる。 gruby -eruby -7 だと Hello, World は 12B に縮むのでPHP に勝てる。 という与太話を浜松町の飲み屋で繰り広げた。 gruby 禁止のレギュレーションが即座に設けられるであろうことは確実。
そんなこんなの 4 日間でありました。 全体を通した感想としては、 やっぱ直接対面しての開発は非常に話が早くて楽。 まつもとさんが parse.y いじってコミットしたあとに ripper をすぐに追従できる、とか。 それから、今回は飲み会ネタがけっこう使えそうなのが多かったかな。 キーワード代入とか。
(23:36)
キーワード代入についてちゃんと書いたっけ?
文法は諸説あるんだけども、例えば、
(k1:, k2:) = {:k1 => 5, :k2 => 6} p k1 # => 5 p k2 # => 6
という感じ。 これをメソッドの仮引数リストでやれば、
def m(k1:, k2:) p k1 # => 5 p k2 # => 6 end m k1:5, k2:6
となる (ただし、特殊な場合を特別扱いすることで括弧を減らしてある)。
よーするにハッシュのパターンマッチだよな。 これまで多重代入ではスカラと配列だけが扱えたわけだけども、 これをキーがシンボルの Hash にも広げようってことだ。
この方法は、現在の Hash を明示的に使う方法との互換性が非常に高い。
(00:25)
うーん、make test-all が 23 日から変になってるなあ。 なぜか「Fixnum#+ がない」というエラーが出ている。 ちょうど Fixnum#+ を一時的に undef するテストを入れたんだけど、 もしかして俺のせいかな。
でもそれだったらどのプラットフォームでも同じエラーになるはずだよな。 昨日は make test-all が通ってたような気がするのだが、 なんで手元の環境だと止まらないんだろ。
(00:33)
なんかさ、「俺のパッチが 8 ヶ月放置されてんぞゴルァ」 っていう英語のメールが来たんだよ。Ruby/OpenSSL のだけどね。 これってゆうぞうさんにフォワードすればよいのかな?
(01:08)
そういえば、結局 yarvtest 以下を 完全に置き換えるまでいかなかったんだよな。 最初は test/ruby にもってく方針だったけど、 今後は bootstraptest に持ってくことになるかな。 あるいは bootstraptest のほうは簡略化したテストを置き、 test/ruby のほうに網羅的なテストを置いてもいいな。
(02:00)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.