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

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

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

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

  • Жолды пішімдеу блоктарында жолдан кейін анық тізілген айнымалы мәндерді нөмір және атау бойынша ауыстыру мүмкіндігіне қосымша жолға «{идентификатор}» өрнегін қосу арқылы ерікті идентификаторларды ауыстыру мүмкіндігі жүзеге асырылады. Мысалы: // Бұрын қолдау көрсетілетін конструкциялар: println!("Сәлем, {}!", get_person()); println!("Сәлем, {0}!", get_person()); println!("Сәлем, {адам}!", адам = get_person()); // енді let person = get_person(); println!("Сәлем, {адам}!");

    Идентификаторларды пішімдеу опцияларында тікелей көрсетуге болады. let (ені, дәлдігі) = get_format(); get_scores() ішіндегі (атауы, ұпайы) үшін { println!("{name}: {score:width$.precision$}"); }

    Жаңа ауыстыру жол пішімін анықтауды қолдайтын барлық макростарда жұмыс істейді, «дүрбелең!» макросын қоспағанда. Rust тілінің 2015 және 2018 нұсқаларында дүрбелең!("{ident}") кәдімгі жол ретінде қарастырылады (Rust 2021-те ауыстыру жұмыс істейді).

  • Windows платформасындағы std::process::Пәрмен құрылымының әрекеті қауіпсіздік мақсатында пәрмендерді орындау кезінде ағымдағы каталогта енді орындалатын файлдарды іздемейтіндей етіп өзгертілді. Ағымдағы каталог алынып тасталды, себебі ол бағдарламалар сенімсіз каталогтарда (CVE-2021-3013) іске қосылса, зиянды кодты орындау үшін пайдаланылуы мүмкін. Жаңа орындалатын файлды анықтау логикасы Rust каталогтарын, қолданба каталогын, Windows жүйелік каталогын және PATH ортасының айнымалы мәнінде көрсетілген каталогтарды іздеуді қамтиды.
  • Стандартты кітапхана қайтару мәні еленбесе, ескерту беру үшін «#[қолдану_мүмкін]» деп белгіленген функциялар санын кеңейтті, бұл функция жаңа мәнді қайтарудың орнына мәндерді өзгертеді деп болжаудан туындаған қателерді анықтауға көмектеседі.
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • Метадеректер ::симбалы сілтеме
    • Жол::символы_сілтеме
    • {бүтін}::қанықтыру_бөлімі
    • Опция :: unwrap_unchecked
    • Нәтиже :: unwrap_checked
    • Нәтиже :: unwrap_err_unchecked
  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын "const" атрибуты функцияларда қолданылады:
    • Ұзақтығы::жаңа
    • Ұзақтығы::белгіленген_қосу
    • Ұзақтығы::қанықтыру_қосу
    • Ұзақтығы::белгіленген_қосалқы
    • Ұзақтығы::қанықтыру_қосалқы
    • Ұзақтығы::тексерілген_муль
    • Ұзақтығы::қанықтыру_муль
    • Ұзақтығы::белгіленген_див
  • «const» контекстеріндегі «*const T» көрсеткіштерінің сілтемесін жоюға рұқсат етілген.
  • Жүк пакетінің менеджерінде rust_version өрісі бума метадеректеріне қосылды, ал «--хабарлама-пішімі» опциясы «жүк орнату» пәрменіне қосылды.
  • Компилятор CFI (Control Flow Integrity) қорғау механизмін қолдауды жүзеге асырады, ол әрбір жанама шақыру алдында қалыпты орындау тәртібінің (басқару ағынының) бұзылуына әкелуі мүмкін анықталмаған әрекеттің кейбір түрлерін анықтау үшін тексерулерді қосады. функциялар бойынша жадта сақталған көрсеткіштерді өзгертетін эксплойттарды пайдалану.
  • Компилятор тестілеу кезінде кодты қамтуды бағалау үшін пайдаланылатын LLVM қамтуды салыстыру пішімінің 5 және 6 нұсқаларына қолдау қосты.
  • Компиляторда LLVM минималды нұсқасына қойылатын талаптар LLVM 12 дейін көтеріледі.
  • x86_64-белгісіз-жоқ платформасын қолдаудың үшінші деңгейі жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.

Сонымен қатар, Microsoft корпорациясының Windows ОЖ үшін қосымшаларды әзірлеу үшін Rust тілін пайдалануға мүмкіндік беретін Windows 0.30 кітапханаларына арналған Rust шығарылымын жариялауын атап өтуге болады. Жинақ екі жәшік бумасын (терезелер және windows-sys) қамтиды, олар арқылы Rust бағдарламаларындағы Win API интерфейсіне қол жеткізуге болады. API қолдауының коды API сипаттайтын метадеректерден динамикалық түрде жасалады, бұл сізге тек Win API қоңырауларына ғана емес, болашақта пайда болатын қоңырауларға қолдау көрсетуді жүзеге асыруға мүмкіндік береді. Жаңа нұсқа UWP (әмбебап Windows платформасы) мақсатты платформасына қолдауды қосады және өңдеу және жөндеу түрлерін жүзеге асырады.

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

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