課題1: Rustの設計思想の理解
マンダトリー要件
問題1:概念の理解(各2点、計10点)
以下の文が正しければ○、誤りであれば×で答え、×の場合は正しい説明を記述しなさい。
- Rustはガベージコレクションを使用してメモリ管理を行う。
- Rustの所有権システムにより、コンパイル時にメモリ安全性が保証される。
- Rustは常にC言語よりも高速である。
- Rustの学習曲線は他の言語より急である。
- Rustはnull参照が存在しない。
- Rustが誕生した背景(5点)
問題2:歴史の理解(15点)
以下の質問に答えなさい。
- Rustのタイムライン(5点)
- Rust作者について(5点)
問題3:設計思想の説明(25点)
- ゼロコスト抽象化(10点)
- Rustの3つの柱(15点)
問題4:言語比較(20点)
以下の表を埋めなさい(各1点)。
| 特性 | C | C++ | Rust | Go | Java |
|---|---|---|---|---|---|
| メモリ安全性 | ? | ? | ? | ? | ? |
| GC不要 | ? | ? | ? | ? | ? |
| ゼロコスト抽象化 | ? | ? | ? | ? | ? |
| 並行安全性(型) | ? | ? | ? | ? | ? |
それぞれの言語について、以下の質問に答えなさい(各2点):
- Rustが最適なユースケースを3つ挙げなさい。
- C/C++が依然として優位なユースケースを2つ挙げなさい。
問題5:コード理解(30点)
以下のC++とRustのコードを比較し、質問に答えなさい。
C++のコード:
std::vector<int> vec = {1, 2, 3};
int* ptr = &vec[0];
vec.push_back(4);
std::cout << *ptr;
Rustのコード:
let mut vec = vec![1, 2, 3];
let ptr = &vec[0];
vec.push(4);
println!("{}", ptr);
- C++の問題点(10点)
- Rustの解決(10点)
- 修正方法(10点)
---
ボーナス課題
> ボーナス: 以下はオプションです。マンダトリー要件を完了してから挑戦してください。
ボーナス1:産業界での採用調査(10点)
以下の企業のRust採用事例を調査し、レポートを作成しなさい:
- Mozilla
- AWS
- Microsoft
提出形式:
- Markdown形式のレポート(1000文字以上)
- 参照したソースを明記すること
- 実装
ボーナス2:性能ベンチマーク実験(10点)
以下の実験を行い、レポートを作成しなさい:
推奨アルゴリズム: - フィボナッチ数列(再帰版と反復版) - 配列のソート - 文字列の検索
- 測定
- 分析
提出物:
- ソースコード(3言語分)
- ベンチマークスクリプト
- 結果レポート(グラフ付き)
- メモリ管理戦略
ボーナス3:Rust vs Go vs Zig 比較レポート(10点)
Rust、Go、Zigの3言語について、以下の観点で比較レポートを作成しなさい:
- 並行処理モデル
- エラーハンドリング
- 学習曲線と生産性
- エコシステム
提出形式:
- 2000文字以上のMarkdownレポート
- 実際にコードを書いて比較すること
- 個人的な意見だけでなく、客観的なデータも含めること
---
評価基準
マンダトリー部分(80点)
| 項目 | 配点 | 評価ポイント |
|---|---|---|
| 問題1:概念理解 | 10点 | 正確な○×判定と適切な訂正 |
| 問題2:歴史の理解 | 15点 | 重要な年代と出来事の把握 |
| 問題3:設計思想 | 25点 | 3つの柱の深い理解 |
| 問題4:言語比較 | 20点 | 各言語の特性の正確な把握 |
| 問題5:コード理解 | 30点 | 実践的な問題解決能力 |
ボーナス部分(20点)
| 項目 | 配点 | 評価ポイント |
|---|---|---|
| ボーナス1:産業界調査 | 10点 | 調査の深さと正確性 |
| ボーナス2:性能実験 | 10点 | 実験の厳密性と考察の質 |
| ボーナス3:3言語比較 | 10点 | 客観性と実践的な比較 |
注: ボーナスは最大20点まで加算されます。
---
提出方法
ファイル構成
rust-foundations-01/
├── answers.md # マンダトリー問題の回答
├── bonus1-report.md # ボーナス1のレポート
├── bonus2/
│ ├── fibonacci.c
│ ├── fibonacci.rs
│ ├── fibonacci.py
│ ├── benchmark.sh
│ └── results.md
└── bonus3-comparison.md # ボーナス3の比較レポート
提出期限
---
ヒント
問題3のヒント
ゼロコスト抽象化を理解するには:
- 高水準な記述が低水準にコンパイルされる仕組みを考える
- イテレータの例を理解する
rustc --emit=asmでアセンブリを確認してみる
問題5のヒント
Rustで安全に実装する2つの方法:
- スコープを分ける(借用を先に終わらせる)
- インデックスを保存する代わりに値をクローンする
ボーナス2のヒント
ベンチマークツール:
- C:
timeコマンド、valgrind - Rust:
cargo bench、criterion - Python:
timeitモジュール - [ ] Rustが誕生した歴史的背景
- [ ] Rustの3つの柱(メモリ安全性、ゼロコスト抽象化、並行安全性)
- [ ] 所有権システムの基本概念
- [ ] 他の言語との比較とトレードオフ
- [ ] Rustが最適なユースケース
- [ ] 学習曲線とその価値
---
学習の確認
この課題を通じて、以下を理解できたか確認してください:
次の章では、実際にRustの開発環境を構築し、Cargoツールチェーンを学びます。