Montaj eklerini destekleyen Rust 1.59 programlama dilinin piyasaya sürülmesi

Mozilla projesi tarafından kurulan ancak şu anda kar amacı gütmeyen bağımsız bir kuruluş olan Rust Foundation'ın himayesinde geliştirilen Rust 1.59 genel amaçlı programlama dilinin sürümü yayınlandı. Dil, bellek güvenliğine odaklanır ve bir çöp toplayıcı ve çalışma zamanı kullanımından kaçınırken yüksek iş paralelliği elde etmenin yollarını sağlar (çalışma zamanı, standart kitaplığın temel başlatma ve bakımına indirgenir).

Rust'ın bellek işleme yöntemleri, geliştiriciyi işaretçileri işlerken hatalardan korur ve serbest bırakıldıktan sonra bir bellek alanına erişme, boş işaretçilerin başvurusunu kaldırma, arabellek taşmaları vb. gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kitaplıkları dağıtmak, derlemeler sağlamak ve bağımlılıkları yönetmek için proje Kargo paketi yöneticisini geliştirir. Crates.io deposu kitaplıkları barındırmak için desteklenir.

Rust'ta bellek güvenliği, derleme zamanında referans kontrolü, nesne sahipliğinin izlenmesi, nesne ömürlerinin (kapsamların) izlenmesi ve kod yürütme sırasında bellek erişiminin doğruluğunun değerlendirilmesi yoluyla sağlanır. Rust ayrıca tamsayı taşmalarına karşı koruma sağlar, kullanımdan önce değişken değerlerinin zorunlu olarak başlatılmasını gerektirir, standart kitaplıkta hataları daha iyi işler, değişmez referanslar ve değişkenler kavramını varsayılan olarak uygular, mantıksal hataları en aza indirmek için güçlü statik yazım sunar.

Ana yenilikler:

  • Yürütmeyi düşük düzeyde kontrol etmesi gereken veya özel makine talimatlarını kullanabilmesi gereken uygulamalarda talep gören montaj dili eklerini kullanmak mümkündür. Montaj ekleri "asm!" makroları kullanılarak eklenir. ve "global_asm!" Rust'ta dize değişiklikleri için kullanılana benzer kayıtları adlandırmak için dize biçimlendirme sözdizimini kullanma. Derleyici, x86, x86-64, ARM, AArch64 ve RISC-V mimarileri için montaj talimatlarını destekler. Ekleme örneği: std::arch::asm; kullanın // Shift kullanarak x'i 6 ile çarpın ve toplayın let mut x: u64 = 4; güvensiz { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } iddia_eq!(x, 4 * 6);
  • İfadenin sol tarafında çeşitli özelliklerin, dilimlerin veya yapıların belirtildiği, yapısı bozulmuş (paralel) atamalar için destek eklendi. Örneğin: (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Yapı { e, .. } = Yapı { e: 5, f: 3 }; iddia_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Const jenerikleri için varsayılan değerleri belirleme yeteneği sağlanmıştır: struct ArrayStorage { dizi: [T; N], } ima DiziDepolama { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { dizi: [a, b], } } }
  • Kargo paketi yöneticisi, derleyicideki hatalar nedeniyle işlenen bağımlılıklarda geçersiz yapıların kullanımına ilişkin uyarılar sağlar (örneğin, bir hata nedeniyle paketlenmiş yapıların alanlarının güvenli bloklarda ödünç alınmasına izin verilmiştir). Bu tür yapılar artık Rust'un gelecekteki sürümlerinde desteklenmeyecektir.
  • Cargo ve Rusc, ayrı bir yardımcı program çağırmaya gerek kalmadan, hata ayıklama verilerinden (strip = "debuginfo") ve sembollerden (strip = "semboller") arındırılmış yürütülebilir dosyalar oluşturma konusunda yerleşik bir yeteneğe sahiptir. Temizleme ayarı Cargo.toml'deki "strip" parametresi aracılığıyla uygulanır: [profile.release] strip = "debuginfo", "symbols"
  • Artımlı derleme varsayılan olarak devre dışıdır. Bunun nedeninin, derleyicide çökmelere ve seri durumdan çıkarma hatalarına yol açan bir hata için geçici bir çözüm olduğu söyleniyor. Bir hata düzeltmesi zaten hazırlandı ve bir sonraki sürüme dahil edilecek. Artımlı derlemeyi döndürmek için RUSTC_FORCE_INCREMENTAL=1 ortam değişkenini kullanabilirsiniz.
  • API'nin yeni bir bölümü kararlı kategorisine taşındı ve özelliklerin yöntemleri ve uygulamaları kararlı hale getirildi:
    • std::thread::available_parallelism
    • Sonuç::kopyalandı
    • Sonuç::klonlandı
    • kemer::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • u8 için TryFrom
    • char::TryFromCharError (Klonlama, Hata Ayıklama, Görüntüleme, KısmiEq, Kopyalama, Denklem, Hata)
    • iter::zip
    • NonZeroU8::is_power_of_two
    • NonZeroU16::is_power_of_two
    • NonZeroU32::is_power_of_two
    • NonZeroU64::is_power_of_two
    • NonZeroU128::is_power_of_two
    • ToLowercase yapısı için DoubleEndedIterator
    • ToUppercase yapısı için DoubleEndedIterator
    • [T; için TryFrom<&mut [T]>; N]
    • Once yapısı için UnwindSafe
    • Bir Kezlik RefUnwindSafe
    • aarch8 için derleyicide yerleşik armv64 neon destek işlevleri
  • Sabitler yerine herhangi bir bağlamda kullanılma olasılığını belirleyen "const" niteliği işlevlerde kullanılır:
    • mem::BelkiUninit::as_ptr
    • mem::BelkiUninit::assume_init
    • mem::BelkiUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Kaynak: opennet.ru

Yorum ekle