Издаване на Rust 1.97. Написаното на Rust ядро Zinnia и P2P системата Iroh с адресиране чрез ключове

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

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

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

Основни нововъведения:

  • По подразбиране е включена нова схема за декориране (mangling) на имената на функции, глобални променливи и структури от данни в генерираните обектни и изпълними файлове (-Csymbol-mangling-version=v0). Имената се декорират с цел предотвратяване на конфликти по време на свързване на различни програми, чрез прикрепяне на специфичен контекст, като пътя до модула и името на crate-пакета.

    По-ранната схема за декориране на имена, основана на Itanium ABI, имаше недостатъци, като замяна на параметрите на шаблони с нечетими хешове и наличието на части от компилатора, които не използват Itanium ABI, което изискваше използването на специфични за Rust декодери на имена. В Rust 1.97 по подразбиране е активирана схема за декориране, специално разработена за Rust и лишена от посочените недостатъци. Старата схема се планира да бъде премахната в един от следващите версии.

  • В пакетния мениджър cargo е вградена възможност за управление на отговора при генерирането на предупреждения от компилатора по време на изграждане. Добавена е променлива на средата CARGO_BUILD_WARNINGS, която може да приема три стойности: warn (по подразбиране) — показване на предупреждения на екрана; allow — скриване на изхода на предупрежденията; deny — обработка на предупрежденията като грешки, спиращи изграждането.

    В предишни версии, за да завършите изграждането след показване на предупреждение, трябваше да зададете «-Dwarnings» в RUSTFLAGS за компилатора, но при променяне на RUSTFLAGS пакетният мениджър cargo считаше изграждането за ново, не взимаше предвид данните в кеша и пресъздаваше целия проект отначало. Преместването на настройката на страната на cargo елиминира необходимостта от нулиране на кеша и пълна повторна компилация при смяна на режима на обработка на предупреждения, както и опрости включването на обработката на предупрежденията като грешки в системи за непрекъсната интеграция.

  • При създаването по подразбиране е вклучено показването на съобщенията, изведени от компоновчика. Съобщенията се показват под формата на предупреждения чрез специално правило за lint „linker_messages“, което не попада в стандартната група „warnings“. В същото време rustc филтрира съобщенията, които са типични фалшиви сработвания или нормално поведение, оставяйки предупреждения, които могат да показват проблеми, като предупреждения за остарели опции и нежелани настройки. По-рано информацията от компоновчика се показваше само при завършване с грешка, докато в противен случай всички съобщения бяха скрити. За връщане на старото поведение в Cargo.toml може да се добави: [lints.rust] linker_messages = „allow“
  • Нов набор от API е преведен в категорията стабилни, включително стабилизирани методи и реализации на типажи:
    • По подразбиране за RepeatN
    • Копие за ffi::FromBytesUntilNulError
    • Изпращане за std::fs::File за UEFI
    • ::isolate_highest_one
    • ::isolate_lowest_one
    • ::highest_one
    • ::lowest_one
    • ::bit_width
    • NonZero::isolate_highest_one
    • NonZero::isolate_lowest_one
    • NonZero::highest_one
    • NonZero::lowest_one
    • NonZero::bit_width
  • Признак „const“ прилаган в метода char::is_control.

Допълнително може да се отбележи, че наскоро бяха анонсирани проекти и събития, свързани с Rust:

  • Проектът zinnia развива модулно Unix-подобно ядро, написано на езика Rust и разпространявано под лицензия GPLv2. Ядрото поддържа POSIX интерфейси и някои разширения от BSD и Linux, като epoll и timerfd. За рисуване и организиране на входа са достъпни драйвери DRM (Direct Rendering Manager) и evdev. Реализираната функционалност е достатъчна за стартиране на среда за работен плот Xfce под управление на X-сървър и композитно сървър Weston на базата на Wayland. Поддържа се зареждане както в емулатор QEMU, така и на реално оборудване, такова каквото е лаптопа ThinkPad E14 G7.
  • Представен е релиз на комуникационната библиотека iroh 1.0, позволяваща установяване на мрежови връзки между приложения на различни хостове с свързване посредством криптографски ключове, вместо IP адреси (посочва се ключът, към който трябва да се свържете и iroh намира свързания с него хост и установява криптирана връзка, използвайки протокола QUIC). По възможност се установяват директни P2P връзки, но ако това не е възможно, се извършва обратно на работа през релей, които също така се използват за откриване на хостове по ключове. Възможно е стартиране на собствен релей или свързване към поддържани от общността публични релей.

    Сред разширените възможности: поддръжка на Multipath QUIC за доставяне на пакети едновременно по няколко маршрута, възможност за работа зад NAT, режим на статична конфигурация за свързване към локални устройства без достъп до интернет, възможност за компилиране в междинен код WASM за изпълнение в браузера, поддръжка за създаване на собствени транспортни средства, например, за свързване чрез Bluetooth, WiFi Aware или LoRa. Кодът е написан на Rust и се разпространява под лицензите Apache-2.0 и MIT. Достъпни са обвивки за Python, Node.js, Kotlin и Swift.

  • Авторът на сървърната JavaScript платформа Bun публикува статия с анализ на проекта за пренаписване на Bun от Zig на Rust, използвайки AI модела Claude Fable. Подчертава се, че Bun 1.3.14 ще бъде последното издание на Zig, а следващата версия Bun 1.4.0 вече ще бъде на Rust. Судя по проведените тестове, версията на Rust консумира значително по-малко памет и е с 2-5% по-бърза от версията на Zig. Размерът на изпълнимия файл в версията на Rust е намалял с 20%.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster