Издаване на език за програмиране Rust 1.63

Езикът за програмиране с общо предназначение Rust 1.63, основан от проекта Mozilla, но сега разработен под егидата на независимата организация с нестопанска цел Rust Foundation, беше пуснат. Езикът се фокусира върху безопасността на паметта и предоставя средствата за постигане на висок паралелизъм на работата, като същевременно се избягва използването на събирач на отпадъци и време за изпълнение (времето за изпълнение е намалено до основна инициализация и поддръжка на стандартната библиотека).

Методите за обработка на паметта на Rust спасяват разработчика от грешки при манипулиране на указатели и предпазват от проблеми, които възникват поради обработка на паметта на ниско ниво, като достъп до област на паметта, след като тя е била освободена, дерефериране на нулеви указатели, препълване на буфер и т.н. За разпространение на библиотеки, предоставяне на компилации и управление на зависимости, проектът разработва мениджъра на пакети Cargo. Хранилището crates.io се поддържа за хостване на библиотеки.

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

Основни иновации:

  • Добавен е std::thread::scope API, който ви позволява да създавате нишки с обхват. За разлика от наличните преди нишки, новият std::thread::scope API позволява предаването на заемане на нестатични данни, докато нишките, създадени с помощта на класическия std::thread::spawn API, трябваше да притежават всички предадени аргументи и не можеха да получат заети променливи. std::thread::scope API гарантира, че всички създадени нишки се прекратяват, преди данните да бъдат върнати, осигурявайки адекватна сигурност за механизма за заемане.
  • Предложени са нови типове обвивки за файлови дескриптори - BorrowedFd и OwnedFd, които осигуряват заемане и собственост. Типовете са маркирани с "#[repr(transparent)]", което им позволява да бъдат използвани директно във външни C обвързвания по начин, съобразен със собствеността.
  • Осигурена възможност за извикване на Condvar::new, Mutex::new и RwLock::new в контекста на константи за създаване на глобални статични стойности на Mutex, RwLock и Condvar без използване на пакети lazy_static.
  • За функции като fn foo(стойност: T, f: impl Copy) е разрешен синтаксис като „foo::(32, 3)“, като изрично се посочва типът на генеричното.
  • Преходът към използване на техниката NLL (Non-Lexical Lifetimes) за идентифициране на проблеми със заемане на променливи е завършен. NLL взема под внимание на ниво набор от указатели в графиката на потока на изпълнение, което прави възможно повишаването на качеството на проверката за заемане на променливи (проверка на заемане) и позволява изпълнението на някои типове правилен код, използването на което преди това е довело до грешка. Поддръжката за стария механизъм, който използваше доживотно обвързване на лексикално ниво, вече е напълно премахната от rustc и използването на новия NLL е внедрено навсякъде.
  • Нова част от API е преместена в категорията на стабилни, включително методите и имплементациите на характеристиките са стабилизирани:
    • масив::от_fn
    • Box::into_pin
    • BinaryHeap::try_reserve
    • BinaryHeap::try_reserve_exact
    • OsString::try_reserve
    • OsString::try_reserve_exact
    • PathBuf::try_reserve
    • PathBuf::try_reserve_exact
    • Път::try_exists
    • Ref::filter_map
    • RefMut::filter_map
    • NonNull::::len
    • ToOwned::clone_into
    • Ipv6Addr::to_ipv4_mapped
    • unix::io::AsFd
    • unix::io::BorrowedFd
    • unix::io::OwnedFd
    • windows::io::AsHandle
    • windows::io::BorrowedHandle

      Източник: opennet.ru
Купете надежден хостинг за сайтове с DDoS защита, VPS VDS сървъри 🔥 Купете надежден уеб хостинг със защита от DDoS атаки, VPS VDS сървъри | ProHoster