Rust 1.38 бағдарламалау тілі шығарылымы

жарияланды жүйелік бағдарламалау тілінің шығарылымы Тот 1.38, Mozilla жобасымен құрылған. Тіл жад қауіпсіздігіне назар аударады, жадты автоматты басқаруды қамтамасыз етеді және қоқыс жинағышты немесе жұмыс уақытын пайдаланбай жоғары тапсырма параллелизміне қол жеткізу құралын ұсынады.

Rust жадты автоматты басқаруы әзірлеушіні көрсеткішті манипуляциялаудан босатады және бос жадқа қол жеткізу, нөлдік көрсеткіш сілтемелері, буфердің асып кетуі және т.б. сияқты төмен деңгейлі жад манипуляциясынан туындайтын мәселелерден қорғайды. Кітапханаларды тарату, құрастыруды қамтамасыз ету және жоба бойынша тәуелділіктерді басқару үшін пакет менеджері әзірленуде. жүк, бағдарламаға қажетті кітапханаларды бір рет басу арқылы алуға мүмкіндік береді. Хост кітапханалары үшін репозиторийге қолдау көрсетіледі crates.io.

басты инновациялар:

  • Тәуелді жәшік бумасын құрастыру оның компиляциясының аяқталуын күтпей-ақ, тәуелділік метадеректері қол жетімді болғаннан кейін басталатын конфигурацияланған құрастыру режимі (құбырлы) қосылды. Буманы құрастырған кезде тәуелділіктерді толық жинау қажет емес, тек түрлердің, тәуелділіктердің және экспортталған элементтердің тізімдерін қамтитын метадеректерді анықтау жеткілікті. Метадеректер компиляция процесінің басында қолжетімді болады, сондықтан байланыстырылған бумаларды енді әлдеқайда ертерек құрастыруға болады. Жалғыз пакеттерді құру кезінде ұсынылған режим өнімділікке әсер етпейді, бірақ құрастыру тармақталған тәуелділіктері бар бумаларды қамтыса, жалпы құрастыру уақытын 10-20%-ға қысқартуға болады;
  • Функциялардың дұрыс пайдаланылмауын анықтауды қамтамасыз етеді std::mem:: инициализацияланбаған и std::mem::нөл. Мысалы, std::mem::uninitialized массивтерді жылдам жасау үшін ыңғайлы, бірақ ол компиляторды жаңылыстырады, себебі ол инициализацияланған сияқты, бірақ шын мәнінде мән инициализацияланбаған күйінде қалады. mem::инициализацияланбаған функциясы бұрыннан ескірген деп белгіленген және оның орнына аралық түрді пайдалану ұсынылады. Мүмкін бірлік. mem::zeroed болса, бұл функция нөлдік мәндерді қабылдай алмайтын түрлерге қатысты мәселелерді тудыруы мүмкін.

    Анықталмаған әрекетті анықтауға көмектесу үшін жаңа шығарылым компиляторға mem::unitialized немесе mem::noled кейбір мәселелерді анықтайтын линт тексеруін қосады. Мысалы, енді нөл мәндерді қабылдай алмайтын көрсеткіш нысандарын көрсететін &T және Box‹T› түрлерімен mem::инициализацияланбаған немесе mem::нөлді пайдалану әрекеті кезінде қате пайда болады;

  • "#[ескірген]" төлсипаты жәшік бумаларын ескірген деп белгілеуге және болашақта жоюды жоспарлауға мүмкіндік беру үшін кеңейтілді. Rust 1.38 нұсқасы бойынша бұл төлсипатты макростар үшін де пайдалануға болады;
  • Ішкі модульдерде “#[global_allocator]” төлсипатын пайдалану мүмкіндігі қосылды;
  • Қосымша функция std :: any :: type_name, ол отладка мақсаттары үшін пайдалы болуы мүмкін түрдің атын білуге ​​мүмкіндік береді. Мысалы, бағдарламаны орындау кезінде функцияның қандай типке шақырылғанын білуге ​​болады:

    fn gen_value‹T: Әдепкі>() -› T {
    println!("{} данасын инициализациялау", std::any::type_name::‹T›());
    Әдепкі::әдепкі()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" басып шығарылады
    let _: Жол = gen_value(); # "alloc::string::String" басып шығарады
    }

  • Стандартты кітапхананың кеңейтілген функциялары:
    • slice::{concat, connect, join} енді &T-ге қосымша &[T] мәнін қабылдай алады;
    • "*const T" және "*mut T" енді маркерді жүзеге асырады::Ашу;
    • "Arc‹[T]›" және "Rc‹[T]›" енді FromIterator‹T› іске асырады;
    • iter::{StepBy, Peekable, Take} енді DoubleEndedIterator енгізіңіз.
    • ascii::EscapeDefault Клондау және көрсетуді жүзеге асырады.
  • API интерфейстерінің жаңа бөлігі тұрақталған әдістерді қоса, тұрақты санатқа ауыстырылды
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Ұзақтығы::as_secs_f{32|64},
    • Ұзақтығы::div_duration_f{32|64},
    • Ұзақтығы::div_f{32|64},
    • Ұзақтығы::from_secs_f{32|64},
    • Ұзақтығы::mul_f{32|64},
    • қалдықпен бөлу операциялары
      div_euclid және rem_euclid барлық бүтін примитивтер үшін;

  • Жүк пакетінің менеджерінде әртүрлі мүмкіндіктерді қосу үшін «--функциялар» опциясын бірнеше рет көрсетуге қолдау қосылды;
  • Компилятор үшіншісін береді сыныбы мақсатты платформаларға қолдау aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvux7- targets, armv- белгілі -gnueabi, armv7-белгісіз-linux-musleabi, алтыбұрыш-белгісіз-linux-musl және riscv32i-белгісіз-ешбір-элф. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз және ресми құрастыруларды жариялаусыз.

Ақпарат көзі: opennet.ru

пікір қалдыру