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

Mozilla жобасы негізін қалаған, бірақ қазір Rust Foundation тәуелсіз коммерциялық емес ұйымының қолдауымен әзірленген Rust 1.68 жалпы мақсаттағы бағдарламалау тілінің шығарылымы жарияланды. Тіл жад қауіпсіздігіне назар аударады және қоқыс жинаушы мен жұмыс уақытын пайдалануды болдырмай, жоғары жұмыс параллелизміне қол жеткізу құралдарын қамтамасыз етеді (орындау уақыты стандартты кітапхананың негізгі инициализациясы мен қызмет көрсетуіне дейін қысқарады).

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

Жадтың қауіпсіздігі Rust бағдарламасында компиляция уақытында анықтамалық тексеру, объект иеленуін қадағалау, объектінің қызмет ету мерзімін (аумақтарын) қадағалау және кодты орындау кезінде жадқа қол жеткізудің дұрыстығын бағалау арқылы қамтамасыз етіледі. Rust сонымен қатар бүтін сандардың толып кетуінен қорғауды қамтамасыз етеді, пайдалану алдында айнымалы мәндерді міндетті түрде инициализациялауды талап етеді, стандартты кітапханада қателерді жақсы өңдейді, әдепкі бойынша өзгермейтін сілтемелер мен айнымалылар тұжырымдамасын қолданады, логикалық қателерді азайту үшін күшті статикалық теруді ұсынады.

Негізгі инновациялар:

  • Жүк пакетінің менеджері және crates.io репозиторийінде репозиторийде бар барлық пакеттердің қолжетімді нұсқаларын көрсететін индекспен жұмыс істеудің жаңа әдісін анықтайтын Sparse протоколына қолдау тұрақтандырылған. Жаңа хаттама crates.io-мен жұмыс істеу жылдамдығын айтарлықтай арттыруға және репозиторийдегі пакеттер санының одан әрі өсуімен масштабтау мәселелерін шешуге мүмкіндік береді.

    Толық индексті жүктеп алудан туындайтын кідірістерді азайту үшін Git арқылы индекске қол жеткізудің орнына Sparse нақты жобаның тәуелділіктерін қамтитын қажетті индекс деректерін ғана HTTPS арқылы тікелей жүктеп алуды қамтиды. Индекс деректерін қамтамасыз ету үшін жаңа қызмет index.crates.io пайдаланылады. Әдепкі бойынша, жаңа хаттаманы Rust 1.70 тармағында пайдалану жоспарланған және оған дейін оны қосу үшін "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" айнымалы ортасын орнатуға немесе "[регистер. crates-io]" .cargo/config.toml файлының "сирек" бөлімі.

  • «T» өрнегінен оның күйінің жергілікті бекітілуімен Pin<&mut T> құрылымын жасауға мүмкіндік беретін «pin!» макросы қосылды (Box::pin-тен айырмашылығы, ол үймеде жадты бөлмейді, бірақ байланыстырады. стек деңгейінде).
  • Стандартты бөлу бумасын пайдаланған кезде қолданылатын жадты бөлу қатесінің әдепкі өңдегіші ұсынылды. Тек бөлуді қосатын қолданбалар (std жоқ) енді жадты бөлу сәтсіз болған кезде «паник!» өңдегішін шақырады, оны таңдау бойынша «#[panic_handler]» арқылы ұстауға болады. std кітапханасын пайдаланатын бағдарламалар қате туралы ақпаратты stderr жүйесіне басып шығаруды жалғастырады және бұзылады.
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • {core,std}::pin::pin!
    • impl From {f32,f64} үшін
    • std::path::MAIN_SEPARATOR_STR
    • impl DerefMut PathBuf үшін
  • VecDeque::new функциясында оны тұрақтылардың орнына кез келген контексте пайдалану мүмкіндігін анықтайтын «const» атрибуты қолданылады.
  • Android платформасында жұмыс істеу үшін енді кем дегенде NDK r25 (API 19) қажет, яғни. Қолдау көрсетілетін ең аз Android нұсқасы 4.4 (KitKat) дейін көтерілді.
  • Үшінші қолдау деңгейі Sony PlayStation Vita платформасына (armv7-sony-vita-newlibeabihf) енгізілді. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.

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

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