CodeBlanks Logo Icon CodeBlanks

no_std

#![no_std] ile standart kütüphanesiz ortamı öğrenirsin.

no_std

Standart kütüphane üç katmandan oluşur: core (işletim sistemi ve bellek ayırıcı gerektirmez: Option, Result, yineleyiciler, dilimler, fmt), alloc (bir ayırıcı ister: Vec, String, Box) ve std (işletim sistemi ister: dosyalar, thread'ler, ağ). #![no_std] ile yalnızca core kullanılır; mikrodenetleyiciler, çekirdekler ve önyükleyiciler bu ortamda çalışır:

#![no_std]

pub fn en_buyuk(v: &[u32]) -> Option<u32> {
    v.iter().copied().max()        // tamamı core'da
}

std'deki birçok tür aslında core ya da alloc'tan yeniden dışa aktarılır; std::option::Option ile core::option::Option aynı türdür.

core'da neler var?

core; ilkel türleri ve yöntemlerini, Option/Result, yineleyicileri, dilim ve str işlemlerini, cmp, mem, ptr, fmt (biçimlendirme, ama ekrana yazma değil), atomikleri ve Cell/RefCell'i içerir. Eksik olanlar: heap türleri, println!, dosyalar, thread'ler, HashMap (rastgele tohum için işletim sistemi gerekir).

let m = core::cmp::max(3, 7);
let n = core::mem::size_of::<u64>();
let ilk = core::str::from_utf8(b"rust").ok();

Uygulama core ile çalış

Yalnızca core yollarını kullanan fn en_buyuk(v: &[u32]) -> Option<u32> yaz. core::cmp::max(3, 7), en_buyuk(&[4, 9, 2]) ve core::mem::size_of::<u64>() sonuçlarını boşlukla yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn en_buyuk(v: &[u32]) -> core::option::Option<u32> {
    v.iter().copied().max()
}

fn main() {
    println!("{} {:?} {}", core::cmp::max(3, 7), en_buyuk(&[4, 9, 2]), core::mem::size_of::<u64>());
}

Beklenen çıktı

7 Some(9) 8

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir kütüphane neden <code>no_std</code> uyumlu yazılır?

  • Zorunlu olduğu için
  • Daha az kod için
  • Gömülü sistemler ve WebAssembly dahil her ortamda kullanılabilsin Doğru cevap
  • Daha hızlı olduğu için

Açıklama: Pek çok crate std özelliğini isteğe bağlı yapar: default = ["std"], no_std kullanıcıları onu kapatır.

2 Yalnızca core

Soru
#![____]

pub fn en_buyuk(v: &[u32]) -> Option<u32> {
    v.iter().copied().max()
}
Cevap
#![no_std]

pub fn en_buyuk(v: &[u32]) -> Option<u32> {
    v.iter().copied().max()
}

Açıklama: #![no_std] crate'in yalnızca core kullanmasını sağlar.

3 Öğe ve katmanı

Kavram Anlamı
Option, iter, fmt core
Vec, String, Box alloc
fs, thread, net std
HashMap std (tohum için OS)

Uzman bölümündeki tüm dersler