Rust programlama dili 1.45 sürümü

yayınlanan sistem programlama dilinin 1.45 sürümü RustMozilla projesi tarafından kuruldu. Dil, bellek güvenliğine odaklanır, otomatik bellek yönetimi sağlar ve çöp toplayıcı kullanmadan yüksek görev paralelliği elde etmek için araçlar sağlar ve runtime.

Rust'un otomatik bellek yönetimi, işaretçileri değiştirirken oluşan hataları ortadan kaldırır ve serbest bırakıldıktan sonra bir bellek bölgesine erişim, boş işaretçi referansları, arabellek taşmaları vb. gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kütüphanelerin dağıtılması, montajın sağlanması ve bağımlılıkların projeye göre yönetilmesi için bir paket yöneticisi geliştirilmektedir. Kargo, program için gereken kütüphanelere tek tıklamayla ulaşmanızı sağlar. Kitaplıkları barındırmak için bir depo desteklenir sandıklar.io.

Ana yenilikler:

  • Uzun süredir ortadan kaldırıldı kusur tamsayılar ve kayan noktalı sayılar arasında dönüşümler gerçekleştirirken. Rust derleyicisi arka uç olarak LLVM kullandığından, tür dönüştürme işlemleri aşağıdaki gibi LLVM ara kod talimatları aracılığıyla gerçekleştirildi. fptouiönemli bir özelliği vardır - elde edilen değer hedef türüne uymuyorsa tanımsız davranış. Örneğin, f300 tipindeki 32 float değerini u8 tamsayı tipine dönüştürürken sonuç tahmin edilemez ve farklı sistemlere göre değişebilir. Sorun, bu özelliğin "güvenli değil" olarak işaretlenmeyen kodda görünmesidir.

    Rust 1.45'ten itibaren, tür boyutu taşmasının davranışı sıkı bir şekilde düzenlenmiştir ve "as" dönüştürme işlemi taşmayı kontrol eder ve dönüştürülen değerin hedef türün maksimum veya minimum değerine zorlanmasını sağlar (yukarıdaki örnek için, 300, 255'e dönüştürülecektir). Bu tür kontrolleri devre dışı bırakmak için, güvenli olmayan modda çalışan ek "{f64, f32}::to_int_unchecked" API çağrıları sağlanır.

    fn cast(x: f32) -> u8 {
    u8 olarak x
    }

    fn ana() {
    let too_big = 300.0;
    let too_small = -100.0;
    nan = f32::NAN olsun;

    x: f32 = 1.0 olsun;
    let y: u8 = güvensiz { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // çıktı 255
    println!("too_small_casted = {}", cast(too_small)); // çıktı 0
    println!("not_a_number_casted = {}", cast(nan)); // çıktı 0
    }

  • Stabilize edilmiş kullanın prosedürel makrolarişlev benzeri ifadeler, şablonlar ve ifadeler. Daha önce bu tür makrolar her yerde çağrılamıyordu, yalnızca kodun belirli bölümlerinde (ayrı bir çağrı olarak, diğer kodlarla iç içe değil) çağrılabiliyordu. İşlevlere benzer şekilde makroların çağrılabilme biçimini genişletmek, web çerçevesinin çalışmasını sağlamak için gereksinimlerden biriydi. Roket Rust'un kararlı sürümlerinde. Daha önce, Rocket'ta işleyicileri tanımlamada ek esneklik elde etmek için, Rust'un kararlı sürümlerinde bulunmayan "proc_macro_hygiene" adlı deneysel bir özelliğin etkinleştirilmesi gerekiyordu. Bu işlevsellik artık dilin kararlı sürümlerinde yerleşiktir.
  • Aralık değerleri üzerinde yineleme yapmak için "char" türündeki aralıkların kullanılmasına izin verilir (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    'a'..='z' {'deki ch için
    yazdır!("{}", ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz" yazdırılacak

  • API'lerin yeni bir kısmı, stabilize olanlar da dahil olmak üzere stabil kategoriye aktarıldı
    Yay::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Zayıf::as_ptr,
    rc::Zayıf::from_raw,
    rc::Weak::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    senkronizasyon::Zayıf::as_ptr,
    senkronizasyon::Zayıf::from_raw,
    senkronizasyon::Zayıf::into_raw,
    karakter::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.

  • Rusc derleyicisi, "hedef-özellik" bayrağını kullanarak çeşitli hedef platform özelliklerini geçersiz kılmak için destek ekledi; örneğin, "-C hedef-özellik=+avx2,+fma". Yeni bayraklar da eklendi:
    kilitlenme yönetimi stratejisinden bağımsız olarak, geri alma çağrı tabloları oluşturmak için "zorla-geri alma tabloları"; LLVM bit kodunun oluşturulan rlib'lere dahil edilip edilmediğini kontrol etmek için "embed-bitcode". Derleme süresini ve disk alanı tüketimini optimize etmek için Cargo'da "embed-bitcode" bayrağı varsayılan olarak etkindir.

  • Mipsel-sony-psp ve Thumbv7a-uwp-windows-msvc platformları için üçüncü düzeyde destek sağlandı. Üçüncü düzey temel desteği içerir, ancak otomatik testler ve resmi yapıların yayınlanması yoktur.

Ek olarak, not edilebilir öykü en basitini yaratma hakkında uygulamaların Rust dilinde, sistem önyükleyicisini kullanmaya başlıyor ve işletim sistemi yerine kendi kendine yeten yüklemeye hazır.
Makale, düşük seviyeli programlama ve işletim sistemi geliştirmede talep gören teknikleri göstermeye adanmış bir serinin ilkidir.

Kaynak: opennet.ru

Yorum ekle