Mozilla жобасы негізін қалаған, бірақ қазір Rust Foundation тәуелсіз коммерциялық емес ұйымының қолдауымен әзірленген Rust 1.78 жалпы мақсаттағы бағдарламалау тілінің шығарылымы жарияланды. Тіл жад қауіпсіздігіне назар аударады және қоқыс жинаушы мен жұмыс уақытын пайдалануды болдырмай, жоғары жұмыс параллелизміне қол жеткізу құралдарын қамтамасыз етеді (орындау уақыты стандартты кітапхананың негізгі инициализациясы мен қызмет көрсетуіне дейін қысқарады).
Rust жадты өңдеу әдістері әзірлеушіні көрсеткіштерді өңдеу кезіндегі қателерден сақтайды және жадтың төменгі деңгейін өңдеуге байланысты туындайтын мәселелерден қорғайды, мысалы, оны босатқаннан кейін жад аймағына қол жеткізу, нөлдік көрсеткіштерге сілтеме жасау, буфердің асып кетуі және т.б. Кітапханаларды тарату, құрастыруды қамтамасыз ету және тәуелділіктерді басқару үшін жоба Cargo пакетінің менеджерін әзірлейді. Crates.io репозиторийіне хостинг кітапханалары үшін қолдау көрсетіледі.
Жадтың қауіпсіздігі Rust бағдарламасында компиляция уақытында анықтамалық тексеру, объект иеленуін қадағалау, объектінің қызмет ету мерзімін (аумақтарын) қадағалау және кодты орындау кезінде жадқа қол жеткізудің дұрыстығын бағалау арқылы қамтамасыз етіледі. Rust сонымен қатар бүтін сандардың толып кетуінен қорғауды қамтамасыз етеді, пайдалану алдында айнымалы мәндерді міндетті түрде инициализациялауды талап етеді, стандартты кітапханада қателерді жақсы өңдейді, әдепкі бойынша өзгермейтін сілтемелер мен айнымалылар тұжырымдамасын қолданады, логикалық қателерді азайту үшін күшті статикалық теруді ұсынады.
Негізгі инновациялар:
- Компилятор шығарған қате туралы хабарларға әсер ету құралын қамтамасыз ететін "#[диагностикалық]" жаңа атрибут аттар кеңістігі ұсынылды. Жаңа кеңістіктегі біріншісі "#[diagnostic::on_unimlemented]" төлсипаты болып табылады, ол түр үшін іске асырылмаған сипатты пайдалану қажет болған жағдайда жіберілген қате туралы хабарларды теңшеу үшін пайдаланылуы мүмкін. #[diagnostic::on_unimlemented( message = ""ImportantTrait<{A}>" үшін менің хабарламам `{Self}` үшін орындалмаған", label = "Менің белгісім", ескертпе = "1-ескертпе", ескертпе = "Ескертпе 2" )] қасиет ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } қате[E32]: `ImportantTrait үшін менің хабарламам ` `String` —> src/main.rs:0277:32 үшін орындалмаған | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Менің жапсырмам | | | осы шақыру арқылы енгізілген шекпен талап етіледі | = анықтама: `Маңызды қасиет ` `String` үшін орындалмаған = ескертпе: 18-ескертпе = ескертпе: 12-ескертпе
- Қауіпті функцияларға қолданылатын алдын ала растау тексерулерін енді код генерациясына дейін кейінге қалдыруға болады, бұл осы тексерулерді стандартты кітапхананы "#[cfg(debug_assertions)]" режимінде құрастыру қажеттілігінсіз орындауға мүмкіндік береді. Тексерулерді іске қосу үшін кодтың сынағы немесе жөндеу құрастырылымдары үшін түзету растауларын қосу жеткілікті.
- Көрсеткіштер мен кесінділердің туралануына әсер ететін стандартты кітапханадағы функциялардың әрекеті енді орындалу уақытында болжамды және кіріс деректеріне байланысты. Көрсеткішті туралау үшін ығысуды есептейтін көрсеткіш::align_offset функциясы енді операция сәтсіз болған жағдайда ғана usize::MAX қайтарады. slice::align_to және slice::align_to_mut екеуі де, тілімдерді тураланған ортаңғы кесінді және бастапқы бастапқы және соңғы кесінділері бар көрініске түрлендіретін функциялары енді әрқашан ең үлкен ортаңғы бөлікті қайтарады.
- Келесілер тұрақты санатқа ауыстырылды:
- impl &Stdin үшін оқыңыз
- Кейбір std::error::Қатеге қатысты іске асыру үшін статикалық емес (статикалық емес) қызмет мерзімін пайдалануға рұқсат етіңіз.
- Іске асыру ?Өлшемді мәнге рұқсат етіледі.
- impl From io :: Қате үшін
- Barrier::new() функциясы тұрақты мәндердің орнына кез келген контексте "const" атрибутымен бірге пайдалану үшін тұрақтандырылды.
- Мақсатты платформалар үшін x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm және i-686vp- енді кем дегенде Windows 10 нұсқасы қажет.
- Қолдаудың үшінші деңгейі wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf және loongarch64-белгісіз-linux-musl платформалары үшін жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.
- Add wasm32-wasip1 мақсатты платформасын қолдаудың екінші деңгейі жүзеге асырылды. Қолдау көрсетудің екінші деңгейі құрастыру кепілдігін қамтиды.
- wasm32-wasi-preview1-threads платформасының атауы wasm32-wasip1-threads болып өзгертілді.
- Компилятор LLVM 18 пайдалануға ауыстырылды. x18-86 және x32-86 архитектуралары үшін LLVM 64 пайдаланған кезде, u128 және i128 түрлерімен байланысты ABI өзгертілді.
- Жүк пакті менеджерінде құлыптау файлдарының 4 нұсқасы (lockfile v4) тұрақтандырылды.
- Жүкте соңғы деректерді пайдалану туралы ақпарат бар тұрақтандырылған жаһандық кэш бар. Кэш SQLite көмегімен $CARGO_HOME/.global-cache ішінде орналастырылған және индекске, жәшік файлына, код каталогына, git клонына және git тексеруіне соңғы өзгерістерді көрсету үшін автоматты түрде жаңартылады.
Сонымен қатар, Borgo бағдарламалау тілі Go тіліне қарағанда мәнерлі болуға тырысады, бірақ Rust тіліне қарағанда күрделі емес. Borgo Go және Rust-тың ең жақсы мүмкіндіктерін біріктіріп, әр тілдің кемшіліктерін толтырады. Мысалы, Go бағдарламасы қарапайым және қарапайым, бірақ қауіпсіздіктің кеңейтілген түрін қамтамасыз етпейді. Rust тілі қауіпсіз бағдарламалау құралдарын қамтамасыз етеді, бірақ тым күрделі. Жобаны The Simple Haskell анықтамалығының авторы және Quad CI үздіксіз интеграциялық жүйесінің әзірлеушісі Марко Сампеллегрини әзірлеуде.

Borgo статикалық теруді, Go-like түрлерін және Rust тәрізді синтаксисті пайдаланады. Борго кодындағы жолдардың соңында нүктелі үтір міндетті емес. Borgo коды бар Go пакеттерімен толық үйлесімді Go ұсынуына құрастырылған. Компилятор коды Rust тілінде жазылған және ISC лицензиясы бойынша таратылады. fmt enum NetworkState пайдаланыңыз { Loading, Failed(int), Success(T), } struct Response { тақырып: жол, ұзақтығы: int, } fn main() { let res = Response { тақырып: “Hello world”, ұзақтығы: 0, } күй = NetworkState.Success(res) msg = күйге сәйкестік { NetworkState.Loading => “әлі жүктелуде”, NetworkState.Failed(код) => fmt.Sprintf (“Қате коды: %d”, код), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Ақпарат көзі: opennet.ru
