Rust 1.75 және unikernel Hermit 0.6.7 бағдарламалау тілінің шығарылымы

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

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

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

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

  • Жеке белгілерде “async fn” және “->impl Trait” белгісін пайдалану мүмкіндігі қосылды. Мысалы, “->impl Trait” көмегімен итераторды қайтаратын сипат әдісін жазуға болады: trait Container { fn items(&self) -> impl Iterator; } impl MyContainer үшін контейнер { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Сондай-ақ, "async fn" арқылы белгілер жасауға болады: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // келесіге кеңейтіледі: // fn fetch(&self, url: Url) -> impl Future; }

  • Көрсеткіштерге қатысты байт ығысуларын есептеуге арналған API қосылды. Жалаң көрсеткіштермен («*const T» және «*mut T») жұмыс істегенде көрсеткішке ығысуды қосу үшін әрекеттер қажет болуы мүмкін. Бұрын бұл үшін «size_of::()» өлшеміне сәйкес байт санын қосып, «::add(1)» сияқты конструкцияны қолдануға болады. Жаңа API бұл әрекетті жеңілдетеді және алдымен түрлерді «*const u8» немесе «*mut u8» түріне шығармай-ақ байт ығысуларын басқаруға мүмкіндік береді.
    • көрсеткіш::byte_add
    • көрсеткіш::байт_офсет
    • көрсеткіш::byte_offset_from
    • көрсеткіш::byte_sub
    • көрсеткіш ::wrapping_byte_add
    • көрсеткіш :: орау_байтының_ығысуы
    • көрсеткіш::wrapping_byte_sub
  • Rustc компиляторының өнімділігін арттыру бойынша жұмысты жалғастыру. Сілтемеден кейінгі кезеңде жұмыс істейтін және алдын ала дайындалған орындау профиліндегі ақпаратты пайдаланатын BOLT оңтайландырғышы қосылды. BOLT пайдалану процессор кэшін тиімдірек пайдалану үшін librustc_driver.so кітапхана кодының орналасуын өзгерту арқылы компилятордың орындалуын шамамен 2%-ға жылдамдатуға мүмкіндік береді.

    LLVM жүйесінде оңтайландыру сапасын жақсарту үшін "-Ccodegen-units=1" опциясы бар rustc компиляторын құру кіреді. Орындалған сынақтар “-Ccodegen-units=1” құрастыру жағдайында өнімділіктің шамамен 1.5%-ға артқанын көрсетеді. Қосылған оңтайландырулар әдепкі бойынша тек x86_64-белгісіз-linux-gnu платформасы үшін қосылады.

    Бұрын айтылған оңтайландыруларды Google Rust тілінде жазылған Android платформасының құрамдастарын құрастыру уақытын қысқарту үшін сынаған. Android құрастыру кезінде «-C codegen-units=1» қолдану бізге құралдар жинағының өлшемін 5.5%-ға азайтуға және оның өнімділігін 1.8%-ға арттыруға мүмкіндік берді, ал құралдар жинағының өзін құрастыру уақыты екі есе дерлік артты.

    Сілтеме уақытында қоқыс жинауды («--gc-бөлімдері») қосу өнімділікті 1.9%-ға дейін арттырды, сілтеме уақытын оңтайландыруды (LTO) 7.7%-ға дейін және профильге негізделген оңтайландыруларды (PGO) 19.8%-ға дейін қамтамасыз етті. Қорытындыда BOLT утилитасының көмегімен оңтайландырулар қолданылды, бұл құрастыру жылдамдығын 24.7% -ға дейін арттыруға мүмкіндік берді, бірақ құралдар жинағының өлшемі 10.9% ұлғайды.

    Rust 1.75 және unikernel Hermit 0.6.7 бағдарламалау тілінің шығарылымы

  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • Atomic*::from_ptr
    • FileTims
    • FileTimesExt
    • Файл::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Опция ::бір_тілік
    • Опция::as_mut_slice
    • көрсеткіш::byte_add
    • көрсеткіш::байт_офсет
    • көрсеткіш::byte_offset_from
    • көрсеткіш::byte_sub
    • көрсеткіш ::wrapping_byte_add
    • көрсеткіш :: орау_байтының_ығысуы
    • көрсеткіш::wrapping_byte_sub
  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын "const" атрибуты функцияларда қолданылады:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • МүмкінUninit :: нөлге тең
    • mem::дискриминант
    • mem::нөл
  • Қолдаудың үшінші деңгейі csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd және mipsel-unknown-netbsd платформалары үшін жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.

Сонымен қатар, гипервизордың немесе қосымша қабаттарсыз жалаң аппараттық құралдың үстінде жұмыс істей алатын дербес қосымшаларды құруға арналған құралдарды ұсынатын, Rust тілінде жазылған арнайы ядроны (unikernel) әзірлейтін Hermit жобасының жаңа нұсқасын атап өтуге болады. және операциялық жүйесіз. Құрылған кезде қолданба ОЖ ядросына және жүйелік кітапханаларға байланыстырмай, барлық қажетті функционалдылықты дербес жүзеге асыратын кітапханамен статикалық түрде байланысады. Жоба коды Apache 2.0 және MIT лицензиялары бойынша таратылады. Assembly Rust, Go, Fortran, C және C++ тілдерінде жазылған қолданбаларды дербес орындауға қолдау көрсетеді. Жоба сонымен қатар QEMU және KVM көмегімен Hermit-ті іске қосуға мүмкіндік беретін өзінің жүктеушісін әзірлеуде.

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

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