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警告がないこと