no_std
- Rust kursu
- Uzman
- Ders 31/46
- 4 dk
#![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
fn main() {
// buraya yaz
}Örnek çözüm
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
#![____]
pub fn en_buyuk(v: &[u32]) -> Option<u32> {
v.iter().copied().max()
}
#![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) |