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

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

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

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

  • Тұрақталған «асинхронды» функциясына негізделген жаңа асинхронды бағдарламалау синтаксисі, асинхронды жылжыту { ... } блогы және «.await» операторы, бұл негізгі пәрмен ағынын блоктамайтын өңдеушілерді жазуды жеңілдетеді. Асинхронды енгізу/шығару үшін бұрын ұсынылған API-мен салыстырғанда, асинхронды/.await конструкциялары түсінуге оңай, жоғары оқуға қабілетті және циклдарға, шартты мәлімдемелерге және ерекше жағдайларға негізделген таныс ағынды басқару әдістерін пайдаланып күрделі асинхронды өзара әрекеттесулерді жүзеге асыруға мүмкіндік береді.

    Асинхронды күту синтаксисі олардың орындалуын кідіртетін, басқаруды негізгі ағынға қайтаратын, содан кейін тоқтаған жерінен орындауды жалғастыра алатын функцияларды жасауға мүмкіндік береді. Мысалы, мұндай үзіліс енгізу/шығаруды өңдеу кезінде қажет, онда деректердің келесі бөлігінің келуін күту кезінде басқа жұмыстарды орындауға болады. "Асинхронды fn" және "асинхронды жылжыту" арқылы анықталған функциялар мен блоктар сипатты қайтарады Келешек, ол кейінге қалдырылған асинхронды есептеу көрінісін анықтайды. Кейінге қалдырылған есептеуді тікелей бастап, нәтижені «.await» операторы арқылы алуға болады. Күрделі кірістірілген құрылымдарды қосымша үстеме шығындарсыз жасауға мүмкіндік беретін .await шақырылмайынша ешбір әрекет орындалмайды немесе алдын ала жоспарланбайды.

    async fn first_function() -> u32 { .. }
    ...
    болашақ = бірінші_функция();
    ...
    нәтиже болсын: u32 = future.await;

  • Тұрақталған "#![мүмкіндік(байланыстыру_үлгі_қорғаулары)]", байланыстыру түрі бар айнымалы мәндерді пайдалануға мүмкіндік береді "көшу" үлгілерде және осы айнымалыларға сілтемелерді " өрнектің "if" бөлімінде пайдаланыңыз.матч«. Мысалы, енді келесі құрылыстарға рұқсат етіледі:

    fn main() {
    let массиві: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    сәйкестік массив {
    сансыз
    егер nums.iter().sum::() == 10

    => {
    тастау(сандар);
    }
    _ => қолжетімсіз!(),
    }
    }

  • Көрсетуге рұқсат етілген атрибуттар функция параметрлерін, жабуларды және функция көрсеткіштерін анықтау кезінде. Диагностиканы lint (рұқсат ету, ескерту, жоққа шығару және тыйым салу) арқылы басқаратын шартты компиляция атрибуттарына (cfg, cfg_attr) және көмекші макрос шақыру атрибуттарына қолдау көрсетіледі.

    fn len(
    #[cfg(windows)] тілім: &[u16], // Windows жүйесінде параметрді пайдаланыңыз
    #[cfg(not(windows))] тілім: &[u8], // басқа ОЖ-да пайдалану
    ) -> пайдалану {
    slice.len()
    }

  • NLL (Lexical Non-Lexical Lifetimes) әдісін пайдалана отырып, айнымалыларды қарыз алуды тексеру кезінде анықталған проблемалар туралы ескертулер (қарыз тексерушісі), аударылған өлімге әкелетін қателер санатына жатады. Еске салайық, қарызға алынған айнымалылардың қызмет ету мерзімін есепке алудың жаңа механизміне негізделген тексеру жүйесі ескі тексеру коды назардан тыс қалған кейбір мәселелерді анықтауға мүмкіндік берді. Мұндай тексерулер үшін қате шығысы бұрын жұмыс істейтін кодпен үйлесімділікке әсер етуі мүмкін болғандықтан, бастапқыда қателердің орнына ескертулер шығарылды. Ескертулер енді Rust 2018 режимінде іске қосылған кезде қателермен ауыстырылды. Келесі шығарылымда қатені шығару Rust 2015 режимінде де жүзеге асырылады, ол ақырында ескі қарызды тексерушіден құтылады;
  • Тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын “const” атрибуты Vec::new, String::new, LinkedList::new, str::len, [T]::len функциялары үшін пайдаланылады. , str::as_bytes,
    abs, wrapping_abs және overflowing_abs;

  • API интерфейстерінің жаңа бөлігі тұрақталған әдістерді қоса, тұрақты санатқа ауыстырылды
    Pin::into_inner, Instant::checked_duration_beri және Instant::saturating_duration_beri;

  • Жүк пакетінің менеджері енді конфигурация файлдары үшін “.toml” кеңейтімін пайдалану мүмкіндігіне ие. Стандартты кітапхананы тікелей Cargo-дан құру үшін алдын ала қолдау қосылды. Даулы «--all» жалаушасының орнына «--workspace» жалаушасы қосылды. Метадеректерге жаңа өріс қосылды "жариялау«, бұл git тегін және нұсқа нөмірін көрсету арқылы тәуелділіктерді жариялауға мүмкіндік береді. Әр түрлі компиляция кезеңдерінің орындалу уақыттары туралы HTML есебін жасау үшін «-Ztimings» сынақ опциясы қосылды.
  • Rustc компиляторында диагностикалық хабарлар терминалға сәйкес келмейтін кодтың ұштарын кесуді қамтиды. Мақсатты платформаларға қолдаудың үшінші деңгейін қамтамасыз етті
    i686-белгісіз-uefi және sparc64-белгісіз-openbsd. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз және ресми құрастыруларды жариялаусыз.

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

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