Опубликован релиз языка программирования Rust 1.98, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust нацелены на исключение ошибок при манипулировании указателями и защиту от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io. Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
Дополнительно можно отметить компрометацию популярного crate-пакета arrayref, насчитывающего более 53 млн загрузок за последние 90 дней и применяемого в качестве зависимости у 403 пакетов. Атакующие разместили в репозитории crates.io новые пакеты proc-macro1, proc-macro-en, aovine, arone, aronenao и tinymember, содержащие вредоносный код. После этого в репозитории были опубликованы новые выпуски пакетов arrayref 0.3.10, internment 0.8.7 и append-only-vec 0.1.9 в которые в качестве зависимости был добавлен вредоносный пакет proc-macro1. Вредоносная версия пакета arrayref была размещена 20 августа в 10:15 (MSK) и просуществовала до 11:41, после чего была удалена администраторами crates.io. С сопровождающим arrayref пока не удалось связаться для прояснения ситуации, но предполагается, что его учётные данные были перехвачены злоумышленниками. В пакете proc-macro1 вредоносное изменение присутствовало в сборочном скрипте и осуществляло загрузку исполняемого файла с внешнего сервера. Загруженный файл в Unix-системах сохранялся как /tmp/rust-setup, а в Windows - %TEMP%\rust-setup.ps1 или %TEMP%\rust-setup-launch.vbs.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66108
Методы работы с памятью в Rust нацелены на исключение ошибок при манипулировании указателями и защиту от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io. Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- Для типов с плавающей запятой f32 и f64 реализованы алгебраические методы для сложения, вычитания, умножения, деления и нахождения остатка, реализующие оптимизацию, похожую на опцию "-ffast-math" в компиляторах C/C++. Подобные методы допускают изменение порядка операций, когда это необходимо для оптимизаций, таких как векторизация циклов. Например, при вычислении "a + b + c + d" при использовании обычного сложения компилятор всегда выполнит вычисление в одном порядке "((a + b) + c) + d", а при использовании метода algebraic_add может сгруппировать выражение как "(a + b) + (c + d)" и выполнить "(a + b)" и "(c + d)" параллельно при помощи инструкций SIMD. Ценой применения алгебраических методов является недетерминированность результатов вычисления, которые могут меняться в пределах погрешности. Для всех примитивных целочисленных типов реализован встроенный метод "format_into" для преобразования чисел в строки, который может применяться вместо пакета itoa. В качестве параметра передаётся буфер NumBuffer‹Self›, размер которого гарантированно достаточен для записи любого значения используемого типа в десятичном виде. На выходе возвращается отформатированная строка &str, время жизни которой привязано к буферу. Взаимодействие между обвязкой ManuallyDrop и умным указателем Box теперь не приводит к неопределённому поведению. В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей: str::substr_range
- [T]::subslice_range
- core::fmt::NumBuffer
- ‹{integer}›::format_into
- Send/Sync for std::process::CommandArgs
- {fN}::algebraic_add
- {fN}::algebraic_sub
- {fN}::algebraic_mul
- {fN}::algebraic_div
- {fN}::algebraic_rem
- NonZero‹{integer}›::from_str_radix
- String::from_utf16le
- String::from_utf16le_lossy
- String::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomic‹T›::from_mut
- Atomic‹T›::get_mut_slice
- Atomic‹T›::from_mut_slice
- std::range::legacy
Дополнительно можно отметить компрометацию популярного crate-пакета arrayref, насчитывающего более 53 млн загрузок за последние 90 дней и применяемого в качестве зависимости у 403 пакетов. Атакующие разместили в репозитории crates.io новые пакеты proc-macro1, proc-macro-en, aovine, arone, aronenao и tinymember, содержащие вредоносный код. После этого в репозитории были опубликованы новые выпуски пакетов arrayref 0.3.10, internment 0.8.7 и append-only-vec 0.1.9 в которые в качестве зависимости был добавлен вредоносный пакет proc-macro1. Вредоносная версия пакета arrayref была размещена 20 августа в 10:15 (MSK) и просуществовала до 11:41, после чего была удалена администраторами crates.io. С сопровождающим arrayref пока не удалось связаться для прояснения ситуации, но предполагается, что его учётные данные были перехвачены злоумышленниками. В пакете proc-macro1 вредоносное изменение присутствовало в сборочном скрипте и осуществляло загрузку исполняемого файла с внешнего сервера. Загруженный файл в Unix-системах сохранялся как /tmp/rust-setup, а в Windows - %TEMP%\rust-setup.ps1 или %TEMP%\rust-setup-launch.vbs.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66108