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

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

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

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

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

  • Негізгі функциядан өз қайтару кодтарын анықтауға болады. Бастапқыда Rust негізгі функциясы тек «()» (бірлік) түрін қайтара алады, ол әрқашан сәтті шығу күйін көрсетеді, егер әзірлеуші ​​«process::exit(code)» функциясын нақты атамаса. Rust 1.26-да негізгі функциядағы тұрақсыз Аяқтау белгісін пайдаланып, C бағдарламаларындағы EXIT_SUCCESS және EXIT_FAILURE кодтарына сәйкес келетін «Ok» және «Err» мәндерін қайтаруға болады. Rust 1.61 нұсқасында Аяқтау белгісі тұрақты етілді және алдын ала анықталған SUCCESS және FAILURE тұрақты мәндерін және From әдісін қамтамасыз ету арқылы платформаға тән қайтару түрлерін абстракциялайтын арнайы қайтару кодын көрсету үшін бөлек ExitCode түрі ұсынылды. ерікті қайтару кодын қайтару үшін. std::process::ExitCode пайдаланыңыз; fn main() -> ExitCode { if !check_foo() { ExitCode::from(8) қайтарады; } Шығу коды :: СӘТТІ }
  • “const fn” өрнегі арқылы анықталған функциялардың қосымша мүмкіндіктері тұрақтандырылды, оларды тек тұрақты функциялар ретінде ғана емес, сонымен қатар тұрақты мәндердің орнына кез келген контекстте қолдануға болады. Бұл функциялар орындау уақытында емес, компиляция уақытында есептеледі, сондықтан олар тек тұрақты мәндерден оқу мүмкіндігі сияқты белгілі бір шектеулерге ұшырайды. Жаңа нұсқада const функцияларының ішінде функция көрсеткіштерімен негізгі операцияларға рұқсат етіледі (көрсеткіштерді жасауға, жіберуге және трансляциялауға рұқсат етіледі, бірақ функцияны көрсеткіш арқылы шақыруға болмайды); T сияқты const функцияларының жалпы параметрлері үшін белгілер шекаралары: Көшіру; динамикалық түрде жіберілетін белгілер (dyn Trait); impl Функция аргументтері мен қайтарылатын мәндерге арналған қасиет түрлері.
  • Ағын std::io ішіндегі Stdin, Stdout және Stderr өңдейді енді құлыпталған кезде статикалық қызмет ету мерзімі («статикалық») бар, бұл «let out = std::io::stdout().lock();» сияқты құрылымдарға мүмкіндік береді. тұтқаны алу және бір өрнекте құлыпты орнату арқылы.
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Курсор үшін жазу
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Тоқтату
    • std::thread::JoinHandle::is_finished
  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын "const" атрибуты функцияларда қолданылады:
    • ::offset және ::offset
    • ::wrapping_offset және ::wrapping_offset
    • ::add және ::add
    • ::sub және ::sub
    • ::wrapping_add және ::wrapping_add
    • ::wrapping_sub және ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_аралық

Сонымен қатар, микробағдарламада қолданылатын Xous микроядросының операциялық жүйесін әзірлеу кезінде 100 мың жолдық кодты жазғаннан кейін Rust тілінің әсерлерінің қысқаша мазмұны бар «Rust: Critical Retrospective» мақаласын атап өтуге болады. Кемшіліктерге түсіну қиын синтаксис, тілдің толық емес және үздіксіз дамуы, қайталанатын құрылымдардың жоқтығы, Crates.io-ға тәуелділік сенімінің әдеттегі мәселелері және қауіпсіз кодты жазу үшін белгілі бір тәртіпті сақтау қажеттілігі жатады. Күтулерден асатын мүмкіндіктерге жылдам прототиптеу кезінде қосылған кодты қайта өңдеу және «бұзуларды» қайта өңдеуге арналған құралдар кіреді.

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

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