ずっと君のターン

2012-01-01 まだ分からん

闇ましておめでとうござます

| 00:35 |  闇ましておめでとうござます - ずっと君のターン を含むブックマーク

闇Rubyという頓狂な単語を目にして以来、ずっと考えていました。

「闇Rubyという名にふさわしいオレオレRubyとはどういうものだろうか」

そしてこの疑問は必然的に次の疑問に至ります。

「闇とは何か」

闇とは何か、そして光とは。答えを求めて闇ルビヰ會議2011特設サイト聖飢魔II歌詞一覧地獄のミサワなどを渡り歩き、ついに私は辿りつきました。

これが、闇Rubyです。

f:id:technohippy:20111230114932p:image:w80:right

刻々と侵蝕していく class の中で産み落された Ring が今宵祝福の
音色を奏でよう 見よ def こそは黄昏破る gospel なり もはや煉獄
の狗頭は puts せり!楽園こぞりていざや "謹賀" いざや "新年!" 
いざや聖唱 end よ end よ 誉れ高き主よ!
蒼き Ring. が new. を告げる gospel の中で紡がれた聖域を決して
乱さぬよう願い給わん

(あけましておめでとうございます!本年も宜しくお願いします)


そしてこれが、闇実行結果です。

$ ./ruby -Ilib -I. yami.rb
謹賀新年!
$ 

闇Rubyの作り方

| 00:35 |  闇Rubyの作り方 - ずっと君のターン を含むブックマーク

これが私の得た答え、闇patchです。

*** ruby-1.9.3-p0/parse.y       2011-09-24 14:21:19.000000000 +0900
--- yami_ruby/parse.y   2011-12-29 18:09:22.000000000 +0900
***************
*** 6661,6673 ****
      command_start = FALSE;
    retry:
      last_state = lex_state;
!     switch (c = nextc()) {
!       case '\0':              /* NUL */
!       case '\004':            /* ^D */
!       case '\032':            /* ^Z */
!       case -1:                        /* end of script. */
        return 0;
  
        /* white spaces */
        case ' ': case '\t': case '\f': case '\r':
        case '\13': /* '\v' */
--- 6661,6677 ----
      command_start = FALSE;
    retry:
      last_state = lex_state;
! 
!     c = nextc();
!     if (c == -1 || c == '\0' || c == '\004' || c == '\032') {
        return 0;
+     }
+     else if (!ISASCII(c)) {
+       parser_set_encode(parser, "utf-8");
+       goto retry;
+     } 
  
+     switch (c) {
        /* white spaces */
        case ' ': case '\t': case '\f': case '\r':
        case '\13': /* '\v' */

そう、「闇」とは「過度な修飾と持って回った言い回し」のことに他なりません。

闇Rubyでは地の文の非ASCII文字が全て無視されますので、過度な修飾と持って回った言い回しであなたのコードを好きなだけ闇ることができます。

本年もよろしくお願いします。