Rust 1.36 dasturlash tilining relizi

nashr etilgan tizim dasturlash tilini chiqarish Pas 1.36, Mozilla loyihasi tomonidan asos solingan. Til xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va axlat yig'uvchi yoki ish vaqtidan foydalanmasdan yuqori vazifalar parallelligiga erishish uchun vositani taqdim etadi.

Rust-ning avtomatik xotira boshqaruvi ishlab chiquvchini ko'rsatgichlarni manipulyatsiya qilishdan ozod qiladi va past darajadagi xotira manipulyatsiyasi natijasida kelib chiqadigan muammolardan himoya qiladi, masalan, bo'sh xotiradan keyin foydalanish, null ko'rsatkichni yo'qotish, buferni haddan tashqari oshirib yuborish va boshqalar. Kutubxonalarni tarqatish, yig'ishni ta'minlash va loyiha tomonidan bog'liqliklarni boshqarish uchun paket menejeri ishlab chiqilmoqda. yuk, bir marta bosish orqali dastur uchun kerakli kutubxonalarni olish imkonini beradi. Xost kutubxonalar uchun ombor qo'llab-quvvatlanadi crates.io.

asosiy yangiliklar:

  • Xususiyat barqarorlashdi kelajak, bu async / .await bloklaridan foydalanganda baholash hali tugallanmagan qiymatni ifodalaydi. Future yordamida aniqlangan asinxron qiymatlar bir vaqtning o'zida ma'lum bir qiymatdagi hisob-kitoblarning tugashini kutish bilan bir vaqtda ipda foydali ishlarni bajarishni davom ettirish imkonini beradi;
  • Kutubxona barqarorlashdi ajratish, bu xotiraga ajratilgan qiymatlarni boshqarish uchun aqlli ko'rsatkichlar va to'plamlarni taqdim etadi. Std-da xotirani ajratish endi turdan foydalanadi Vec, ular allocdan qayta eksport qilinadi. Alloc-dan alohida foydalanish std ("#![no_std]") bilan bog'lanmagan ilovalarda, shuningdek stdsiz shunga o'xshash dasturlarda foydalanish uchun mo'ljallangan kutubxonalarda mantiqiy bo'ladi;
  • Qiymatlarning to'g'ri ishga tushirilishini tekshirishni chetlab o'tish taklif qildi oraliq turi Balki birlik, undan xavfsizroq alternativ sifatida mem::uninitialized funksiyasi oʻrniga foydalanish mumkin. mem::uninitialized funksiyasi massivlarni tezda yaratish uchun qulaydir, lekin kompilyatorni chalg‘itadi, chunki u initsializatsiya qilingan ko‘rinadi, lekin aslida qiymat boshlang‘ich bo‘lmaganligicha qoladi. MaybeUninit kompilyatorga qiymatning ishga tushirilmaganligini aniq ko'rsatishga, bu bilan bog'liq bo'lishi mumkin bo'lgan noaniq xatti-harakatni hisobga olishga, shuningdek, "maybe_t:" va bosqichma-bosqich ishga tushirish orqali dasturlarni tekshirishni tashkil qilish, uning tugallanganligini belgilash imkonini beradi. “.assume_init()” chaqiruvidan foydalanish. MaybeUninit paydo bo'lishi bilan mem::uninitialized funksiyasi eskirgan va undan foydalanish tavsiya etilmaydi;
  • Qarzga olingan o'zgaruvchilarning ishlash muddatini qayd etish tizimini kengaytirgan NLL (Lexical Non-Lexical Lifetimes) texnikasi Rust 2015 tili uchun barqarorlashtirildi (dastlab, NLL faqat Rust 2018 tomonidan qo'llab-quvvatlangan). Umr vaqtlarini leksik darajada bajarish o'rniga, NLL buni bajarish oqimi grafigidagi ko'rsatkichlar to'plami darajasida amalga oshiradi. Ushbu yondashuv o'zgaruvchilarning qarzga olinishini tekshirish sifatini oshirishga imkon beradi (qarz tekshiruvi) va ba'zi turdagi to'g'ri kodlarni bajarishga imkon beradi, ulardan foydalanish ilgari xatolikka olib keldi. Yangi xatti-harakatlar, shuningdek, disk raskadrovkani ancha osonlashtiradi;
  • Assotsiativ massivlarning yangi amalga oshirilishi kiritilgan HashMap, strukturaning qo'llanilishiga asoslangan Shveytsariya jadvali (avtomatik yuklanadi hashbrown :: HashMap, agar boshqacha ko'rsatilmagan bo'lsa, masalan, SipHash 1-3 ga asoslangan std::HashMap). Dastur interfeysi bir xil bo'lib qoladi va ishlab chiquvchi uchun sezilarli farqlar unumdorlikni oshirishga va xotira sarfini kamaytirishga olib keladi;
  • Yuk paketi menejerida qo'shildi "--offline" opsiyasi, bu tarmoqqa kirmasdan ishlash imkonini beradi, bunda bog'liqliklarni o'rnatishda faqat mahalliy tizimda keshlangan paketlar qo'llaniladi. Agar qaramlik mahalliy keshda bo'lmasa, xatolik yuzaga keladi. Oflayn rejimga o'tishdan oldin mahalliy keshga bog'liqliklarni oldindan yuklash uchun siz "yukni olib kelish" buyrug'idan foydalanishingiz mumkin;
  • Ibratli "dbg!" Deb chaqirish qobiliyati amalga oshirildi. bir nechta dalillarni ko'rsatish;
  • Konstantalar o'rniga har qanday kontekstda foydalanish imkoniyatini aniqlaydigan "const" atributi usullar uchun ishlatiladi.
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling va
    Nonull::cast;

  • API-larning yangi qismi barqaror toifaga, jumladan barqarorlashtirilgan usullarga o'tkazildi
    task::Waker, task::So'rovnoma,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::kopiyalangan,
    BorrowMut (satrlar uchun) va str::as_mut_ptr.

Manba: opennet.ru

a Izoh qo'shish