كيفية إنشاء متغير عام قابل للتغيير في Rust؟
مرحبًا! أتعلم Rust وأحاول إنشاء متغير عام يمكن الوصول إليه من أي جزء من البرنامج وقابل للتغيير. على سبيل المثال، أحتاج إلى تخزين إعدادات التطبيق التي تُحمَّل مرة واحدة عند بدء التشغيل ويمكن تحديثها لاحقًا.
في C++ أو Python كنت سأستخدم متغيرًا عامًا ببساطة، لكن في Rust يشتكي المترجم. إليك ما جربته:
```rust
static CONFIG: Vec = Vec::new(); // خطأ: عدم كفاية زمن الحياة
```
ثم جربت `static mut`:
```rust
static mut COUNTER: i32 = 0;
fn increment() {
unsafe {
COUNTER += 1;
}
}
```
هذا يعمل، لكن قيل لي أن `static mut` غير آمن وقد يؤدي إلى سباقات البيانات. سمعت عن `Mutex` و `OnceCell` و `lazy_static`، لكنني لا أفهم كيفية دمجها بشكل صحيح.
أحتاج إلى:
- تهيئة المتغير العام مرة واحدة عند بدء تشغيل البرنامج
- قراءته من عدة خيوط
- تغييره أحيانًا (ولكن ليس في وقت واحد من خيوط مختلفة)
كيف أفعل ذلك بشكل صحيح؟