← スキル一覧に戻る

ownership-borrowing
by pluginagentmarketplace
Rust programming language roadmap plugin for Claude
⭐ 1🍴 0📅 2026年1月5日
SKILL.md
name: ownership-borrowing description: Master Rust's ownership, borrowing, and lifetime system sasmp_version: "1.3.0" bonded_agent: rust-fundamentals-agent bond_type: PRIMARY_BOND version: "1.0.0"
Ownership & Borrowing Skill
Master Rust's revolutionary memory safety system without garbage collection.
Quick Start
The Three Rules of Ownership
// Rule 1: Each value has exactly ONE owner
let s1 = String::from("hello"); // s1 owns this String
// Rule 2: Only ONE owner at a time
let s2 = s1; // Ownership MOVES to s2
// println!("{}", s1); // ERROR: s1 no longer valid
// Rule 3: Value is dropped when owner goes out of scope
{
let s3 = String::from("temporary");
} // s3 dropped here, memory freed
Borrowing Basics
fn main() {
let s = String::from("hello");
// Immutable borrow
let len = calculate_length(&s);
println!("{} has length {}", s, len);
// Mutable borrow
let mut s = String::from("hello");
change(&mut s);
println!("{}", s); // "hello, world"
}
fn calculate_length(s: &String) -> usize {
s.len()
}
fn change(s: &mut String) {
s.push_str(", world");
}
Lifetime Annotations
// Explicit lifetime annotation
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
// Struct with lifetime
struct Excerpt<'a> {
part: &'a str,
}
Common Patterns
Pattern 1: Clone When Needed
let s1 = String::from("hello");
let s2 = s1.clone(); // Deep copy
println!("{} {}", s1, s2); // Both valid
Pattern 2: Return Ownership
fn process(s: String) -> String {
// Do something with s
s // Return ownership
}
Pattern 3: Borrow for Read-Only
fn analyze(data: &Vec<i32>) -> Summary {
// Only read, don't own
Summary::from(data)
}
Error Solutions
"value borrowed after move"
// Problem
let s = String::from("hello");
let s2 = s;
println!("{}", s); // ERROR
// Solution 1: Clone
let s2 = s.clone();
// Solution 2: Borrow
let s2 = &s;
"cannot borrow as mutable"
// Problem
let s = String::from("hello");
change(&mut s); // ERROR: s is not mut
// Solution: Declare as mutable
let mut s = String::from("hello");
change(&mut s); // OK
Resources
スコア
総合スコア
60/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です