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
Goでデータパイプラインを作ろう
sansantech
PRO
1
460
サイバー捜査員研修(前半)
nomizone
1
2k
Sets in Go
ramalho
1
770
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
120
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
6
1.5k
LanceDB入門
mocobeta
8
540
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
130
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
120
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
300
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
210
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
290
My broken English still works: speaking at global OSS events
naruoga
0
100
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
530
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Designing for Performance
lara
611
70k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
A Tale of Four Properties
chriscoyier
163
24k
Technical Leadership for Architectural Decision Making
baasie
3
480
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
The World Runs on Bad Software
bkeepers
PRO
72
12k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Building a Scalable Design System with Sketch
lauravandoore
463
34k
GraphQLとの向き合い方2022年版
quramy
50
15k
RailsConf 2023
tenderlove
30
1.5k
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