Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BrainF*ckの高速化
Search
Akira Moroo
March 04, 2018
Programming
0
550
BrainF*ckの高速化
以下の内容の解説です.
https://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-1-an-interpreter/
Akira Moroo
March 04, 2018
Tweet
Share
More Decks by Akira Moroo
See All by Akira Moroo
Exploring x86 MSR Space
retrage
0
680
LLMでバイナリ解析支援
retrage
0
81
GitHub ActionsでDevSecOpsごっこ
retrage
0
15
Practical Rust (Hypervisor) Firmware
retrage
3
1.3k
Bypassing UEFI Secure Boot with Thin-Hypervisor
retrage
0
930
Porting Linux to Nabla Containers
retrage
0
990
Network Boot from Bell Labs
retrage
2
1.3k
Unikernelで始める自作OS/OS Development with Unikernel
retrage
0
410
LLVM Backend Development for EFI Byte Code
retrage
2
670
Other Decks in Programming
See All in Programming
WasmOS: Wasmを実行する自作Microkernel
riru
0
370
自作ソフト(VMagicMirror)がVRMA対応してる話+実装のTips
bakudreameater
0
110
「コンパイル時のユニットテスト」導入するとユニットテストを 書かなくてよくなるのか?
tomohisa
9
2.2k
ここ1~2年くらいで 使えるようになった(主要ブラウザーの最新版 がすべて対応した ) ウェブの新機能について ランダムに喋る!
myzkyy
9
6.5k
DocC Tutorial と TCA におけるテスト機能の紹介
kalupas226
1
330
決断するための勇気、そのためのBacklog / Courage to make decisions, Backlog for that.
seike460
PRO
4
1.9k
DDDはなぜ難しいのか / 良いコードの定義と設計能力の壁
pospome
24
7.3k
設計の知識と技能で駆動するソフトウェア開発
masuda220
PRO
18
11k
チームでモデリングを育てるうえで 考えたこと・気づいたこと / Cultivating Modeling in Teams: Thoughts and Insights
mackey0225
5
2.3k
品質が高いコードって何?Rev2.1
ickx
1
490
ONE WEDGE_Company_Information
1wedge
0
170
AppDeveloperCon 2024 EU: Building polyglot developer experiences in 2024
salaboy
0
380
Featured
See All Featured
It's Worth the Effort
3n
180
27k
The Cult of Friendly URLs
andyhume
73
5.6k
Designing Experiences People Love
moore
135
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
67
38k
The Mythical Team-Month
searls
214
42k
How GitHub Uses GitHub to Build GitHub
holman
467
290k
Done Done
chrislema
178
15k
In The Pink: A Labor of Love
frogandcode
137
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
28
5.9k
GitHub's CSS Performance
jonrohan
1023
450k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
8
8.2k
Docker and Python
trallard
33
2.6k
Transcript
BrainF*ckの高速化 2018/03/04 Dentoo.LT 19 @retrage
BrainF*ck? • BrainFuck (BF) • いわゆる難解プログラミング言語 • ><+-.,[]の8個の命令から成る • 言語処理系入門に最適
1
愚直なBF処理系は遅い • [と]は条件付きジャンプ命令 • [はポインタの指す値が0ならば次の]までジャンプ • ]はポインタの指す値が0でないならば次の[までジャン プ • 愚直なBF処理系では間にある命令は実行されな
いにも関わらず読み出される • ⇒初期化時にあらかじめJumpTableを作成しておく 2
ホットスポットを探す • 命令の実行には局所性がある • 一部の命令は大量に実行されるが,他の命令はあまり 実行されない • 例: データポインタを7デクリメント •
BF: <<<<<<< • C: dataptr -= 7; • ⇒ホットスポットに対応するBFより高水準な命令を 追加,初期化時にBFをこれらの命令に変換,実行 3
ループの最適化 • [と]のループには使われるパターンが存在 • 例: 現在のメモリを0にセット • C: data[data_ptr] =
0; • BF: [-] • 一見短いが,0になるまでループされる • ⇒ループパターンを表現する高水準な命令を追加 4
まとめ • BrainF*ckは実装しやすい言語処理系 • JumpTableで高速化 • 高水準な命令へ変換することで高速化 • ループのパターンを高水準な命令へ変換 •
Rustでの実装 • https://github.com/retrage/brainfuck-rs 5
参考文献 • https://ja.wikipedia.org/wiki/Brainfuck • https://eli.thegreenplace.net/2017/adventures-in- jit-compilation-part-1-an-interpreter/ • https://postd.cc/adventures-in-jit-compilation-part- 1-an-interpreter/ •
https://github.com/retrage/brainfuck-rs 6