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 (українська)
AIDL(Androidインターフェイス定義言語)
Rust では
Android インターフェース定義言語(AIDL)
がサポートされています。
Rust コードは既存の AIDL サーバーを呼び出すことができます。
Rust では新しい AIDL サーバーを作成できます。