Rust
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.
Örnek çözümü göster
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>());
}
Kendini test et
-
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
- Daha hızlı olduğu için
Cevabı göster
Gömülü sistemler ve WebAssembly dahil her ortamda kullanılabilsin — Pek çok crate std özelliğini isteğe bağlı yapar: default = ["std"], no_std kullanıcıları onu kapatır.
-
Yalnızca core
#![____]
pub fn en_buyuk(v: &[u32]) -> Option<u32> {
v.iter().copied().max()
}
Cevabı göster
#![no_std]
pub fn en_buyuk(v: &[u32]) -> Option<u32> {
v.iter().copied().max()
}
-
Öğe ve katmanı
- Option, iter, fmt
- core
- Vec, String, Box
- alloc
- fs, thread, net
- std
- HashMap
- std (tohum için OS)
Sıradaki ders: alloc crate