const

يتم تقييم الثوابت (Constants) في وقت الترجمة (compile time) ويتم تضمين قيمها في أي مكان يتم استخدامها فيه:

const DIGEST_SIZE: usize = 3;
const ZERO: Option<u8> = Some(42);

fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {
    let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];
    for (idx, &b) in text.as_bytes().iter().enumerate() {
        digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE].wrapping_add(b);
    }
    digest
}

fn main() {
    let digest = compute_digest("Hello");
    println!("digest: {digest:?}");
}

وفقًا لـ Rust RFC Book يتم تضمين هذه القيم عند الاستخدام.

فقط الدوال المميزة بـ const يمكن استدعاؤها في وقت الترجمة (compile time) لتوليد قيم const. ومع ذلك، يمكن استدعاء الدوال const في وقت التشغيل (runtime).

  • اذكر أن const يتصرف بشكل مشابه دلاليًا لـ constexpr في C++.
  • ليس من الشائع جدًا أن يحتاج المرء إلى ثابت يتم تقييمه في وقت التشغيل (runtime evaluated constant)، ولكنه مفيد وأكثر أمانًا من استخدام ثابت (static).