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
カーネルランド Rust 勉強会 #2; Rust の unsafe
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Shin-ya Koga
June 18, 2026
Technology
64
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
カーネルランド Rust 勉強会 #2; Rust の unsafe
5/28 に開催した「カーネルランド Rust 勉強会 #2」で使ったスライドに加筆したもの。Rust の unsafe の説明と、形式的検証の取組を紹介しました。
Shin-ya Koga
June 18, 2026
More Decks by Shin-ya Koga
See All by Shin-ya Koga
カーネルランド Rust 勉強会 #3: 並行処理における安全性
shkoga
1
55
Firecracker のソースを読んでみた
shkoga
1
210
2025-02-18.slide_revised
shkoga
0
130
2024-09-27 リファクタリング勉強会
shkoga
0
120
仮想化って何だろう
shkoga
0
240
Other Decks in Technology
See All in Technology
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
860
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.4k
変化の早いClaude Codeを 書籍に落とし込む
oikon48
7
1.4k
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
300
TypeScript入門 2026
recruitengineers
PRO
3
590
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
210
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
790
AI-DLC実践録_フルサイクル開発への挑戦
miyuc
0
110
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
300
JavaScript 研修 (2026)
recruitengineers
PRO
2
560
My broken English still works: speaking at global OSS events
naruoga
0
100
ホームラボ紹介
y_sera15
0
180
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
480
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
610
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
490
The Cult of Friendly URLs
andyhume
79
7k
Making the Leap to Tech Lead
cromwellryan
135
10k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
960
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
カーネルランド Rust 勉強会 #2 古賀信哉 株式会社アットマークテクノ
今日のネタ Rust の安全性と unsafe contract と仕様駆動開発 Rust と形式的検証 (formal verification)
Rust の安全性と unsafe カーネルランドでは避けられない unsafe Rust の安全性とは何か unsafe は、どのように安全じゃないのか Rust
の言語仕様が提供する仕組み 静的型付けによる静的検査 メモリ操作の制約(GC 無しのメモリ管理)
Rust の安全性と unsafe メモリ操作の制約(GC 無しのメモリ管理) mutable な大域変数のアクセスを禁止 ポインタの間接参照(逆参照)を禁止 値(メモリ領域)の所有者とスコープ 値(メモリ領域)の参照とスコープ
Rust の安全性と unsafe メモリ操作の制約(GC 無しのメモリ管理) mutable な大域変数のアクセスを禁止 ポインタの間接参照(逆参照)を禁止 値(メモリ領域)の所有者とスコープ 値(メモリ領域)の参照とスコープ
複数スレッド間のデータアクセス 競合問題を排除
Rust の安全性と unsafe メモリ操作の制約(GC 無しのメモリ管理) mutable な大域変数のアクセスを禁止 ポインタの間接参照(逆参照)を禁止 値(メモリ領域)の所有者とスコープ 値(メモリ領域)の参照とスコープ
ポインタ型の値を作ることはできる: ・値の参照からポインタ値を作る ・ポインタ変数に数値を代入する しかし、ポインタの逆参照は禁止。
Rust の安全性と unsafe 値(メモリ領域)のスコープと所有者 構文スコープによる値の生存スコープ 単一の所有者と、代入による所有先の移動 明示的な参照カウンタ型 基本型に対するコピーのセマンティクス Copy trait:
コピーセマンティクスの宣言
Rust の安全性と unsafe 値(メモリ領域)の参照とスコープ 参照の生存期間と値の生存期間 共有参照と変更可能な参照 (shared, mutable) 参照の借用 (borrow)
関数の入出力引数 変更参照のエイリアスを禁止 ・同じ値に対する参照と変更可能な参照 ・同じ値に対する複数の変更参照
Rust の安全性と unsafe unsafe だと許されること ポインタの逆参照 mutable な大域変数のアクセス unsafe な関数の呼び出し
unsafe な trait の実装 カーネルランドでは必須! 標準ライブラリ内部でも必要
Rust の安全性と unsafe Rust の unsafe の考え方(C# と比較) C#(の現在の)仕様 ⚫
unsafe な executable は全て unsafe Rust の仕様 ⚫ unsafe を safe なコードが内包できる! モジュールの public でない部分のみ unsafe に推奨される作法: ・contract の記述(事前条件、事後条件) C++ における例外仕様に通じる? C# の新仕様でも
Rust の安全性と unsafe Rust に導入されつつある contract 関数の属性/アノテーションとして記述 requires, ensures, invariant
⚫ 関数の仕様記述としての contract contract の情報を利用して、呼出し側と 呼び出される側の正しさをそれぞれ検証 できればベスト。 標準ライブラリの実装に対する検証の活動(後述)
contract と仕様駆動開発 AI 支援 SDD のテクニカルペーパー https://arxiv.org/html/2602.00180v1#S6 仕様としての contract ⚫
API 仕様化ツール (OpenAPI) ⚫ BDD (Behavior Driven Dev.) のシナリオ ⚫ ユースケース記述(事前条件、事後条件) 曖昧さのない、必要最小限の仕様: 生成 AI に、明確な context で指示することにより、 出力されるコードの精度が上がる。 ←間違いを最大50%削減できるという研究結果あり。
Rust と形式的検証 Rust Foundation によるinitiative 標準ライブラリの検証 検証ツールの導入 ⚫ Kani ⚫
GOTO-Transcoder ⚫ ESBMC model checker ⚫ VeriFast ⚫ Flux
Rust と形式的検証 Rust Foundation によるinitiative 標準ライブラリの検証 検証ツールの導入 ⚫ Kani ⚫
GOTO-Transcoder ⚫ ESBMC model checker ⚫ VeriFast ⚫ Flux https://model-checking.github.io/verify- rust-std/intro.html https://github.com/model-checking/verify- rust-std unsafe なコードに対する 検証
Rust と形式的検証 Rust Foundation によるinitiative 標準ライブラリの検証 検証ツールの導入 ⚫ Kani ⚫
GOTO-Transcoder ⚫ ESBMC model checker ⚫ VeriFast ⚫ Flux https://github.com/model-checking/kani https://github.com/esbmc/goto- transcoder/blob/main/docs/Architecture.md https://github.com/esbmc/esbmc https://github.com/verifast/verifas https://flux-rs.github.io/flux/
Rust と形式的検証 その他の形式的検証ツール Creusot ⚫ Coma(中間検証言語) ⚫ Why3(演繹的な検証器) rocq-of-rust ⚫
Rocq(以前の Coq)を利用 ⚫ Rust の型付き中間言語から Rocq に変換 ⚫ その後は手作業を交えて(?)検証 https://github.com/creusot-rs/creusot https://coma.paulpatault.fr/ https://why3.org/ https://github.com/formal-land/rocq-of-rust