- 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. クレジット