rust-ownership - 評価
評価スケール
基本評価 (100点満点)
| 項目 |
配点 |
評価基準 |
| コンパイル |
15点 |
`cargo build` でエラーなし |
| 所有権関数 |
20点 |
正しい所有権移動 |
| 借用関数 |
25点 |
不変/可変借用の正しい使用 |
| ライフタイム |
25点 |
正しいライフタイム注釈 |
| テスト |
10点 |
包括的なテストケース |
| ドキュメント |
5点 |
rustdoc コメント |
ボーナス評価 (最大30点)
| 項目 |
配点 |
| カスタムイテレータ |
10点 |
| 自己参照構造体 |
10点 |
| Cow活用 |
10点 |
課題の目的
学習目標
- 値の所有者は常に1つ
- スコープ終了時の自動解放 - 不変借用は複数可能
- 可変借用は1つのみ
- 不変/可変借用は同時不可 - 参照の有効期間
- 省略規則
- 明示的注釈習得スキル
- 所有権に基づいた設計
- ゼロコスト抽象化の活用
- コンパイル時安全性の確保
評価手順
1. コンパイル確認
cargo build --release
cargo clippy -- -D warnings
2. テスト実行
cargo test
3. 借用チェッカーテスト
#[test]
fn test_ownership_move() {
let s = String::from("test");
let processed = process_owned(s);
// s は使用不可であることを確認
assert_eq!(processed.len() > 0, true);
}
#[test]
fn test_borrow_immutable() {
let s = String::from("test");
let result = process_borrowed(&s);
// s はまだ使用可能
assert_eq!(s, "test");
assert!(result.len() > 0);
}
#[test]
fn test_borrow_mutable() {
let mut s = String::from("test");
modify_in_place(&mut s);
assert_ne!(s, "test");
}
#[test]
fn test_lifetime_struct() {
let text = String::from("hello world");
let analyzer = TextAnalyzer::new(&text);
assert_eq!(analyzer.word_count(), 2);
}
減点対象
| 項目 |
減点 |
| コンパイルエラー |
不合格 |
| clippy警告 |
-5点/件 |
| 不要なclone |
-3点/件 |
| ライフタイム省略可能 |
-2点/件 |
合格基準
マンダトリーパート: 80点以上
全テストがパスすること
clippy警告がないこと