Comprehensive Rust 🦀 へようこそ
1.
講座の運営について
❱
1.1.
講座の構成
1.2.
キーボード ショートカット
1.3.
翻訳
2.
Cargoの使用
❱
2.1.
Rust エコシステム
2.2.
コードサンプル
2.3.
ローカル環境での実行
Day 1: AM
3.
ようこそ
4.
Hello, World
❱
4.1.
Rustとは?
4.2.
Rustのメリット
4.3.
プレイグラウンド
5.
型と値
❱
5.1.
Hello, World
5.2.
変数
5.3.
値
5.4.
算術
5.5.
型推論
5.6.
演習: フィボナッチ
❱
5.6.1.
解答
6.
制御フローの基本
❱
6.1.
if 式
6.2.
ループ
❱
6.2.1.
for
6.2.2.
loop
6.3.
break と continue
❱
6.3.1.
Labels
6.4.
ブロックとスコープ
❱
6.4.1.
スコープとシャドーイング
6.5.
関数
6.6.
マクロ
6.7.
演習: コラッツ数列
❱
6.7.1.
解答
Day 1: PM
7.
ようこそ
8.
タプルと配列
❱
8.1.
配列
8.2.
タプル
8.3.
配列のイテレート
8.4.
パターンとデストラクト
8.5.
演習: ネストされた配列
❱
8.5.1.
解答
9.
参照
❱
9.1.
共有参照
9.2.
排他参照
9.3.
Slices
9.4.
文字列
9.5.
演習: ジオメトリ
❱
9.5.1.
解答
10.
ユーザー定義型
❱
10.1.
名前付き構造体
10.2.
タプル構造体
10.3.
列挙型(enums)
10.4.
定数
10.5.
静的
10.6.
型エイリアス
10.7.
演習: エレベーターでのイベント
❱
10.7.1.
解答
Day 2: AM
11.
ようこそ
12.
パターンマッチング
❱
12.1.
Matching Values
12.2.
構造体のデストラクト
12.3.
列挙型のデストラクト
12.4.
Let制御フロー
12.5.
演習: 式の評価
❱
12.5.1.
解答
13.
Methods and Traits
❱
13.1.
メソッド
13.2.
トレイト(trait)
❱
13.2.1.
トレイトの実装
13.2.2.
スーパートレイト
13.2.3.
関連型
13.3.
導出
13.4.
演習: ジェネリックなロガー
❱
13.4.1.
解答
Day 2: PM
14.
ようこそ
15.
ジェネリクス(generics)
❱
15.1.
ジェネリック関数
15.2.
ジェネリックデータ型
15.3.
ジェネリックトレイト
15.4.
トレイト制約
15.5.
impl Trait
15.6.
dyn Trait
15.7.
演習: ジェネリックな min
❱
15.7.1.
解答
16.
標準ライブラリ内の型
❱
16.1.
標準ライブラリ
16.2.
ドキュメント
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
演習: カウンター
❱
16.8.1.
解答
17.
標準ライブラリ内のトレイト
❱
17.1.
他の言語との比較
17.2.
演算子
17.3.
From と Into
17.4.
キャスト
17.5.
Read と Write
17.6.
Default、構造体更新記法
17.7.
クロージャ
17.8.
演習: ROT13暗号
❱
17.8.1.
解答
Day 3: AM
18.
ようこそ
19.
メモリ管理
❱
19.1.
プログラム メモリの見直し
19.2.
メモリ管理のアプローチ
19.3.
所有権
19.4.
ムーブセマンティクス
19.5.
Clone
19.6.
Copy 型
19.7.
Drop
19.8.
演習: ビルダー型
❱
19.8.1.
解答
20.
スマートポインタ
❱
20.1.
Box<T>
20.2.
Rc
20.3.
所有されたトレイトオブジェクト
20.4.
演習: バイナリツリー
❱
20.4.1.
解答
Day 3: PM
21.
ようこそ
22.
借用
❱
22.1.
値の借用
22.2.
借用チェック
22.3.
Borrow Errors
22.4.
内部可変性
22.5.
演習: 健康に関する統計
❱
22.5.1.
解答
23.
ライフタイム
❱
23.1.
関数とライフタイム
23.2.
ライフタイムの省略
23.3.
構造体のライフタイム
23.4.
演習: Protobufの解析
❱
23.4.1.
解答
Day 4: AM
24.
ようこそ
25.
イテレータ
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
演習: イテレータのメソッドチェーン
❱
25.4.1.
解答
26.
モジュール
❱
26.1.
モジュール
26.2.
ファイルシステム階層
26.3.
可視性
26.4.
use、super、self
26.5.
演習: GUI ライブラリのモジュール
❱
26.5.1.
解答
27.
テスト
❱
27.1.
テストモジュール
27.2.
他のタイプのテスト
27.3.
コンパイラの Lints と Clippy
27.4.
演習: Luhnアルゴリズム
❱
27.4.1.
解答
Day 4: PM
28.
ようこそ
29.
エラー処理
❱
29.1.
パニック(panic)
29.2.
Result
29.3.
Try演算子
29.4.
Try変換
29.5.
Errorトレイト
29.6.
thiserror
29.7.
anyhow
29.8.
演習: Result を使用した書き換え
❱
29.8.1.
解答
30.
Unsafe Rust
❱
30.1.
アンセーフ
30.2.
生ポインタの参照外し
30.3.
可変なstatic変数
30.4.
共用体
30.5.
Unsafe関数の呼び出し
30.6.
Unsafeなトレイトの実装
30.7.
演習: FFIラッパー
❱
30.7.1.
解答
Android
31.
ようこそ
32.
セットアップ
33.
ビルドのルール
❱
33.1.
バイナリ
33.2.
ライブラリ
34.
AIDL(Androidインターフェイス定義言語)
❱
34.1.
誕生日サービスのチュートリアル
❱
34.1.1.
インターフェイス
34.1.2.
Service API
34.1.3.
サービス
34.1.4.
サーバ
34.1.5.
デプロイ
34.1.6.
クライアント
34.1.7.
APIの変更
34.1.8.
実装の更新
34.2.
AIDL型
❱
34.2.1.
Primitive Types
34.2.2.
配列型
34.2.3.
オブジェクトの送信
34.2.4.
Parcelables
34.2.5.
Sending Files
35.
テスト
❱
35.1.
GoogleTest
35.2.
モック
36.
ログ出力
37.
相互運用性
❱
37.1.
C
❱
37.1.1.
BindgenによるCの呼び出し
37.1.2.
CからRust呼び出し
37.2.
C++
❱
37.2.1.
ブリッジモジュール
37.2.2.
Rustブリッジ
37.2.3.
生成された C++
37.2.4.
C++ ブリッジ
37.2.5.
共有の型
37.2.6.
共有の列挙型
37.2.7.
Rustのエラー処理
37.2.8.
C++のエラー処理
37.2.9.
その他の型
37.2.10.
Android 向けのビルド: C++
37.2.11.
Android 向けのビルド: Genrules
37.2.12.
Android 向けのビルド: Rust
37.3.
Java
Chromium
38.
ようこそ
39.
セットアップ
40.
Chromium と Cargo のエコシステムの比較
41.
ポリシー
42.
ビルドのルール
❱
42.1.
アンセーフなコード
42.2.
Chromium C++からRustのコードに依存させる
42.3.
Visual Studio Code
42.4.
演習
43.
テスト
❱
43.1.
rust_gtest_interop ライブラリ
43.2.
Rust テスト用の GN ルール
43.3.
chromium::import! マクロ
43.4.
演習
44.
C++との相互運用性
❱
44.1.
バインディングの例
44.2.
CXXの限界
44.3.
CXXにおけるエラー処理
❱
44.3.1.
エラー処理: QRの例
44.3.2.
エラー処理: PNGの例
44.4.
Chromium で CXX を使用する
44.5.
演習
45.
サードパーティのクレートを追加する
❱
45.1.
Cargo.toml を構成する
45.2.
gnrt_config.toml を構成する
45.3.
クレートをダウンロードする
45.4.
gn ビルドルールを生成する
45.5.
問題を解決する
❱
45.5.1.
コードを生成するビルドスクリプト
45.5.2.
C++をビルドする、もしくは、任意のアクションを実行するビルドスクリプト
45.6.
クレートへの依存を設定する
45.7.
審査と監査
45.8.
Chromium ソースコードにチェックインする
45.9.
クレートを最新の状態に保つ
45.10.
演習
46.
まとめ - 演習
47.
演習の解答
ベアメタル:午前
48.
ようこそ
49.
no_std
❱
49.1.
例
49.2.
alloc
50.
マイクロコントローラ
❱
50.1.
生MMIO(メモリマップドI/O)
50.2.
PACs
50.3.
HALクレート
50.4.
ボードサポートクレート
50.5.
タイプステートパターン
50.6.
embedded-hal
50.7.
probe-rsとcargo-embed
❱
50.7.1.
デバッグ
50.8.
他のプロジェクト
51.
練習問題
❱
51.1.
コンパス
51.2.
解答
ベアメタル: PM
52.
アプリケーションプロセッサ
❱
52.1.
Rust の準備
52.2.
インラインアセンブリ
52.3.
MMIO
52.4.
UARTドライバを書いてみよう
❱
52.4.1.
他のトレイト
52.5.
UARTドライバの改善
❱
52.5.1.
ビットフラッグ
52.5.2.
複数のレジスタ
52.5.3.
ドライバ
52.5.4.
使用例
52.6.
ログ出力
❱
52.6.1.
使用例
52.7.
例外
52.8.
他のプロジェクト
53.
便利クレート
❱
53.1.
zerocopy
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
spin
54.
Android上のベアメタル
❱
54.1.
vmbase
55.
練習問題
❱
55.1.
RTC(リアルタイムクロック)ドライバ
55.2.
解答
並行性: AM
56.
ようこそ
57.
スレッド
❱
57.1.
プレーンなスレッド
57.2.
スコープ付きスレッド
58.
チャネル
❱
58.1.
送信側(Senders)と受信側(Receivers)
58.2.
Unboundedチャネル
58.3.
Boundedチャネル
59.
SendとSync
❱
59.1.
マーカートレイト
59.2.
Send
59.3.
Sync
59.4.
例
60.
状態共有
❱
60.1.
Arc
60.2.
Mutex
60.3.
例
61.
練習問題
❱
61.1.
食事する哲学者
61.2.
マルチスレッド・リンクチェッカー
61.3.
解答
並行性: PM
62.
ようこそ
63.
Asyncの基礎
❱
63.1.
async/await
63.2.
Future
63.3.
ランタイム
❱
63.3.1.
Tokio
63.4.
タスク
64.
チャネルと制御フロー
❱
64.1.
Asyncチャネル
64.2.
Join
64.3.
Select
65.
落とし穴
❱
65.1.
エグゼキュータのブロッキング
65.2.
Pin
65.3.
Asyncトレイト
65.4.
キャンセル
66.
練習問題
❱
66.1.
食事する哲学者
66.2.
ブロードキャスト・チャットアプリ
66.3.
解答
最後に
67.
ありがとうございました!
68.
用語集
69.
参考資料
70.
クレジット
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Japanese (日本語)
Korean (한국어)
Farsi (فارسی)
Spanish (Español)
Ukrainian (українська)
C++
CXX クレート
を使用すると、Rust と C++ の間で安全な相互運用性を確保できます。
全体的なアプローチは次のようになります。