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
Shin-ya Koga
June 18, 2026
Technology
66
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 勉強会 #4: Zephyr で Rust を使う前に
shkoga
0
8
カーネルランド Rust 勉強会 #3: 並行処理における安全性
shkoga
1
56
Firecracker のソースを読んでみた
shkoga
1
220
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
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
220
本番に近いテストをもっと手軽に - Postmanで広がるAPIテストの世界 / Expanding the World of API Testing with Postman
yokawasa
1
250
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
310
【試作】IoT x AIエージェント
happysamurai294
0
120
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
350
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
390
Sony-DroidKaigi2026
sony
1
310
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.1k
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
170
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
3
790
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
250
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
180
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
680
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Designing for humans not robots
tammielis
254
26k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
New Earth Scene 8
popppiees
3
2.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