超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

16
超絶技巧プログラミング Ruby 3.0 Transcendental Programming with Ruby 3.0 遠藤侑介(mameYusuke Endoh 1

Transcript of 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

Page 1: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Transcendental Programmingwith Ruby 3.0

遠藤侑介(mame)Yusuke Endoh

1

Page 2: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

自己紹介:遠藤侑介 (@mametter)Introduction: Yusuke Endoh

2

• Ruby committer

(account: mame)

– 本を書きました→I wrote a book

Page 3: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

何の本?The book theme

超絶技巧 プログラミング

3

Transcendental Programming

Page 4: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

4

© 2015 Google Inc, used with permission.

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

Page 5: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

今日のテーマ

超絶技巧 プログラミング

=世俗を超越したプログラミング

5

Transcendental Programming

実用的なプログラミング言語を使って役に立たないプログラムを作る遊びWrite a unuseful program in useful programming language

Page 6: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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)

Page 7: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

1-7-4節 記念碑 Quine (Monumental Quine)

円柱 Column3Dモデルデータ

3D model data

Ruby program https://www.shapeways.com/shops/mametter

Available for just $198

Ruby実行execution

3Dプリント3D print

Page 8: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 9: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 10: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 11: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 12: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 13: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 14: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

全作り直しで対応 Overhauled!

14

); $> << s[

0, +8 ]+ s+

s[ 9, 47 ]#

Y. En do h!

); $> << s[

0, +8 ]+ s+

s[ 9, 47 ]#

s= %( s= %(

Page 15: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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

Page 16: 超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)

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