Publikimi i gjuhës programuese Rust 1.61

Gjuha e programimit për qëllime të përgjithshme Rust 1.61, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.

Risitë kryesore:

  • Предоставлена возможность определения собственных кодов возврата из функции main. Изначально функция main в Rust могла возвращать только тип «()» (unit), что всегда указывало на успешный статус завершения, если разработчиком явно не вызвана функция «process::exit(code)». В Rust 1.26 при помощи нестабильного типажа Termination в функции main была предоставлена возможность возвращение значений «Ok» и «Err», соответствующих кодам EXIT_SUCCESS и EXIT_FAILURE в программах на языке Си. В Rust 1.61 типаж Termination переведён в разряд стабильных, а для представления конкретного кода возврата предложен отдельный тип ExitCode, который абстрагирует специфичные для платформы типы возвращаемых значений, предоставляя как предопределённые константы SUCCESS и FAILURE, так и метод From<u8> для возвращения произвольного кода возврата. use std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(42); } ExitCode::SUCCESS }
  • Стабилизированы дополнительные возможности функций, определённых с использованием выражения «const fn», которые могут вызываться не только как обычные функции, но и использоваться в любом контексте вместо констант. Данные функции вычисляются на этапе компиляции, а не в ходе выполнения, поэтому на них накладываются определённые ограничения, такие как возможность чтения только из констант. В новой версии внутри const-функций разрешены базовые операции с указателями на функции (разрешено создание, передача и приведение указателей, но не вызов функции по указателю); ограничения типажей (trait bounds) для обобщённых параметров const-функций, таких как T: Copy; динамически диспетчеризируемые типажи (dyn Trait); типы impl Trait для аргументов и возвращаемых значений функции.
  • Дескрипторы потоков Stdin, Stdout и Stderr в std::io теперь имеют cтатическое время жизни («‘static») при блокировке, что позволяет использовать конструкции вида «let out = std::io::stdout().lock();» с получением дескриптора и выставлением блокировки в одном выражении.
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Write для Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Termination
    • std::thread::JoinHandle::is_finished
  • Atributi "const", i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret në funksionet:
    • <*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_range
    • <[T]>::as_mut_ptr_range

Дополнительно можно отметить статью «Rust: A Critical Retrospective» с обобщением впечатлений о языке Rust после написания на нём 100 тысяч строк кода в процессе разработки микроядерной операционной системы Xous, используемой в прошивках. Из недостатков отмечается трудный для восприятия синтаксис, незавершённость и продолжение развития языка, отсутствие повторяемых сборок, типовые проблемы с доверием к зависимостям в Crates.io, необходимость соблюдения определённой дисциплины для написания безопасного кода. Из возможностей превзошедших ожидания упоминаются средства для рефакторинга кода и переделки «хаков», добавленных при быстром создании прототипов.

Burimi: opennet.ru

Shto një koment