SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
超絶技巧プログラミング
と Ruby 3.0
Transcendental Programming
with Ruby 3.0
遠藤侑介(mame)
Yusuke Endoh
1
自己紹介:遠藤侑介 (@mametter)
Introduction: Yusuke Endoh
2
• Ruby committer
(account: mame)
– 本を書きました →
I wrote a book
何の本?
The book theme
超絶技巧 プログラミング
3
Transcendental Programming
4
© 2015 Google Inc, used with permission.
Google および Google ロゴは Google Inc. の登録商標であり、同社の許可を得て使用しています。
今日のテーマ
超絶技巧 プログラミング
=世俗を超越したプログラミング
5
Transcendental Programming
実用的なプログラミング言語を使って
役に立たないプログラムを作る遊び
Write a unuseful program in useful programming language
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)
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
詳しくは書籍で
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
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")
「超絶技巧のために反対?」 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
実証 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
一番やばかったやつ
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= %(
チェスボード上の 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= %(
 全作り直しで対応
 Overhauled!
14
); $> << s[
0, +8 ]+ s+
s[ 9, 47 ]#
Y. En do h!
); $> << s[
0, +8 ]+ s+
s[ 9, 47 ]#
s= %( s= %(
感想
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!
まとめ
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

Contenu connexe

Tendances

PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門Hironori Sekine
 
Imprementation of realtime_networkgame
Imprementation of realtime_networkgameImprementation of realtime_networkgame
Imprementation of realtime_networkgameSatoshi Yamafuji
 
メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012cfm_art
 
SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)Isaac Mathis
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画Kazufumi Ohkawa
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」Takayuki Fukumoto
 
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみたShuntaro Saiba
 
インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由axsh co., LTD.
 
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!Akira Ouchi
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
SwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみるSwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみるYuya Oka
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作りHidemi Kawai
 
簡単に楽しくはじめよう!Raspberry Pi入門
簡単に楽しくはじめよう!Raspberry Pi入門簡単に楽しくはじめよう!Raspberry Pi入門
簡単に楽しくはじめよう!Raspberry Pi入門Akira Ouchi
 
Chat opsをはじめよう!
Chat opsをはじめよう!Chat opsをはじめよう!
Chat opsをはじめよう!dcubeio
 
初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for GoTerui Masashi
 

Tendances (20)

PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
 
Imprementation of realtime_networkgame
Imprementation of realtime_networkgameImprementation of realtime_networkgame
Imprementation of realtime_networkgame
 
メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012
 
SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」
 
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
 
apasec001-kawai
apasec001-kawaiapasec001-kawai
apasec001-kawai
 
インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由
 
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
 
jubabanditの紹介
jubabanditの紹介jubabanditの紹介
jubabanditの紹介
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演)  #UE4DDUE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演)  #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
 
SwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみるSwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみる
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
 
簡単に楽しくはじめよう!Raspberry Pi入門
簡単に楽しくはじめよう!Raspberry Pi入門簡単に楽しくはじめよう!Raspberry Pi入門
簡単に楽しくはじめよう!Raspberry Pi入門
 
Chat opsをはじめよう!
Chat opsをはじめよう!Chat opsをはじめよう!
Chat opsをはじめよう!
 
初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go
 

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

おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニングMunenori Sugimura
 
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)Webpla LLC.
 
開発チームにローカライズ支援職を置くと…
開発チームにローカライズ支援職を置くと…開発チームにローカライズ支援職を置くと…
開発チームにローカライズ支援職を置くと…Self Employed
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンNagi Teramo
 
Deep Learningと自然言語処理
Deep Learningと自然言語処理Deep Learningと自然言語処理
Deep Learningと自然言語処理Preferred Networks
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」nishikawa_makoto7
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2Takuya Nishimoto
 
アトリエ秋葉原 Choregraphe WS#3
アトリエ秋葉原 Choregraphe WS#3アトリエ秋葉原 Choregraphe WS#3
アトリエ秋葉原 Choregraphe WS#3Atelier Akihabara
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッションantibayesian 俺がS式だ
 
Interop2017
Interop2017Interop2017
Interop2017tak9029
 
Perl で自然言語処理
Perl で自然言語処理Perl で自然言語処理
Perl で自然言語処理Toshinori Sato
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由Kohei Taniguchi
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜Eric Sartre
 
Go で Unit Test をやってみた
Go で Unit Test をやってみたGo で Unit Test をやってみた
Go で Unit Test をやってみたMasahiro Yanou
 
gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarbgemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarbGo Sueyoshi (a.k.a sue445)
 

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

おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
 
開発チームにローカライズ支援職を置くと…
開発チームにローカライズ支援職を置くと…開発チームにローカライズ支援職を置くと…
開発チームにローカライズ支援職を置くと…
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
 
Deep Learningと自然言語処理
Deep Learningと自然言語処理Deep Learningと自然言語処理
Deep Learningと自然言語処理
 
Jacet2014ykondo_final
Jacet2014ykondo_finalJacet2014ykondo_final
Jacet2014ykondo_final
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
 
アトリエ秋葉原 Choregraphe WS#3
アトリエ秋葉原 Choregraphe WS#3アトリエ秋葉原 Choregraphe WS#3
アトリエ秋葉原 Choregraphe WS#3
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション
 
Interop2017
Interop2017Interop2017
Interop2017
 
Perl で自然言語処理
Perl で自然言語処理Perl で自然言語処理
Perl で自然言語処理
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜
 
大規模発話ログデータを活用した音声対話処理
大規模発話ログデータを活用した音声対話処理大規模発話ログデータを活用した音声対話処理
大規模発話ログデータを活用した音声対話処理
 
Go で Unit Test をやってみた
Go で Unit Test をやってみたGo で Unit Test をやってみた
Go で Unit Test をやってみた
 
gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarbgemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarb
 

Plus de mametter

error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticserror_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticsmametter
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Resultsmametter
 
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料mametter
 
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfmametter
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotationsmametter
 
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画mametter
 
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3mametter
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析mametter
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってますmametter
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介mametter
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3mametter
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Typesmametter
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画mametter
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understandingmametter
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能mametter
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Rubymametter
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpretermametter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるmametter
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 resultsmametter
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesmametter
 

Plus de mametter (20)

error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticserror_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnostics
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Results
 
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
 
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
 
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画
 
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Ruby
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 results
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
 

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

  • 1. 超絶技巧プログラミング と Ruby 3.0 Transcendental Programming with Ruby 3.0 遠藤侑介(mame) Yusuke Endoh 1
  • 2. 自己紹介:遠藤侑介 (@mametter) Introduction: Yusuke Endoh 2 • Ruby committer (account: mame) – 本を書きました → I wrote a book
  • 3. 何の本? The book theme 超絶技巧 プログラミング 3 Transcendental Programming
  • 4. 4 © 2015 Google Inc, used with permission. Google および Google ロゴは Google Inc. の登録商標であり、同社の許可を得て使用しています。
  • 6. 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)
  • 7. 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
  • 8. 詳しくは書籍で 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
  • 9. 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")
  • 10. 「超絶技巧のために反対?」 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
  • 11. 実証 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
  • 12. 一番やばかったやつ 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= %(
  • 13. チェスボード上の 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= %(
  • 14.  全作り直しで対応  Overhauled! 14 ); $> << s[ 0, +8 ]+ s+ s[ 9, 47 ]# Y. En do h! ); $> << s[ 0, +8 ]+ s+ s[ 9, 47 ]# s= %( s= %(
  • 15. 感想 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!
  • 16. まとめ 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