ما الفرق بين String و str في Rust؟
مرحبًا! لقد بدأت للتو في تعلم Rust وواجهت ارتباكًا بين `String` و `str`. في لغات أخرى، مثل Python أو JavaScript، السلاسل النصية هي مجرد سلاسل، ولكن هنا نوع من التشويش.
لقد كتبت هذا الكود:
```rust
fn main() {
let greeting = "Hello"; // هل هذا str؟
let name = String::from("World"); // وهل هذا String؟
println!("{} {}", greeting, name);
// حاولت تغيير greeting
// greeting.push_str("!"); // خطأ!
// لكن name يمكن تغييره
name.push_str("!"); // يعمل
println!("{}", name);
}
```
أفهم أن `String` يمكن تعديلها، بينما `str` لا يمكن. لكن لماذا؟ متى يجب استخدام كل نوع؟ وما هو `&str`؟ لقد رأيت أن الدوال غالبًا ما تكتب `&str`، لكنني لا أفهم لماذا.
كما لاحظت أن `str` ليس له حجم معروف في وقت الترجمة، بينما `String` له حجم معروف. هل هذا مرتبط بتخزين السلاسل في الكومة (heap)؟ ساعدني في الفهم، فقد أصابني الصداع.
<<>>