RubyKaigi 2011 終了

参加してました。コミッタ特権でタダ飯を食らえるのも残念ながら最後です。
今まではマジタダ飯にならないように何かしら発表することを心がけてたんですが、今回はネタ準備できず、ついに聞くだけ。"1.8 and 1.9" でちょびっとだけ壇上出たけど、その分弁当もらってしまったし。申し訳ない。なのでせめて見た発表ごとの一言感想を書きました。最後に。


そして Ruby とかなり関係ない Alloy 本は、ジュンク堂出張店で販売していただき、個人的な予想をはるかに上回る人数 (予想 1 桁、結果 2 桁) に汚い字でサインさせていただきました。ありがとうございます!おまえら買ったばかりの本を汚していいのか!ちなみにサインは実行可能な Quine になっています。typo してなければ
RubyKaigi 中のコミッタの行動にプライバシーはないと思うので、サインさしあげたコミッタだけ晒すと mrkn さん、nari さん、usa さん、matz (サインした順) 。追記: と、tal さん。最初にサインした人なのに書き漏らしたー さらに追記: と、nagachika さん。失礼しました……他に忘れてる人がいたらご連絡ください X-(


去年ぼくが壇上で「(コミッタに) 大切なのは継続力」とか口走ったのが何人かの方に影響していたようで、いや、申し訳ないですね。本人は燃え尽きたとか言われてますので。
燃え尽きたというか、1.9.3 はやらないと決めていたのです。おかげで 1.9.3 も順調にずれ込んでいるようだ、くくく。


あと、matz に Array#bsearch について直談判して、基本 accept の方針をいただきました。やったぞー。
詳細な API についてちょっと議論が続いているので、興味のある人は今のうちに議論に参加お願いします。具体的には shinh さんとか


発表については、「parse.y の歩き方」は面白かったですね。聞く前は「去年と同じっぽいから聞かなくていいかな」とか思ってたけど。着眼点が本当にすばらしい。尊敬に値する。asynchronously は、ひょっとしたら冗談抜きでこの API だけで erlang や go に勝てるんじゃないかとか思った。個人的にはコミッタに推薦してもいいレベル。というか言語デザイナーになったらよいのでは
最後に言ってた ennnnd は変態的ですばらしいと思ったのでとりあえず実装しておきました。反省はしていない。

$ cat t.rb
1.times do
  1.times do
    1.times do
      puts "ok!"
    ennnd

$ ./ruby t.rb
ok!
diff --git a/parse.y b/parse.y
index aca2b6a..c17b095 100644
--- a/parse.y
+++ b/parse.y
@@ -70,6 +70,7 @@ enum lex_state_e {
     EXPR_DOT,			/* right after `.' or `::', no reserved words. */
     EXPR_CLASS,			/* immediate after `class', no here document. */
     EXPR_VALUE,			/* alike EXPR_BEG but label is disallowed. */
+    EXPR_ENNND,
     EXPR_MAX_STATE
 };
 
@@ -205,6 +206,7 @@ struct parser_params {
 
     NODE *parser_lex_strterm;
     enum lex_state_e parser_lex_state;
+    int parser_end_count;
     stack_type parser_cond_stack;
     stack_type parser_cmdarg_stack;
     int parser_class_nest;
@@ -281,6 +283,7 @@ static int parser_yyerror(struct parser_params*, const char*);
 
 #define lex_strterm		(parser->parser_lex_strterm)
 #define lex_state		(parser->parser_lex_state)
+#define end_count		(parser->parser_end_count)
 #define cond_stack		(parser->parser_cond_stack)
 #define cmdarg_stack		(parser->parser_cmdarg_stack)
 #define class_nest		(parser->parser_class_nest)
@@ -6632,6 +6635,11 @@ parser_yylex(struct parser_params *parser)
     int fallthru = FALSE;
 #endif
 
+    if (lex_state == EXPR_ENNND) {
+	if (end_count-- > 0) return keyword_end;
+	lex_state = EXPR_BEG;
+    }
+
     if (lex_strterm) {
 	int token;
 	if (nd_type(lex_strterm) == NODE_HEREDOC) {
@@ -7874,6 +7882,21 @@ parser_yylex(struct parser_params *parser)
 			return kw->id[1];
 		    }
 		}
+		else {
+		    char *p = tok();
+		    if (*p == 'e') {
+			int i = toklen() - 2;
+			p++;
+			for (; i > 0; i--) {
+			    if (*p++ != 'n') break;
+			}
+			if (i == 0 && *p == 'd') {
+			    lex_state = EXPR_ENNND;
+			    end_count = toklen() - 3;
+			    return keyword_end;
+			}
+		    }
+		}
 	    }
 
 	    if (IS_BEG() ||

追記: と思ったらすでに JRuby でも CRuby でも実装されてたわー。


以下は他の見た発表についてメモ程度ですが感想を。今までは自分が発表した後で感想を探して見るのが楽しかったので、みんな感想書いてあげるといいと思うよ。

1 日目

Next version of Ruby 1.8 and 1.9

なんか質疑で盛り上がってしまった private constant について 2 分くらい話しました。2.0 の話とかはグダグダ。仕込んどけよと思いますよね (ぉ

Ruby を利用した大規模ウェブサービスの開発・運用

Rails Rails した話もひとつくらい聞こうということで聞いてみた。でも正直よくわからず。Rails まわりは毎年ツール名とかキーワードが変わっていくので大変ですね。

Ruby 用のリアルタイムプロファイラ

笹田研研究発表とかでちょくちょく話を聞いていた内容ですが、聞くたびにツールとしての完成度が上がっているのですごいですね。

組込みシステムのための動的コンポーネント機構とVMの最適化

今回は「よく実装したなあ」とコミッタたちも感心するレベルの Ruby 改造発表が多かったのですが、その 1 つ目。省メモリ化などのために send 命令の圧縮とかしたって。すごい。
でも、こういう改造がわりと誰でも (といったら失礼だけど) できるようになったのは、YARV によって Ruby 実装が近代的に整理されたおかげなんでしょうねえ。

軽量 Ruby

Lua っぽい Ruby 別実装らしい。今の Ruby から変わり過ぎててよくわからんかった。

CRubyGC の並列世界

「よく実装したなあ」2 件目。nari さんなのでいまさら感心しないけど (ぉ

並列世界Ruby 処理系

笹田研研究発表会要約版みたいな。角谷さんばりのスピリチュアルな発表を目指したらしいけどいつものささださんだった。

闇 RubyKaigi

闇なのであえて書かない。VDD!

2 日目

安全なプログラムの作り方

起きたら 10:15 ……! ust で終わりの方だけ見た。すみません
コンソールに生 String を出力するだけで security issue になるのは、$SAFE とかで対策してあげるべき話だったりしないかなあ。

Drip: Persistent tuple space and stream.

咳さんとかまさに継続力ですよね。すごい

Writing Friendly Libraries

英語だから不真面目に聞いてたらほとんどわかってない……あとでちゃんとみる

Rubyマスターへの道

10 年かけてマスターに。ぼくは初めて Ruby さわったのが 2003 年くらいなので、まだ 2 年くらいあるなあ。しかし今から 10 年後に Ruby あるんだろうか

ThreadGroup クラスの強化とその利用法

「よく実装したなあ」3 件目。ThreadGroup とか言いながら classbox/refinement/method shelter に並ぶ新しいモジュール化機構が提案されている不思議。
事前にメーリングリストに投げられた提案 (リンク先化けてる) が大長編すぎた話題作ですが、提案の分割と、ユースケース説明の追加で通るものも (通らないものも) ありそうですね、という話をした。

JIS X 3017の読み方

噂の JIS 化の話。まだちゃんと読み通したことがない。コミッタが砕け散ったというクイズに参加したかった。


感想が手抜きになってきた……
この辺で (nari さんにサインするために (嘘)) 会場に向かう。

Method Shelters : Classboxes でも Refinements でもない別のやり方

「よく実装したなあ」4 件目。
個人的にはいいと思ったんだけど、matz はじめ反対派多数の様子。慣れな気もするんだけどなあ。
まあ、唯一わかりやすユースケースの mathn で使えるのかよくわかんなかったし、他のユースケース不在で議論しても不毛だけど。
この問題だけに 3 つも 4 つも提案手法が出てきてるので、ここらでケーススタディ発表が欲しい。

CRubyのロックデザインの解説および改善案について

去年の末頃にささださん、小崎さん、tal さん、ぼくで突発的に盛り上がっていた話題の集大成。
と言ってもぼくは Python の GIL の機構を調べただけで (それもこれとかこれとかプレゼン資料読んだだけ) 、あとの高度な議論からはわりとドロップアウトしたので、他の 3 人ががんばっていたのを茶化したり応援したりしていた。こういうシステムプログラミングできるひとたちはすごいよね。

LT

nagachika さんのトラチャン (ruby trunk changes) 統計版が期待通り面白かった。書くのに疲れてきたので他の感想は勘弁ください。

懇親会

4 年くらい行ってたのでぼちぼち知り合いもできていた、というところで RubyKaigi 終了だよ!
でも、コミッタでも油断するとすぐぼっちになるので、ぼっち対策としてコミッタになることはおすすめしません。

帰ってから IRC でイケメンコミッタは誰か、という話題になって、nagachika さんと答える人が多かったです。リアジュボーン

3 日目

parse.y の歩き方

は、上に書いたとおりで。


この辺は Alloy 本のポップ書くとかその他でちょっと奔走してて聞いてない。

テスティングフレームワークの作り方

ちょっとだけ cutter 使ったことあるよ!
あとみんな Rabbit 使うといいと思うよ (須藤さんにショッカー人形もらったので棒読み)

分散オブジェクト環境DeepConnectの新バージョンについて

ちょっとだけ fairy 使ったことあるよ! ドキュメントの typo を指摘しまくるとか嫌なことしたことも

O/R Mapper を支える技術

クエリをオブジェクトで表現するといいことあるよ、という内容。理解し間違えてなければ。
ぼくも Sequel 使ったときに同じようにいいなーと思った気がするけど、SQL も他の O/R マッパも知らないのでためになった
ところで NoSQL がもっと広まったら、SQL ベースじゃない O/R マッパが必要になるのかなあ。

LT

前日より技術よりな内容が多かった気がする。いくつかだけ

  • 浮動小数点数リテラルが無い世界」は、2.0 のタイミングで入れないといつ入るやらわからないのでがんばれ
  • MmapScanner は面白そう。よくわかんなかったけど
  • pebbles は、LT にマジになるのも我ながらどうかと思うけど反対だなあ。_ とか 1234567890_ とか作って荒らしてる身としては。名前とは別にカテゴリ属性付けてほしい。あと、カテゴリ名も伝統的な Acme でいいんじゃないかな
三題噺: 振子とPGと百年の言語

ぶっちゃけ、百年先の言語が Ruby ってことはないよねー。


書くの疲れたー