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

Mozilla layihəsi tərəfindən əsası qoyulmuş, lakin indi Rust Foundation müstəqil qeyri-kommersiya təşkilatının himayəsi altında hazırlanmış Rust 1.60 ümumi məqsədli proqramlaşdırma dilinin buraxılışı dərc edilmişdir. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir və zibil toplayıcıdan və işləmə müddətindən istifadə etmədən yüksək iş 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 yaddaşla işləmə üsulları tərtibatçını göstəricilərlə manipulyasiya edərkən xətalardan xilas edir və yaddaşın aşağı səviyyəli işləməsi nəticəsində yaranan problemlərdən qoruyur, məsələn, yaddaş sahəsi boşaldıqdan sonra ona daxil olmaq, sıfır göstəricilərə istinad etmək, bufer aşmaq və s. Kitabxanaları yaymaq, qurmaları təmin etmək və asılılıqları idarə etmək üçün layihə Yük paketi meneceri hazırlayır. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Yaddaşın təhlükəsizliyi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyinin izlənməsi, obyektin istifadə müddətinin (əhatə dairələrinin) izlənməsi və kodun icrası zamanı yaddaşa girişin düzgünlüyünün qiymətləndirilməsi vasitəsilə təmin edilir. Rust həmçinin tam ədədlərin daşmasına qarşı qorunma təmin edir, istifadə etməzdən əvvəl dəyişən dəyərlərin məcburi işə salınmasını tələb edir, standart kitabxanada səhvləri daha yaxşı idarə edir, dəyişməz istinadlar və dəyişənlər konsepsiyasını standart olaraq tətbiq edir, məntiqi səhvləri minimuma endirmək üçün güclü statik yazma təklif edir.

Əsas yeniliklər:

  • Rustc kompilyatoru sınaq zamanı kod əhatəsini qiymətləndirmək üçün istifadə olunan əhatə dairəsi məlumatlarını yaratmaq üçün stabilləşdirilmiş LLVM əsaslı sistemə malikdir. Quraşdırma zamanı əhatə məlumatını aktivləşdirmək üçün siz “-Cinstrument-coverage” bayrağından istifadə etməlisiniz, məsələn, “RUSTFLAGS=”-C instrument-coverage” cargo build” əmri ilə montaja başlamaq. Bu şəkildə tərtib edilmiş icra olunan faylı işə saldıqdan sonra default.profraw faylı cari kataloqda saxlanacaq, emal üçün llvm-tools-preview komponentindən llvm-profdata yardım proqramından istifadə edə bilərsiniz. llvm-profdata tərəfindən işlənmiş çıxış daha sonra şərhli kod əhatə dairəsi hesabatını yaratmaq üçün llvm-cov-a ötürülə bilər. Mənbə koduna keçid haqqında məlumat əhatə dairəsi sayğacları ilə kod arasında əlaqə haqqında lazımi məlumatları ehtiva edən araşdırılan icra edilə bilən fayldan götürülür. 1| 1|fn main() { 2| 1| println!("Salam, dünya!"); 3| 1|}
  • Yük paketi menecerində, tikintinin gedişi və hər bir addımın icra müddəti haqqında ətraflı hesabatın yaradılmasını özündə cəmləşdirən "-timings" bayrağının dəstəyi sabitləşdi. Hesabat montaj prosesinin performansını optimallaşdırmaq üçün faydalı ola bilər.
  • Yük paketi meneceri şərti kompilyasiya və isteğe bağlı asılılıqların seçilməsi mexanizmi üçün yeni sintaksis təklif edir, Cargo.toml faylında [xüsusiyyətlər] bölməsində adlandırılmış xassələrin siyahısını sadalamaqla konfiqurasiya edilir və paketin qurulması zamanı xassələri aktivləşdirməklə aktivləşdirilir. “--xüsusiyyətlər” bayrağından istifadə etməklə. Yeni versiya ayrı ad məkanlarında asılılıqlar və zəif asılılıqlar üçün dəstək əlavə edir.

    Birinci halda, “[xüsusiyyətlər]” bölməsinin daxilində “dep:” prefiksi olan elementlərdən istifadə edərək, bu asılılığı bir xüsusiyyət kimi üstüörtülü şəkildə təmsil etmədən isteğe bağlı asılılığı açıq şəkildə əlaqələndirmək mümkündür. İkinci halda, “?” işarəsi ilə işarələnmə dəstəyi əlavə edilmişdir. ("paket-adı?/xüsusiyyət-adı") isteğe bağlı asılılıqlar, yalnız bəzi digər xassə verilmiş isteğe bağlı asılılığı ehtiva edərsə daxil edilməlidir. Məsələn, aşağıdakı misalda serde xassəsinin aktivləşdirilməsi "serde" asılılığını, eləcə də "rgb" asılılığı üçün "serde" xassəsini işə salacaq, lakin yalnız "rgb" asılılığı başqa yerdə aktiv olduqda: [asılılıqlar] serde = { versiya = " 1.0.133", isteğe bağlı = doğru } rgb = { versiya = "0.8.25", isteğe bağlı = doğru } [xüsusiyyətlər] serde = ["dep:serde", "rgb?/serde"]

  • Son buraxılışda deaktiv edilmiş artımlı kompilyasiya dəstəyi geri qaytarıldı. Xüsusiyyətin qeyri-aktiv olmasına səbəb olan kompilyator səhvi həll edildi.
  • Ani taymerləri sistemin yuxu rejimində sərf etdiyi vaxtı nəzərə alan monoton vaxt təminatı ilə təmin etməklə bağlı bəzi problemlər həll edildi. Əvvəllər taymeri idarə etmək üçün mümkün olduqda OS API-dən istifadə edilirdi, bu zaman monotonluğunu pozan problemli vəziyyətləri, məsələn, aparat problemləri, virtuallaşdırmadan istifadə və ya əməliyyat sistemindəki səhvləri nəzərə almırdı.
  • 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:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • dilim::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUnit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • istifadə edin::abs_diff
    • io::ErrorKind üçün ekran
    • ExitCode üçün
    • üçün yox! ("heç vaxt" yazın)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Üçüncü səviyyəli dəstək mips64-openwrt-linux-musl* və armv7-naməlum-linux-uclibceabi (softfloat) platformaları üçün həyata keçirilib. Üçü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.
  • Kompilyator LLVM 14-dən istifadə etməyə dəyişdirilib.

Əlavə olaraq qeyd edə bilərsiniz:

  • rustc-də kod generatoru kimi GCC layihəsindəki libgccjit kitabxanasını rustc-də kod generatoru kimi istifadə etməyə imkan verən rustc_codegen_gcc backendindən istifadə edərək rustc kompilyatorunu yükləmək üçün əlavə dəstək. Kompilyatorun təşviqi rustc kompilyatorunun özünü qurmaq üçün rustc-də GCC əsaslı kod generatorundan istifadə etmək imkanı deməkdir. Praktik tərəfdən, bu xüsusiyyət rustc-də əvvəllər dəstəklənməyən arxitekturalar üçün pas proqramları qurmağa imkan verir.
  • uutils coreutils 0.0.13 alət dəstinin buraxılışı mövcuddur, onun çərçivəsində Rust dilində yenidən yazılmış GNU Coreutils paketinin analoqu hazırlanır. Coreutils sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln və ls daxil olmaqla yüzdən çox kommunal proqramla gəlir. Layihənin məqsədi GPL copyleft lisenziyası əvəzinə Windows, Redox və Fuchsia platformalarında işləyə bilən Coreutils-in kross-platforma alternativ tətbiqini yaratmaq, həmçinin icazə verilən MIT lisenziyası altında paylamaqdır.

    Yeni versiya cp, dd, df, split və tr utilitlərinin GNU layihəsindəki analoqları ilə əhəmiyyətli dərəcədə təkmilləşdirilmiş uyğunluğu da daxil olmaqla bir çox kommunal proqramların təkmilləşdirilmiş tətbiqlərinə malikdir. Onlayn sənədlər təqdim olunur. Alqış analizatoru komanda xətti arqumentlərini təhlil etmək üçün istifadə olunur ki, bu da “--help” bayrağı üçün çıxışı yaxşılaşdırıb və uzun əmrlərin abreviaturalarına dəstək əlavə edib (məsələn, “ls -color” əvəzinə “ls -col” təyin edə bilərsiniz. ”).

Mənbə: opennet.ru

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