Upgrade to Pro — share decks privately, control downloads, hide ads and more …

超絶技巧プログラミングと Ruby 3.0

超絶技巧プログラミングと Ruby 3.0

大江戸 Ruby 会議 05 コミッタ LT

http://regional.rubykaigi.org/oedo05/

Yusuke Endoh

November 08, 2015
Tweet

More Decks by Yusuke Endoh

Other Decks in Programming

Transcript

  1. 4 © 2015 Google Inc, used with permission. Google および

    Google ロゴは Google Inc. の登録商標であり、同社の許可を得て使用しています。
  2. 1-1-4節 般若心経 Quine (Buddhist Sutra Quine) 6 eval$_=s=%q(~/<(.)>/;[$1]==$*&&(s[x=$`.size]=s[x+2]=?¥s;x>728&&x=( ' '

    ' 波 多 一 大 提 波 倒 礙 提 集 明 眼 眼 不 諸 是 色 照<観> 摩 ' ' 羅 呪 切 明 故 羅 夢 無 薩 滅 尽 界 耳 減 法 色 不 見 自 訶 ' ' 僧 即 苦 呪 知 蜜 想 罣 埵 道 乃 乃 鼻 是 空 受 異 五 在 般 ' ' 羯 説 真 是 般 多 究 礙 依 無 至 至 舌 故 相 想 空 蘊 菩 若 ' ' 諦 呪 実 無 若 故 竟 故 般 智 無 無 身 空 不 行 空 皆 薩 波 ' ' 菩 曰 不 上 波 得 涅 無 若 亦 老 意 意 中 生 識 不 空 行 羅 ' ' 提 羯 虚 呪 羅 阿 槃 有 波 無 死 識 無 無 不 亦 異 度 深 蜜 ' ' 薩 諦 故 是 蜜 耨 三 恐 羅 得 亦 界 色 色 滅 復 色 一 般 多 ' ' 婆 羯 説 無 多 多 世 怖 蜜 以 無 無 声 無 不 如 色 切 若 心 ' ' 訶 諦 般 等 是 羅 諸 遠 多 無 老 無 香 受 垢 是 即 苦 波 経 ' ' 般 波 若 等 大 三 仏 離 故 所 死 明 味 想 不 舎 是 厄 羅 ' ' 若 羅 波 呪 神 藐 依 一 心 得 尽 亦 触 行 浄 利 空 舎 蜜 ' ' 心 羯 羅 能 呪 三 般 切 無 故 無 無 法 識 不 子 空 利 多 ' ' 経 諦 蜜 除 是 菩 若 顛 罣 菩 苦 無 無 無 増 是 即 子 時 ' ' ' x-660);x+=x<76?85:47;s[x]=?<;s[x+2]=?>);puts"eval$_=s=%q(#$_)"#YE)
  3. 1-7-4節 記念碑 Quine (Monumental Quine) 円柱 Column 3D モデルデータ 3D

    model data Ruby program https://www.shapeways.com/shops/mametter Available for just $198 Ruby実行 execution 3Dプリント 3D print
  4. 詳しくは書籍で See the book 8 • こんなプログラムばかり 約 40 個ほど載ってます

    includes 40 programs like these – ほぼRuby、一部C言語 written in Ruby (and C) – 実装技法の解説も implementation techniques are also disclosed – Matzによる前書きも必見 preface by matz
  5. Ruby 3.0 と超絶技巧プログラミング Ruby 3.0 and transcendental programming • Immutable

    string literal [Feature #11473] – Ruby 3.0では文字列リテラルを破壊的に変更できなくなる In Ruby 3.0, all string literals are frozen by default – 導入理由:高速化などなど (for performance improvement) • 個人的にはネガティブ (I’m against this change) – Ruby には何事も「動的」であってほしい I hope Ruby is always dynamic, as far as possible 9 ""<<32 s="foobar" s.gsub!("ob", "OB")
  6. 「超絶技巧のために反対?」 No ”Are you against the change because of TP?”

     No! • 超絶技巧プログラミングは言語仕様の枠と戦う遊び We enjoy TP within the language spec – 言語が変わるならそれに合わせて遊ぶだけ If the language changes, we change how to enjoy • ていうか対応は難しくない(はず) Or rather, we also enjoy immutable string literals! 10 ""<<32 ""*1<<32 32.chr "".dup<<32
  7. 実証 Proof • 本に掲載されている全プログラムを immutable string literal 対応してみた I’ve made

    all programs in the book ready for immutable string literals 11 http://github.com/mame/trance-book/tree/ruby-3.0
  8. 一番やばかったやつ Worst case 12 ); s[ 8] =s $> <<

    s[ 0, 17 << 3] #C Y. En do h! ); s[ 8] =s $> << s[ 0, 17 << 3] #C s= %( s= %(
  9. チェスボード上の Quine Quine on the chessboard 13 ); s[ 8]

    =s $> << s[ 0, 17 << 3] #C Y. En do h! ); s[ 8] =s $> << s[ 0, 17 << 3] #C s= %( s= %(
  10.  全作り直しで対応  Overhauled! 14 ); $> << s[ 0,

    +8 ]+ s+ s[ 9, 47 ]# Y. En do h! ); $> << s[ 0, +8 ]+ s+ s[ 9, 47 ]# s= %( s= %(
  11. 感想 Discussion • 思ったよりは大変でした It was harder than I expected

    – 問題個所を見つけにくい very hard to find the cause – レイアウトを手動で再調整した needed to rearrange the layout – 別の Ruby のバグに遭遇した [Bug #11594] encountered unrelated Ruby bug  15 とても優雅な時間を過ごせました I enjoyed the change!
  12. まとめ Conclusion • 自著を紹介しました I introduced my book – 技術評論社から発売中

    gihyo.jp – 2,680円+税 ¥2,680 + tax • Ruby 3.0 でも 遊べます(予定) you can enjoy the book in 3.0 – 安心して お買い上げください Don’t hesitate to buy it! 16