Rust 1.57 Proqramlaşdırma Dili Buraxılışı

Mozilla layihəsi tərəfindən əsası qoyulmuş, lakin hazırda Rust Foundation müstəqil qeyri-kommersiya təşkilatının himayəsi altında hazırlanmış Rust 1.57 sistem proqramlaşdırma dilinin buraxılışı nəşr olunub. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir, yaddaşın avtomatik idarə edilməsini təmin edir və zibil toplayıcıdan və ya iş vaxtından istifadə etmədən yüksək tapşırıq paralelliyinə nail olmaq üçün vasitələr təqdim edir (iş vaxtı standart kitabxananın əsas işə salınması və saxlanmasına qədər azaldılır).

Rust-un avtomatik yaddaş idarəetməsi göstəriciləri idarə edərkən səhvləri aradan qaldırır və aşağı səviyyəli yaddaş manipulyasiyasından yaranan problemlərdən qoruyur, məsələn, boşaldıqdan sonra yaddaş bölgəsinə daxil olmaq, null göstərici referensiyaları, bufer aşması və s. Kitabxanaları yaymaq, montajı təmin etmək və asılılıqları idarə etmək üçün layihə Yük paketi menecerini inkişaf etdirir. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Əsas yeniliklər:

  • “Panik!” makrosunun istifadəsi sabitləşdi. kompilyasiya zamanı yaradılmış kontekstlərdə, məsələn, "const fn" bəyannamələrində. Bundan əlavə, istifadə etməklə yanaşı, "panik!" const bəyannamələri “assert!” makrosundan istifadə etməyə imkan verir. və bəzi digər standart kitabxana API-ləri. Stabilləşdirmə hələ bütün formatlaşdırma infrastrukturunu əhatə etmir, ona görə də indiki formada “çaxnaşma!” makrosu yalnız statik sətirlərlə (panik!(“...")) və ya əvəz edərkən tək interpolyasiya edilmiş "&str" dəyəri ilə istifadə edilə bilər (panic!("{}", a)), "{" ilə məhdudlaşmalıdır. }" formatlama təyinediciləri və digər növləri olmadan. Gələcəkdə daimi kontekstlərdə makroların tətbiqi genişləndiriləcək, lakin stabilləşdirilmiş imkanlar tərtib mərhələsində təsdiq yoxlamalarını həyata keçirmək üçün artıq kifayətdir: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = təsdiq edin!(std::mem::size_of:: () == 8);
  • Yük paketi meneceri "dev", "release", "test" və "bench" ilə məhdudlaşmayan ixtiyari adları olan profillərdən istifadə etməyə imkan verir. Məsələn, əlaqələndirmə mərhələsində (LTO) optimallaşdırmanı yalnız son məhsul yığımları yaradıldıqda aktivləşdirmək üçün siz Cargo.toml-da “istehsal” profili yarada və ona “lto = true” bayrağı əlavə edə bilərsiniz. Bununla belə, öz profillərinizi təyin edərkən, ondan standart parametrləri miras almaq üçün mövcud profili göstərməlisiniz. Aşağıdakı nümunə "lto = true" bayrağını daxil etməklə "buraxılış" profilini tamamlayan "istehsal" profili yaradır. Profil özü “--profile production” seçimi ilə yükə zəng etməklə aktivləşdirilir və montaj artefaktları “hədəf/istehsal” kataloquna yerləşdiriləcək. [profile.production] miras alır = "buraxılış" lto = doğru
  • Vec, String, HashMap, HashSet və VecDeque növləri üçün try_reserve-dən istifadə stabilləşdirilib ki, bu da yaddaşın ayrılması əməliyyatlarının tezliyini azaltmaq və qarşısını almaq üçün verilmiş növün müəyyən sayda elementləri üçün əvvəlcədən yer saxlamağa imkan verir. yaddaş çatışmazlığı səbəbindən əməliyyat zamanı çökür.
  • "m!{ .. }.method()" və "m!{ .. }?" kimi ifadələrdə qıvrımlı mötərizələrlə makroların təyin edilməsinə icazə verilir.
  • File::read_to_end və read_to_string funksiyalarının icrası optimallaşdırılıb.
  • Unicode spesifikasiyası üçün dəstək 14.0 versiyasına yeniləndi.
  • Qayıdış dəyərinə məhəl qoyulmadıqda xəbərdarlıq vermək üçün "#[istifadə_istifadə etməli]" işarəsi ilə işarələnmiş funksiyaların sayı genişləndirildi, bu, funksiyanın yeni dəyər qaytarmaq əvəzinə dəyərləri dəyişdirəcəyini güman etməklə yaranan səhvləri müəyyən etməyə kömək edir.
  • Libgccjit istifadə edərək kod yaratmaq üçün eksperimental arxa plan əlavə edildi.
  • API-nin yeni hissəsi stabillər kateqoriyasına köçürüldü, o cümlədən xüsusiyyətlərin üsulları və tətbiqləri stabilləşdirildi:
    • [T; N]:: as_mut_slice
    • [T; N]::kimi_dilim
    • kolleksiyalar::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec :: try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque :: try_reserve_exact
    • İterator::map_while
    • iter::MapWhile
    • proc_macro :: mövcuddur
    • Command::get_program
    • Komanda::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Onun sabitlər əvəzinə hər hansı kontekstdə istifadə oluna biləcəyini müəyyən edən “const” atributu hint::unreachable_unchecked funksiyasında istifadə olunur.
  • Üçüncü dəstək səviyyəsi armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi və armv7a-km üçün həyata keçirilib. solid_asp3-eabihf platformaları. Üçüncü səviyyə əsas dəstəyi əhatə edir, lakin avtomatlaşdırılmış sınaq, rəsmi quruluşların dərc edilməsi və ya kodun tikilib-qurula bilməyəcəyini yoxlamaq olmadan.

Mənbə: opennet.ru

Добавить комментарий