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
Compile Time Mathematics in Rust
Search
White-Green
September 26, 2020
Programming
110
0
Share
Compile Time Mathematics in Rust
技育展 ぼくのさいきょうの○○ テーマで発表させていただいたときの発表資料です
White-Green
September 26, 2020
More Decks by White-Green
See All by White-Green
Chasing Real-Time Observability for CRuby
whitegreen
0
850
Remotion promotion
whitegreen
1
110
Ruby as a Frontend for Programming Language Implementations (RubyKaigi 2025 LT)
whitegreen
0
110
U-22 プログラミング・コンテスト 2021登壇資料
whitegreen
0
330
技育展2021登壇資料
whitegreen
0
67
Other Decks in Programming
See All in Programming
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
130
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
160
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.7k
【26新卒研修資料】TDD実装演習
dip_tech
PRO
0
180
Agentic Elixir
whatyouhide
0
450
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
190
Back to the roots of date
jinroq
0
790
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
770
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.2k
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
450
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
780
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
250
Featured
See All Featured
Designing for Timeless Needs
cassininazir
0
220
ラッコキーワード サービス紹介資料
rakko
1
3.3M
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Fireside Chat
paigeccino
42
3.9k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
240
Optimizing for Happiness
mojombo
378
71k
GraphQLとの向き合い方2022年版
quramy
50
15k
Making Projects Easy
brettharned
120
6.6k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Agile that works and the tools we love
rasmusluckow
331
21k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
290
Transcript
© 2020 @White_Green2525 #技育展 #RoomB Compile Time Mathematics in Rust
型レベルの静的計算と処理効率化
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
⾃⼰紹介 • 九州⼯業⼤学 情報⼯学部 B2 • C#とRustが好き • この前誕⽣⽇でした 2
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
Rustとは? • C++からの置き換えを⽬指している⾔語 • ⾼速 • インタプリタを挟まずネイティブに動く • C++と同等または若⼲遅い程度の速度で動作 • 安全 • ライフタイム,所有権等 • メモリリーク,並列処理時の競合が起こらない仕組み • C++なんか⽐較にならない程安全 3
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
Rustでできること • 組み込みシステム • Arduino等 • OS • ネイティブアプリ • WinRTはRust対応 その他にもたくさん • Webフロントエンド • WebAssemblyにコンパイルできる 対応FWもある 4
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
関連型 関連定数 5 • trait(interfaceが近い)の実装時 に、実装毎に型を指定できる (関連型) • 同様に定数も(関連定数)
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
⾯⽩いことできそうですね? 6
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
型レベルで整数加算 • A=0000,0000,0000,0000,0000,0000,0000,0010=2 • B=0000,0000,0000,0000,0000,0000,0000,0100=4 • C=A+B=6 7
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
型計算の表現⼒ • チューリング完全 • 証明) ラムダ計算が実装できた □ 8
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
応⽤:⾏列サイズをコンパイル時に決定 普通 • 可変⻑配列+⾏列サイズ 静的サイズ • 可変⻑配列のみ • 16バイト節約 9
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
主産物:型レベルで計算する利点 • ⾏列計算はサイズにより定義される場合とされない場合がある • 通常:定義されない場合panicする/無効な値を返す • 最善でも単体テストで発⾒/最悪の場合潜在的な不具合として残る • 静的:定義されない場合コンパイルエラー • 不具合発⾒にかかるコストが実質0 10
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
副産物:計算処理の⾼速化 • 同サイズの正⽅⾏列同⼠の和/積演算が⾼速化 11
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
なんで⾼速になるのか • コンパイル時の最適化に起因(詳しい⼈教えて) 12 動的サイズ 静的サイズ
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
参考資料/リンク • コンピュータの構成と設計 第5版 • ISBN:978‐4822298425, 978‐4822298432(上下巻) • ディジタル回路設計とコンピュータアーキテクチャ 第2版 • ISBN:978‐4798147529 • 型システム⼊⾨ • ISBN:978‐4274069116 • 低レベルプログラミング • ISBN:978‐4798155036 13 ぼくのさいきょうの⾏列ライブラリ https://github.com/White-Green/ct-math
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
余談①:数値の表現⽅法 • Q. 型で整数を表現するときに⼆進数でやってるけど、理由は? • A. ペアノの公理から定義する形式を最初に試したけど、それだ と型名がO(N)の⻑さに、⾜し算にO(N)、掛け算にO(N^2)の時 間がかかるのでコンパイルが⻑くなる。⼆進数使うと型名の⻑ さがO(logN)になってうれしい 14
Compile Time Mathematics in Rust © 2020 @White_Green2525 #技育展 #RoomB
余談②:⾜し算の実装 • Q. 型計算だけで⼆進数の⾜し算実装どうやるの? • A. 型計算処理でprefix加算器を書く謎なことをしていました 15