Slide 1

Slide 1 text

超絶技巧プログラミング と Ruby 3.0 Transcendental Programming with Ruby 3.0 遠藤侑介(mame) Yusuke Endoh 1

Slide 2

Slide 2 text

自己紹介:遠藤侑介 (@mametter) Introduction: Yusuke Endoh 2 • Ruby committer (account: mame) – 本を書きました → I wrote a book

Slide 3

Slide 3 text

何の本? The book theme 超絶技巧 プログラミング 3 Transcendental Programming

Slide 4

Slide 4 text

4 © 2015 Google Inc, used with permission. Google および Google ロゴは Google Inc. の登録商標であり、同社の許可を得て使用しています。

Slide 5

Slide 5 text

今日のテーマ 超絶技巧 プログラミング =世俗を超越したプログラミング 5 Transcendental Programming 実用的なプログラミング言語を使って 役に立たないプログラムを作る遊び Write a unuseful program in useful programming language

Slide 6

Slide 6 text

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)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

詳しくは書籍で 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

Slide 9

Slide 9 text

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")

Slide 10

Slide 10 text

「超絶技巧のために反対?」 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

Slide 11

Slide 11 text

実証 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

Slide 12

Slide 12 text

一番やばかったやつ 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= %(

Slide 13

Slide 13 text

チェスボード上の 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= %(

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

感想 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!

Slide 16

Slide 16 text

まとめ 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