ゆの in Javaにみるアイデアの連鎖
ゆの in languageの始まりはゆの in Ruby - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtechとされる。これが2008年07月08日。
このわずか5日間のあいだにアイデアが連鎖して2008年07月13日時点で60個ぐらい確認されている。
自分はJava屋だから、やっぱりゆのinJavaを考えていたんだけど、演算子オーバーロードできないから無理だなぁと思っていた。なんとなく、もともとのゆのinRubyとか見ていると、その部分で呼出しをしないといけないような固定観念にとらわれていた。
09日
ゆの in Javaとかはあまり見かけないけど(後者は演算子オーバーロードできないのが痛いな)
言葉遊びがない言語なんて...
id:dankogai氏のこの言葉がJava屋の魂に火をつけた。
Ruby会議の件とか某氏がまたJavaをDISって炎上した件で*1、Javaにはわくわくするところが沢山あるとかでも書いているんだけど、Javaつまんないよねって感じの言われ方に「面白いって!」と反論したいそんな流れがなんとなくあった。
11日 02:31 ゆの in Javaができる裏技を教えて下さい...
id:t_yano氏のつぶやきが残っているけど、11日に日付が変わった時点ではゆのinJavaは存在しなかったし自分も不可能だと思っていた。やっぱり真面目にやるには構文上、/とか<をどう扱うかが難問で。なんかもうゆのinJavaを作らないことはJava屋の沽券に関わるみたいな感じになってきていた。
11日 03:30 私に出来るのはここまででした...
これに解決の糸口を与えたのはおくむらたんぶら - ゆの in Javaで、assert文を使うことで<演算子を処理しつつ、文字列をメッセージとして渡して処理をキックできるアイデアが秀逸。
11日 9:47 インチキ版
自分は一応のインチキ版を提示。ただ、これはそもそもコードに見せかけたコメントという仕掛けでWhitespace版並みのインチキぶりだった*2。
11日 12:39 知るがいい… 自重しないJavaプログラマの遊びを…!
uokumura氏の方向性をヒントにid:t_yano氏が書き上げたのがhttp://d.hatena.ne.jp/t_yano/20080711/1215747589
Thread.UncaughtExceptionHandlerを使うことでメッセージ表示の部分を完成させた。
11日 15:05 計算するだけが式じゃないぜ
それからk.inaba氏のd.y.d.も登場。こちらはクラスのフィールドを参照するタイミングでクラスがロードされ、static初期化にてメッセージ表示がキックされるという変態技法が高く評価された。
11日 16:13 変態技法 ファイナライザ
id:t_yano氏版に触発されたhttp://d.hatena.ne.jp/xaucia909/20080711/1215760385が続く。AA部分はオブジェクトのコンストラクタ呼び出しで、文字列はそのままオブジェクトに渡される点が秀逸。そしてファイナライザで文字列がコンソールに出力される。
11日 17:39 ゆの in Javaというのが流行っているようです
Sunの岡崎氏のhttp://blogs.sun.com/okazaki/entry/%E3%82%86%E3%81%AE_in_java%E3%81%A8%E3%81%84%E3%81%86%E3%81%AE%E3%81%8C%E6%B5%81%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%88%E3%81%86%E3%81%A7%E3%81%99がこれに続く。enumをループで回すという発想が斬新。
11日 22:14 <は比較演算子以外にもあるんだぜ
こういろいろとアイデアを出されると触発される。自分もインチキ版ではいかんと思ってひねり出したのがゆの in Java 真面目に考えてみた版。セリフの<を比較演算子ではなくジェネリクス型パラメータを書くときの<>とした点が工夫。
12日 02:15 「ひだまりスケッチ365」と書くのは一度だけにしたかった
日付は変わって12日。id:paulownia氏のゆの in Java - NullPointer's Blogではスタックトレースのアイデアが面白い。リフレクション版もあるのだけど、やはり固定文字列が繰り返し出現するのがウツクシクナイというのが皆の共通の価値観なのか。
13日 18:03 もうSystem.out.printlnしなくていいや
さらに日付が変わって13日。id:paulownia氏のアイデアにティンと来て書いたのがゆの in Java もうSystem.out.printlnしなくていいや
スタックトレースからメソッド名抜くぐらいだったら、せっかくthrowされるんだしそのまま例外スタックトレースを表示しちゃえばいいんじゃないの?
AA部の処理はuokumura氏のassert法のまま。でも別のクラスでラップし直すことで例外スタックトレースでメッセージを出力させることに成功。
カンブリア爆発
こうして、11日を境にカンブリア爆発のようにゆのin Javaは生まれた。このドラマを特等席でリアルタイムで見ていた自分は幸せだ。ハック遊びにいそしむプログラマの楽しそうな様がとてもよい刺激になった。
*1:もうリンクもしたくない。論理的な議論にならないんだもん。
*2:Whitespaceはネタ言語でプログラムはスペースとタブで書かれる。他の文字は全てコメント扱いとなるので、AA部分は単純に全部コメントになっちゃう。あとは単に出力処理を書けば出来上がり