Dalja e Rust 1.93. Projektet Rex, Fjall 3 dhe Arti 1.9.0

Опубликован релиз языка программирования Rust 1.93, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • Встроенная в поставку Rust стандартная си-библиотека Musl, используемая при статической компоновке для целевых платформ «*-linux-musl» (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl и т.п.) на системах без Musl, обновлена до версии 1.2.5. Минимально поддерживаемая версия Musl при динамической компоновке также поднята до выпуска 1.2.5. Ранее в Rust использовалась версия Musl 1.2.3, в которой имелись проблемы в реализации DNS-резолвера. В версии Musl 1.2.4 в DNS-резолвер была добавлена возможность отправки запроса по TCP в случае неудачного обращения по UDP, что решило проблему с запросом больших DNS-записей и наладило совместимость с рекурсивными DNS-серверами, не поддерживающими отдачу части результата в обрезанных UDP-ответах. В версии Musl 1.2.5 в DNS-резолвере реализована обработка ответов с длинными последовательностями CNAME и решена проблема, из-за которой отбрасывались некоторые большие ответы, передаваемые через TCP.
  • Стандартная библиотека переработана для решения проблем с реентерабельностью при использовании в глобальных аллокаторах памяти, написанных на Rust, макроса std::thread_local! и функции std::thread::current, приводивших к бесконечной рекурсии. Для исключения ситуации, когда std::thread_local! и std::thread::current при попытке выделения памяти вызывали тот же аллокатор в котором используются, в них теперь напрямую применяется системный механизм выделения памяти.
  • Внутри блоков «asm!» с ассемблерным кодом разрешено использование атрибутов «cfg», что, например, позволяет управлять задействованием расширенных наборов команд CPU в контексте отдельных выражений внутри asm-блока (ранее атрибуты «cfg» могли задаваться только для asm-блока целиком). asm!( // или global_asm! или naked_asm! «nop», #[cfg(target_feature = «sse2»)] «nop», // … #[cfg(target_feature = «sse2»)] a = const 123, // only used on sse2 );
  • Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
    • <[MaybeUninit<T>]>::assume_init_drop
    • <[MaybeUninit<T>]>::assume_init_ref
    • <[MaybeUninit<T>]>::assume_init_mut
    • <[MaybeUninit<T>]>::write_copy_of_slice
    • <[MaybeUninit<T>]>::write_clone_of_slice
    • String::into_raw_parts
    • Vec::into_raw_parts
    • <iN>::unchecked_neg
    • <iN>::unchecked_shl
    • <iN>::unchecked_shr
    • <uN>::unchecked_shl
    • <uN>::unchecked_shr
    • <[T]>::as_array
    • <[T]>::as_array_mut
    • <*const [T]>::as_array
    • <*mut [T]>::as_mut_array
    • VecDeque::pop_front_if
    • VecDeque::pop_back_if
    • Duration::from_nanos_u128
    • char::MAX_LEN_UTF8
    • char::MAX_LEN_UTF16
    • std::fmt::from_fn
    • std::fmt::FromFn
  • Целевая платформа «riscv64a23-unknown-linux-gnu» переведена на второй уровень поддержки, который подразумевает гарантию сборки, но отсутствие гарантий при прохождении тестового набора.

Дополнительно можно отметить несколько связанных с Rust проектов:

  • Для ядра Linux развивается фреймворк Rex, позволяющий создавать дополнения для ядра Linux на языке Rust, которые можно использовать для расширения функциональности ядра вместо eBPF. Rex предоставляет те же гарантии безопасности, что и eBPF, но использует для изоляции и обеспечения безопасности возможности языка Rust и легковесный Runtime. Для подобных программ не применяется верификатор, а программы компилируются в нативный код компилятором Rust.

    В Rex-программах допускается использование подмножества языка Rust, предоставляющего гарантии безопасности. В текущем виде поддерживается 5 типов программ eBPF: kprobe, perf_event, tracepoint, xdp и tc. Имеется возможность вызывать вспомогательные функции eBPF, взаимодействовать с map-структурами eBPF, управлять ресурсами ядра, обрабатывать исключения и использовать обвязки и абстракции над структурами ядра.

  • Доступен выпуск Fjall 3, написанного на Rust встраиваемого хранилища, работающего с данными в формате ключ-значение. Хранение данных производится в форме лога c использованием LSM-дерева (Log-Structured-Merge), как в RocksDB, при котором изменения записываются через добавление данных в конец файла. Для обращения к БД предлагается API в стиле BTreeMap. Поддерживаются такие возможности, как пространства имён, прямой и обратный поиск по диапазонам, встроенное сжатие, сериализируемые транзакции, раздельное хранение ключей и связанных с ними очень больших значений, автоматическое фоновое обслуживание БД. Код открыт под лицензией Apache 2.0.
  • Проект Tor опубликовал выпуск Arti 1.9.0, реализации инструментария Tor, написанной на языке Rust. Когда код Arti достигнет уровня, способного полностью заменить вариант на Си, разработчики Tor намерены придать Arti статус основной реализации Tor и постепенно прекратить сопровождение реализации на Си. В новой версии продолжена реализация функциональности для релеев и serverësh директорий (Directory Authority), улучшена поддержка работы с динамически назначаемыми портами (proxy.socks_listen = «auto»), добавлен экспериментальный API для управления ключами для onion-сервисов.

Burimi: opennet.ru

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster