Руст 1.61 Издание за програмски јазик

Објавено е објавувањето на програмскиот јазик за општа намена Rust 1.61, основан од проектот Mozilla, но сега развиен под покровителство на независната непрофитна организација Rust Foundation. Јазикот се фокусира на безбедноста на меморијата и обезбедува средства за постигнување на висок паралелизам на работните места, притоа избегнувајќи употреба на собирач на ѓубре и време на работа (времето на работа е сведено на основна иницијализација и одржување на стандардната библиотека).

Методите за ракување со меморијата на Rust го спасуваат развивачот од грешки при манипулирање со покажувачите и го штитат од проблеми што се јавуваат поради ракување со меморијата на ниско ниво, како што се пристап до мемориската област откако ќе се ослободи, дереференцирање на нула покажувачи, пречекорувања на баферот итн. За да се дистрибуираат библиотеки, да се обезбедат градби и да управуваат со зависности, проектот го развива менаџерот на пакети Cargo. Репозиториумот crates.io е поддржан за хостирање библиотеки.

Безбедноста на меморијата е обезбедена во Rust за време на компајлирањето преку проверка на референци, следење на сопственоста на објектот, следење на животниот век на објектите (обеми) и проценка на исправноста на пристапот до меморијата за време на извршувањето на кодот. Rust исто така обезбедува заштита од прелевање на цели броеви, бара задолжителна иницијализација на вредностите на променливите пред употреба, подобро се справува со грешките во стандардната библиотека, стандардно го применува концептот на непроменливи референци и променливи, нуди силно статичко пишување за да се минимизираат логичките грешки.

Главните иновации:

  • Можно е да ги дефинирате вашите сопствени шифри за враќање од главната функција. Првично, главната функција на Rust можеше да го врати само типот „()“ (единица), што секогаш укажуваше на успешен статус на излез, освен ако развивачот експлицитно не ја повика функцијата „process::exit(code)“. Во Rust 1.26, користејќи ја нестабилната карактеристика за завршување во главната функција, беше можно да се вратат вредностите „Ok“ и „Err“, што одговараат на шифрите EXIT_SUCCESS и EXIT_FAILURE во програмите C. Во Rust 1.61, карактеристиката Termination е стабилна, а посебен тип ExitCode е предложен за да претставува специфичен повратен код, кој ги апстрахира типовите на враќање специфични за платформата обезбедувајќи ги и претходно дефинираните константи SUCCESS и FAILURE, и методот From да се врати прилагодена шифра за враќање. користете std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Излезен код::УСПЕХ }
  • Стабилизирани се дополнителните можности на функциите дефинирани со изразот „const fn“, кои можат да се наречат не само како редовни функции, туку и да се користат во кој било контекст наместо константи. Овие функции се пресметуваат во времето на компајлирање, а не при извршување, така што тие се предмет на одредени ограничувања, како што е можноста за читање само од константи. Во новата верзија, основните операции со покажувачи на функции се дозволени внатре во функциите const (дозволено е создавање, пренесување и фрлање покажувачи, но не повикување функција по покажувач); граници на особини за генерички параметри на функциите const како што се T: Copy; динамично распоредливи особини (dyn Trait); импл Типови на особини за аргументи на функции и повратни вредности.
  • Протокот се справува со Stdin, Stdout и Stderr во std::io сега имаат статичен век на траење („статички“) кога е заклучен, што овозможува конструкции како „let out = std::io::stdout().lock();“ со добивање рачка и поставување брава во еден израз.
  • Нов дел од API е преместен во категоријата стабилни, вклучувајќи ги и методите и имплементацијата на карактеристиките се стабилизирани:
    • Пин::static_mut
    • Пин::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Пишувај за курсорот<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::процес::Престанок
    • std::thread::JoinHandle::is_finished
  • Атрибутот „const“, кој ја одредува можноста да се користи во кој било контекст наместо константи, се користи во функции:
    • <*const T>::offset и <*mut T>::offset
    • <*const T>::wrapping_offset и <*mut T>::wrapping_offset
    • <*const T>::add и <*mut T>::add
    • <*const T>::sub и <*mut T>::sub
    • <*const T>::wrapping_add и <*mut T>::wrapping_add
    • <*const T>::wrapping_sub и <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_опсег
    • <[T]>::as_mut_ptr_опсег

Дополнително, можете да го забележите написот „Рѓа: критична ретроспектива“ со резиме на впечатоците од јазикот Rust откако напишавте 100 илјади линии код во него за време на развојот на оперативниот систем Xous микрокернел што се користи во фирмверот. Недостатоците вклучуваат тешко разбирлива синтакса, некомплетност и континуиран развој на јазикот, недостаток на повторливи градби, типични проблеми со довербата во зависност во Crates.io и потребата да се одржи одредена дисциплина за пишување безбеден код. Карактеристиките што ги надминаа очекувањата вклучуваат алатки за рефакторирање на кодот и преработка на „хакови“ додадени за време на брзото прототипирање.

Извор: opennet.ru

Додадете коментар