rust_code | Unsorted

Telegram-канал rust_code - Rust

8052

Rust programming language По всем вопросам- @haarrp @ai_machinelearning_big_data - машинное обучение @programming_books_it - бесплатные it книги @pythonl - 🐍 @ArtificialIntelligencedl - AI @datascienceiot - ml 📚 #VRHSZ

Subscribe to a channel

Rust

🎥 Cap — open-source проект Cap, предлагающий функционал, аналогичный популярному сервису Loom. Инструмент уже сейчас позволяет записывать и редактировать видео прямо с рабочего стола, а в ближайших планах — запуск self-hosted версий для Vercel и Render.

Гибридная архитектура проекта сочетает Rust для десктоп-приложения и Next.js для веб-версии, с единой системой компонентов на React. Разработчики активно привлекают сообщество к доработке, особенно в части создания инструкций по самостоятельному развертыванию.

🤖 GitHub

@react_tg

Читать полностью…

Rust

👣 Задача: "Безопасная многопоточная очередь с приоритетами в Rust"

📌 Условие:

Реализуйте потокобезопасную структуру данных — очередь с приоритетами (`PriorityQueue`), которая:

- Позволяет добавлять элементы с приоритетом через push(value: T, priority: u32).
- Позволяет забирать элемент с наивысшим приоритетом через pop() -> Option<T>.
- Гарантирует:
- Безопасную работу из нескольких потоков без блокировок на долгие периоды (желательно через минимальные локи или атомарные операции).
- Отдачу элементов в порядке убывания приоритета.
- Высокую производительность при массовых операциях.

Ограничения:

- Можно использовать стандартные библиотеки Rust (`std::sync`, `std::collections`).
- Нельзя использовать внешние библиотеки вроде tokio, crossbeam, rayon и др.
- Структура должна быть универсальной (`Generic`), т.е. работать с любыми типами данных.

---

▪️ Подсказки:

- Для внутреннего хранения можно использовать BinaryHeap из std::collections.
- Для обеспечения многопоточности можно использовать Arc<Mutex<...>>.
- Чтобы минимизировать блокировки, можно подумать о:
- Разделении кучи на несколько шардов (`sharding`),
- Использовании тонкой блокировки только на операции изменения состояния.

---

▪️ Что оценивается:

- Умение правильно работать с владением (`ownership`) и заимствованием (`borrowing`) в многопоточной среде.
- Аккуратное управление блокировками (`Mutex`, `RwLock`).
- Оптимизация под высокую нагрузку (минимизация времени блокировки).
- Чистота и читабельность кода.
- Способность правильно обрабатывать ошибки (`PoisonError` при падении потока).

---

▪️ Разбор возможного решения:

Идея архитектуры:

- Основная структура — Arc<Mutex<BinaryHeap<...>>>.
- Каждый push и pop блокирует мьютекс на короткое время (захватывает лок на минимальное изменение).
- При push(value, priority):
- Оборачиваем значение в структуру, которая реализует Ord так, чтобы приоритет был главным критерием сортировки.
- При pop():
- Просто pop() из BinaryHeap.
- Обработка ошибок:
- При отравлении мьютекса (`PoisonError`) безопасно восстанавливать структуру или пробрасывать ошибку выше.

---

▪️ Мини-пример структуры:


use std::collections::BinaryHeap;
use std::sync::{Arc, Mutex};

#[derive(Eq, PartialEq)]
struct Item<T> {
priority: u32,
value: T,
}

impl<T> Ord for Item<T> {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
other.priority.cmp(&self.priority) // обратный порядок для max-heap
}
}

impl<T> PartialOrd for Item<T> {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
Some(self.cmp(other))
}
}

pub struct PriorityQueue<T> {
heap: Arc<Mutex<BinaryHeap<Item<T>>>>,
}

impl<T> PriorityQueue<T> {
pub fn new() -> Self {
PriorityQueue {
heap: Arc::new(Mutex::new(BinaryHeap::new())),
}
}

pub fn push(&self, value: T, priority: u32) {
let mut heap = self.heap.lock().unwrap();
heap.push(Item { priority, value });
}

pub fn pop(&self) -> Option<T> {
let mut heap = self.heap.lock().unwrap();
heap.pop().map(|item| item.value)
}
}


---

▪️ Возможные подводные камни:

- ❗ Не обработать PoisonError — если поток паникует при блокировке, вся очередь будет "сломана".
- ❗ Долгая блокировка внутри push или pop, особенно при больших объемах данных.
- ❗ Возможная гонка состояний, если попытаться вручную обойти Mutex через небезопасный код (`unsafe`).

---

▪️ Дополнительные вопросы на собеседовании:

- Как модифицировать структуру для поддержки тайм-аутов на pop() (если очередь пуста — ждать максимум N миллисекунд)?
- Как бы вы реализовали "разделение очереди на несколько шардов" для снижения конкуренции потоков?
- Как сделать неблокирующую версию через Atomic примитивы?

---

@rust_code

Читать полностью…

Rust

👣 Tessa-Rust-T1-7B-Q8_0-GGUF — компактная 8-битная версия Rust-ориентированной модели Tessa-Rust-T1 в формате GGUF для llama.cpp.

Создана для генерации и автодополнения кода на Rust с учётом лучших практик языка.
Hugging Face

🚀 Обзор модели
Архитектура: трансформер на базе Qwen2.5-Coder-7B-Instruct, дообученный на специализированном Rust-датаcете от Tesslate.

Цель: автономная генерация идиоматичного Rust-кода — функции, структуры, трейты и модули; интеграция в AI-агенты для автоматизации backend-разработки и CLI-утилит.
Hugging Face

Размер: ~7.62 B параметров (после квантования Q8_0) → файл ~8.1 GB в формате GGUF.


⚙️ Ключевые особенности
Глубокое Rust-мышление: поддерживает включение «think-тегов» в промпт для структурированного, многоэтапного рассуждения перед выдачей результата.

Контекстно-чувствительная генерация: учитывает зависимости (crates), lifetimes и идиомы Rust, что снижает количество ошибок после генерации.

Интеграция с агентами: модель готова для использования в автономных системах разработки, быстрой генерации backend-логики, тестов и CLI-утилит.

https://huggingface.co/Tesslate/Tessa-Rust-T1-7B-Q8_0-GGUF


@rust_code

Читать полностью…

Rust

💡 Задача Linux: Пропажа файла после echo

У вас есть файл /tmp/testfile с важным содержимым. Вы решили добавить в него строку "Hello, world!" с помощью команды:


echo "Hello, world!" > /tmp/testfile

Однако после выполнения этой команды вы замечаете, что всё старое содержимое исчезло и осталась только одна строка "Hello, world!".

Вопрос:
Почему это произошло? Как правильно было добавить строку, не потеряв содержимое?

✅ Решение и объяснение:
🔍 Что делает >?
Символ > в Bash — это перезапись (truncate) файла. Когда вы пишете:

```bash
echo "Hello, world!" > /tmp/testfile```
Это значит:

Shell открывает файл на запись с обнулением (truncate).

Весь предыдущий контент удаляется, прежде чем echo записывает новую строку.

Вот подвох: даже если echo кажется безобидной командой, сам процесс перенаправления (>) выполняется до запуска echo.

✅ Как сделать правильно?
Чтобы добавить строку, нужно использовать >>, а не >:

```bash
echo "Hello, world!" >> /tmp/testfile
```
>> открывает файл в режиме append, не трогая текущее содержимое.

⚠️ Бонусный подвох (для профи)
Выполните это:

```bash
cat /tmp/testfile > /tmp/testfile
```
После этого файл станет пустым. Почему?

➡️ Ответ: cat читает из /tmp/testfile, но перенаправление > делает truncate сразу, еще до запуска cat. То есть:

Файл обнуляется,

Потом cat читает его… но он уже пустой!

Чтобы избежать такого поведения, можно использовать временный файл:

```bash
cat /tmp/testfile > /tmp/tmpfile && mv /tmp/tmpfile /tmp/testfile```

Читать полностью…

Rust

Профили времени компиляции в Rust: зачем, как и когда

Возможность выбирать профиль времени компиляции в Rust может повысить производительность, размер, удобство сопровождения, безопасность и переносимость вашего кода.

Ниже приведены несколько аргументов в пользу того, почему вам следует использовать их при работе: https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3

#rust

@rust_code

Читать полностью…

Rust

🦀 less_slow.rs — продвинутый Rust

Это практическое руководство по написанию высокопроизводительного кода на Rust.

Цель — увеличить скорость и глубже понять, как работает производительный Rust-код.

🚀 В проекте:

• Сравнение async и sync подходов
• Работа с кеш-френдли структурами и layout-оптимизациями
• SIMD-ускорения и многопоточность
• Разбор быстродействия через микробенчмарки
• Примеры быстрой сериализации и парсинга (JSON, Arrow, Parquet)
• Работа с полями struct, layout, memory alignment

📦 Используемые библиотеки:
rayon, tokio, simd, polars, serde, simd-json, tracing, mimalloc

💡 Must-read, если ты хочешь не просто писать на Rust, а писать быстрый и эффективный Rust-код.

🔧 Еще в серии:

🧠 less_slow.cpp — C++ без тормозов: ассемблер, кеши, SIMD, аллокации, парсинг JSON и трюки с памятью
👉 github.com/ashvardanian/less_slow.cpp

🐍 less_slow.py — Python на максималках: pandas vs polars, Cython, PyO3, Numba, Parquet, zero-copy


📚 Все проекты сопровождаются примерами, микробенчмарками и понятными объяснениями.

📚 Репозиторий:
github.com/ashvardanian/less_slow.rs

@rust_code

Читать полностью…

Rust

👣 Вопрос:
Какие строки и в каком порядке будут выведены на консоль при запуске этой программы? Приведите полный список выводимых сообщений.этого кода.


use std::mem;

struct Tracer(&'static str);

impl Drop for Tracer {
fn drop(&mut self) {
println!("Dropping {}", self.0);
}
}

struct Container {
tracer: Tracer,
}

fn make_tracer(name: &'static str) -> Tracer {
println!("Creating {}", name);
Tracer(name)
}

fn main() {
let a = make_tracer("a");
let b = make_tracer("b");
{
let temp = make_tracer("temp");
println!("Inside block");
// temp перемещается в c
let c = temp;
println!("Exiting block");
} // <- здесь c (то есть «temp») умирает

let mut container = Container {
tracer: make_tracer("container1"),
};
// замена поля: старый контейнер1 будет сброшен
container.tracer = make_tracer("container2");

println!("Before dropping b explicitly");
mem::drop(b);
println!("End of main");
} // <- здесь умирают: container.tracer ("container2"), затем a


🔜 Ответ
Вот что выведется на консоль, построчно:
```bash
Creating a
Creating b
Creating temp
Inside block
Exiting block
Dropping temp
Creating container1
Creating container2
Dropping container1
Before dropping b explicitly
Dropping b
End of main
Dropping container2
Dropping a```

Пояснение по шагам:

let a = make_tracer("a");
Сначала вызывается make_tracer("a"), который печатает
Creating a
и возвращает Tracer("a").

let b = make_tracer("b");
Аналогично:
Creating b

Блок { … }:

let temp = make_tracer("temp"); → Creating temp

println!("Inside block"); → Inside block

let c = temp; — просто перемещение, без нового вывода.

println!("Exiting block"); → Exiting block

В конце блока выходит из области видимости c (он же temp), срабатывает Drop → Dropping temp

Инициализация container:

rust
let mut container = Container {
tracer: make_tracer("container1"),
};
→ Creating container1

Перезапись поля tracer:

```rust
container.tracer = make_tracer("container2");
Сначала вычисляется правая часть → Creating container2.
Затем старый container.tracer (то есть container1) сбрасывается → Dropping container1.```

Явное удаление b:

```rust
println!("Before dropping b explicitly");
mem::drop(b);
→ Before dropping b explicitly
Затем drop(b) вызывает Drop для b → Dropping b```

Выход из main:

```rust
println!("End of main");
→ End of main```

После этого по правилам Rust объекты уничтожаются в порядке обратном созданию (LIFO):

Сначала поле container.tracer (уже “container2”) → Dropping container2

Затем переменная a → Dropping a

Таким образом и получается приведённая последовательность.

Читать полностью…

Rust

👣 garde — это библиотека для валидации данных в Rust 🦀, то есть проверки, что структура или переменные соответствуют определённым правилам (например, "email должен быть валидным", "возраст больше 18", "строка не пустая" и т.д.).

🧠 garde позволяет:

✅ Легко описывать правила валидации прямо внутри структур (через атрибуты).

🔁 Работать с вложенными структурами (inner types).

🧊 Поддерживает newtypes — обёртки над типами.

🛠️ Писать свои кастомные валидаторы.

⚡ Проверка происходит во время исполнения, но декларативно выглядит как часть типа.

📦 Пример использования
rust


use garde::Validate;

#[derive(Validate)]
struct User {
#[garde(length(min = 3))]
username: String,

#[garde(email)]
email: String,
}


Тут username должен быть минимум из 3 символов, а email — валидный адрес.

GitHub: https://github.com/jprochazk/garde

#rustlang #type #validation #programming #library #opensource

Читать полностью…

Rust

🎶 Glicol — это экспериментальная среда для live-кодинга, где звуки рождаются из соединения узлов, как в модульном синтезаторе.

Написанный на Rust, он работает где угодно: в браузере, как VST-плагин или даже на аппаратуре вроде Bela.

Можно начинать с простых битов, а потом углубляться в сэмплерные точные синтезы — без необходимости устанавливать что-либо. Особенность Glicol — в его низком пороге входа, но и без ограничений для профессионалов.

🤖 GitHub

@rust_code

Читать полностью…

Rust

🚀 Выпуск Rust 1.86. Подготовка официальной спецификации языка Rust

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

Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.

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

🔗 Основные новшества
🔗Описание релиза

@rust_code

Читать полностью…

Rust

🖥 Simon — легковесный веб-мониторинг для систем с поддержкой Docker и отслеживанием ресурсов.

Основное: мониторинг CPU, памяти, диска и сети в реальном времени, адаптивный интерфейс, оповещения при превышении порогов, единый бинарник без зависимостей.

Есть аутентификация через bcrypt и уведомления с вебхуками для Discord, Slack и др.

📌 Github

Читать полностью…

Rust

🖥 Hoppscotch — это открытая платформа для разработки API, предназначенная для упрощения тестирования и взаимодействия с API!

💡 Она предоставляет удобный и быстрый интерфейс для отправки HTTP-запросов и получения ответов в реальном времени. Поддерживаются различные HTTP-методы, включая GET, POST, PUT, PATCH, DELETE и другие. Платформа также предлагает настраиваемые темы оформления и возможность установки в виде прогрессивного веб-приложения (PWA).

🔐 Лицензия: MIT

🖥 Github


@rust_code

Читать полностью…

Rust

🎯 Coq-of-Rust — это инструмент для формальной верификации кода на Rust. Он преобразует подмножество Rust в спецификации на языке Coq, позволяя доказывать корректность программ математическими методами.

Проект разработан для повышения надежности критических систем (например, блокчейнов, embedded-решений), где ошибки недопустимы.

🔥 Основные функции
Трансляция Rust → Coq:
Конвертирует структуры, перечисления (enum), трейты (trait), методы и выражения в эквивалентный код на Coq.

Поддержка системы владения:
Учитывает правила заимствования и времени жизни (lifetimes), сохраняя семантику Rust на уровне спецификаций.

Генерация теорем:
Автоматически создает условия для доказательства свойств (например, отсутствие паник, корректность алгоритмов).

Coq-of-Rust — это шаг к математически верифицируемому Rust. Если вы разрабатываете системы, где цена ошибки высока, этот инструмент поможет превратить код в набор теорем, которые можно строго доказать.

Совет: Начните с примеров из репозитория, чтобы понять, как транслируются типичные Rust-конструкции.

https://github.com/formal-land/coq-of-rust

@rust_code

Читать полностью…

Rust

🎉🎉🎉 Rust 1.85.1 – новый релиз

Сегодня вышел новый патч-релиз Rust 1.85.1, который приносит важные исправления и улучшения.

Вот главные изменения:
▪ Исправление компиляции комбинированных doctest'ов:
Ранее в выпуске 2024 Edition из-за ошибки rustdoc автоматически переключался на «unmerged» fallback-метод, что снижало производительность. Теперь эта проблема устранена, и улучшения в скорости работы вступают в силу.
▪ Решение регрессий из версии 1.85.0:
▪ Сняты ограничения target_feature проверок при генерации документации.
▪ Исправлена ошибка в std::fs::rename для Windows 1607.
▪ Понижена версия bootstrap cc для корректной работы с кастомными целями.
▪ Добавлен пропуск обновления submodule'ов при сборке Rust из исходного tarball.

Чтобы обновиться до Rust 1.85.1, достаточно запустить команду:
rustup update stable

https://blog.rust-lang.org/2025/03/18/Rust-1.85.1.html

@rust_code

Читать полностью…

Rust

🥷 RustPotato — реализация на языке Rust утилиты GodPotato, используемой для повышения привилегий на Windows-системах!

🌟 Она использует уязвимость SeImpersonatePrivilege для получения доступа от имени NT AUTHORITY\SYSTEM. RustPotato включает обратную TCP-оболочку, косвенные вызовы NTAPI для обработки токенов, манипуляции RPC и создания именованных каналов.

🔐 Лицензия: MIT

🖥 Github

@rust_code

Читать полностью…

Rust

🦀 Компания System76 представила седьмую альфа-версию своей революционной DE COSMIC — полностью написанной на Rust альтернативы GNOME. Новый выпуск примечателен не только встроенным Wayland-композитором, но и уникальными режимами работы с окнами: гибридной мозаичной компоновкой и браузерным группированием вкладок.

Среди свежих изменений — улучшенная навигация между рабочими столами, экспериментальное дробное масштабирование для XWayland и тонкие настройки звука. При этом проект остаётся кроссплатформенным: пакеты уже доступны для Fedora, Arch, NixOS и даже нишевых дистрибутивов вроде Redox.

🔗 Ссылка - *клик*

@rust_code

Читать полностью…

Rust

⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:

Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
Нерйросети t.me/ai_machinelearning_big_data
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/javatg
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: /channel/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: /channel/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: /channel/addlist/mzMMG3RPZhY2M2Iy

😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: /channel/addlist/BkskQciUW_FhNjEy

Читать полностью…

Rust

🧠 Задача на Rust — для продвинутых разработчиков


use std::cell::RefCell;
use std::rc::Rc;

fn main() {
let a = Rc::new(RefCell::new(1));
let b = a.clone();

let c = {
let mut val = b.borrow_mut();
*val += 1;
Rc::try_unwrap(b).ok().unwrap().into_inner()
};

println!("a: {}", a.borrow());
println!("c: {}", c);
}


Что выведет код?

A.
a: 2
c: 2

B.
a: 1
c: 2

C.
Panic at runtime due to unwrap failure ✅

D.
Compilation error due to ownership rules

📌
Ответ:
Правильный ответ: C — Panic at runtime due to unwrap failure

Почему:
Мы создаем a как Rc<RefCell<i32>>, из него делаем b = a.clone() → теперь у Rc два владельца.

Мы мутируем значение через b.borrow_mut(), увеличиваем его на 1.

Затем пытаемся сделать Rc::try_unwrap(b).

⚠️ Rc::try_unwrap требует, чтобы Rc был единственным владельцем. Но у нас всё ещё есть a, то есть ссылка остаётся → unwrap не срабатывает и unwrap() вызывает паник на runtime.


@rust_code

Читать полностью…

Rust

🔍 Вопрос: что выведет этот код на Rust?


fn main() {
let mut v = vec![1, 2, 3];
let first = &v[0];

v.push(4);

println!("First: {}", first);
}

---
✔️ Правильный ответ: Ошибка компиляции
---
🧠 Разбор:
- let first = &v[0];иммутабельная ссылка
- v.push(4);мутабельная операция

Rust запрещает это: нельзя иметь и иммутабельную ссылку, и мутабельную операцию одновременно!

📚 Rust выдаст ошибку компиляции:
error[E0502]: cannot borrow v as mutable because it is also borrowed as immutable

💥 Подвох: в C++, Go или JS это бы сработало.

Rust завернет такое на стадии компиляции ✅

@rust_code

Читать полностью…

Rust

🧑🏻‍💻Как эффективно управлять ошибками в коде и избегать багов?

На открытом вебинаре 23 апреля в 20:00 МСК вы познакомитесь с мощной системой обработки ошибок в Rust и узнаете, почему этот подход считается одним из самых безопасных и надёжных. Вместе с экспертом вы освоите оператор «?» и работу с типами Result и Option.

Вы получите практические навыки и сможете легко писать код без неожиданных сбоев и исключений, повысив надежность ваших приложений.

👉Регистрируйтесь на вебинар и получите специальную скидку на полный курс «Rust Developer. Basic»: https://otus.pw/mbYb/?erid=2W5zFJ8tVPE 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Rust

ЗАДАЧА : Что выведет этот код?


use std::mem;

struct Tracer(&'static str);

impl Tracer {
fn new(name: &'static str) -> Tracer {
println!("Creating {}", name);
Tracer(name)
}
}

impl Drop for Tracer {
fn drop(&mut self) {
println!("Dropping {}", self.0);
}
}

struct Test {
a: Tracer,
b: Tracer,
}

fn main() {
let mut t = Test {
a: Tracer::new("A"),
b: Tracer::new("B"),
};

mem::replace(&mut t.a, Tracer::new("X"));

println!("Midpoint");
}


ОТВЕТ:
```Creating A
Creating B
Creating X
Dropping A
Midpoint
Dropping B
Dropping X
```

1. Создание:
Tracer::new("A") → Creating A
2. mem::replace(...):
Creating X Dropping A
3.
println!("Midpoint"): Midpoint
4. Drop поля:
B, затем X

Этот код демонстрирует поведение Drop при замене полей структуры в Rust через std::mem::replace.


@rust_code

Читать полностью…

Rust

🖥 Python на скорости Rust

Новый Function (fxn) — фреймворк, который компилирует Python-функции в нативный код с производительностью, сравнимой с Rust.

🧠 Как это работает?
- Использует символическое трассирование на CPython для анализа функций
- Генерирует промежуточное представление (IR)
- Транслирует IR в C++ или Rust, а затем компилирует в бинарный код
- Поддерживает платформы: Linux, Android, WebAssembly и др.

📦 Пример:
@compile
def fma(x: float, y: float, z: float) -> float:
return x * y + z
После компиляции вы получаете нативный бинарник, который можно запускать без интерпретатора Python.

🔗 Подробнее
🔗 Github

@pythonl

#Python #Rust #fxn #Compiler #Performance #AI #ML #Wasm

Читать полностью…

Rust

Machine Learning na Rust

🔍 Ключевое из статьи The Beginner’s Guide to Machine Learning with Rust:

Rust — безопасный и быстрый: Исключает критические ошибки, дает скорость C/C++
ndarray — аналог NumPy
tch-rs — обертка над PyTorch
linfa — алгоритмы МЛ на Rust
Cargo — для управления проектами

📝 Rust еще рано заменять Python, но уже есть что пощупать 🚀

Читать полностью…

Rust

💥 Urx (сокращение от "Extracts URLs") — это инструмент на базе Rust, который я создал для сбора URL из различных OSINT архивов.

В результате для указанных доменов формируется обширный список URL‑адресов, который можно использовать в исследованиях, тестировании безопасности или при аналитической работе.

Основные функции Urx:
▪ Получение URL‑адресов сразу из нескольких источников (Wayback Machine, Common Crawl, OTX)
▪ Гибкая фильтрация по расширениям, шаблонам или заранее заданным пресетам (например, «no‑image» для исключения изображений)
▪ Поддержка различных форматов вывода (plain text, JSON, CSV)
▪ Возможность направлять результаты в консоль, файлы или другие инструменты (через stdin для пайплайнов)
▪ Валидация и проверка URL‑адресов по статус‑кодам и паттернам, а также извлечение дополнительных ссылок из собранных страниц

Urx значительно упрощает процесс сбора и анализа URL, сочетая высокую скорость работы (Rust, асинхронная обработка) и разнообразие функций для фильтрации, сортировки и экспорта данных.

Установка:
cargo install urx

🔗 Github

@rust_code

#security #bugbounty

Читать полностью…

Rust

⚡️ Челлендж: 12 IT-проектов за 12 месяцев — попробуй сам!

Собрали крутые кейсы, для тех, кто хочет запустить свой первый IT-продукт, но не знаете, с чего начать, присмотрись к комьюнити инди-хакеров, которые тестируют простой, но эффективный подход:

✅ Разработка + запуск за 1 месяц
✅ Минимальные вложения (средний бюджет на продвижение — $150)
✅ Честный разбор: что сработало, а что — нет

Вот несколько примеров их проектов:

👉 Кейс о генераторе картинок – американцы платят $40, хотя есть бесплатные аналоги. Разработка заняла 4 недели.

👉 Темная тема с тарифами от $5 до $99 – 2 недели работы, пассивный доход, сравнимый с зарплатой разработчика.

👉 Что бывает, если пилить сложный продукт 2 года без теста на рынке – не повторяй эту ошибку!

👉 Математическое приложение, которое через 4 месяца вышло на $1200/месяц – всего за 30 дней разработки.

👉 Бот для фотокниг, который принес 1 700 000 рублей – кейс с разбором ошибок и удачных решений.

💡 Что полезного можно взять из их опыта?

1️⃣ Метод быстрого запуска: как сделать рабочий продукт за 1 месяц.
2️⃣ Эффективное продвижение: как привлечь тысячи пользователей без больших бюджетов.

Здесь можно следить за быстрыми запусками и, возможно, попробовать создать свой продукт! 🚀

Читать полностью…

Rust

🚀 Gatehouse – это гибкая библиотека для реализации механизмов авторизации, которая объединяет в себе несколько моделей контроля доступа: RBAC (role-based), ABAC (attribute-based) и ReBAC (relationship-based).

Этот инструмент разработан на Rust и предназначен для решения сложных задач авторизации в современных приложениях. Ниже приведены основные особенности и преимущества Gatehouse:

▪ Многообразие парадигм авторизации: Gatehouse поддерживает три различных подхода к контролю доступа, что позволяет разработчикам создавать решения, максимально точно соответствующие требованиям их приложений.
▪ Композиция политик: Возможность объединения различных политик с помощью логических операторов (AND, OR, NOT) дает гибкость при построении сложных правил авторизации.
▪ Подробное трассирование: Библиотека предоставляет детальные отчеты об оценке политик, что значительно упрощает отладку и аудит решений по безопасности.
▪ Fluent Builder API: Удобный и интуитивно понятный API позволяет быстро и безопасно создавать кастомные политики, минимизируя вероятность ошибок при разработке.
▪ Типобезопасность и поддержка async: Благодаря сильной типизации и встроенной поддержке асинхронного программирования, Gatehouse легко интегрируется в современные высоконагруженные системы.

Преимущества Gatehouse над другими инструментами заключаются в его универсальности и гибкости: вместо того чтобы выбирать между разными моделями авторизации, разработчики могут использовать объединённое решение, которое адаптируется под любые сценарии и требования безопасности. Это делает Gatehouse отличным выбором для создания масштабируемых и надёжных систем контроля доступа в сложных программных продуктах.

🔗 Github

@rust_code

Читать полностью…

Rust

🔥Разработчики GRUB2 рассматривают возможность использования языка Rust

Владимир Сербиненко, один из трёх мэйнтейнеров загрузчика GRUB2, внёсший в кодовую базу более пяти тысяч изменений, выставил на обсуждение возможность написания модулей для GRUB2 c использованием языка Rust. Владимир представил первые результаты экспериментов с добавлением поддержки Rust в GRUB2 и созданием необходимых обвязок. Для GRUB также подготовлены изменения, позволяющие использовать разделяемые библиотеки (".so", ET_DYN) для модулей, вместо связывания на уровне объектных файлов (".o", ET_REL).

Инициатива пока позиционируется как отдельный эксперимент, который не будет влиять на разработку GRUB2. В качестве оптимального применения Rust в GRUB упоминается написание модулей для новых файловых систем. Также не исключается переписывание на Rust кода для работы с дисковыми разделами и GPT.

Предполагается, что использование Rust поможет проекту уменьшить вероятность появления некоторых видов ошибок, особенно в коде модулей, содержащем множество больших и сложных процедур парсинга. В феврале в результате аудита кодовой базы GRUB были выявлены 72 проблемы с безопасностью, 21 из которых признаны опасными уязвимостями, пригодными для обхода механизма верифицированной загрузки UEFI Secure Boot. 20 из 21 уязвимостей вызваны ошибками при работе с памятью, приводившими к переполнению буфера или обращению к памяти после её освобождения.

Дополнительно можно отметить выпуск проекта GNU Boot 0.1 RC6, в состав которого вошли вышеотмеченные исправления уязвимостей (в самом GRUB2 исправления продолжают распространяться в виде патчей без формирования отдельного релиза). Проект GNU Boot развивает замену проприетарным прошивкам UEFI и BIOS, основанную на CoreBoot, но применяющую более жёсткие требования к включению бинарных компонентов. GNU Boot преподносится как "coreboot-libre", т.е. как редакция CoreBoot, избавленная от блобов и несвободных компонентов, по аналогии с тем, как проект Linux-libre развивает очищенный вариант ядра Linux. Отдельно развиваются похожие проекты Libreboot и Canoeboot.

@rust_code

Читать полностью…

Rust

👣 В GCC-фронтэнде с компилятором Rust реализован Borrow checker

Для включения в состав ветки GCC 15 предложена серия патчей с улучшением поддержки языка Rust во фронтэнде gccrs. Наиболее заметным изменением стала поддержка проверки заимствования переменных (borrow checker), реализованная на основе компонента Polonius, разрабатываемого основной командой разработчиков Rust в качестве следующего поколения Borrow checker.

Предложенная реализация Borrow checker отличается тем, что написана на языке Rust и предоставляет расширенные возможности верификации кода, позволяющие в ряде случаев считать безопасным (safe) код, который до сих пор требовал пометки ключевым словом Unsafe из-за ограничений применяемой по умолчанию реализации Borrow checker.

Подготовленное для GCC решение имеет ограничения:

Для Polonius известны ситуации, в которых некоторый реально существующий в проектах код приводит к экспоненциальному росту сложности анализа.
В случае GCC для завершения фазы начальной раскрутки (bootstrapping) компилятора gccrs на данный момент требуется компилятор Rust (в будущем данное ограничение будет устранено).
Полная реализация самодостаточной сборки подразумевает 2-стадийную раскрутку, при которой сначала GCC соберёт gccrs без Borrow checker, а затем соберёт упомянутую реализацию Borrow checker, написанную на языке Rust, используя урезанный варианта компилятора и считая код условно-доверяемым (т.е. не выполняя проверку заимствования). После сборки Borrow checker-а будет выполнена ещё одна пересборка компилятора, но уже с выполнением проверок заимствования.

https://opennet.ru/62924/

@rust_code

Читать полностью…

Rust

🖥 PgDog — это инструмент для горизонтального масштабирования PostgreSQL, объединяющий функции шардирования, пула соединений и балансировщика нагрузки.

Разработанный на языке Rust, он обеспечивает высокую производительность и надёжность, позволяя масштабировать базы данных без необходимости изменения кода приложений.

Основные особенности PgDog:

Шардирование: PgDog способен автоматически распределять данные между несколькими шардами, обеспечивая эффективное управление большими объёмами информации.

Пул соединений: Поддерживает транзакционное и сессионное пуллинг, позволяя тысячам клиентов использовать ограниченное количество соединений с сервером PostgreSQL, что оптимизирует использование ресурсов.

Балансировка нагрузки: Распределяет запросы между основными и реплицированными базами данных, обеспечивая равномерную загрузку и повышая отказоустойчивость системы.

Благодаря этим возможностям, PgDog может управлять сотнями баз данных и обрабатывать сотни тысяч соединений, что делает его мощным инструментом для масштабирования и оптимизации производительности PostgreSQL-систем.

🖥 GitHub

@rust_code

Читать полностью…

Rust

👣 В Ubuntu 25.10 решено заменить GNU Coreutils на uutils, написанные на Rust

Джон Сигер (Jon Seager), вице-президент компании Canonical по инжинирингу и технический лидер проекта Ubuntu, представил инициативу по замене в Ubuntu системных утилит на аналоги, написанные на языке Rust. Первой целью инициативы заявлен перевод Ubuntu 25.10 на использование по умолчанию инструментария uutils вместо набора утилит GNU Coreutils. Если эксперимент будет признан удачным, то uutils также будут задействованы по умолчанию в LTS-ветке Ubuntu 26.04.

Замена коснётся более ста утилит, входящих в состав Сoreutils, включая sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls. В настоящее время утилиты uutils уже применяются по умолчанию в дистрибутиве Apertis, основанном на Debian, а также в независимом дистрибутиве AerynOS (SerpentOS). Опубликованный на прошлой неделе выпуск пакета uutils coreutils 0.0.30 успешно проходит 507 тестов (в прошлом выпуске 506, в позапрошлом - 476) из эталонного тестового набора GNU Coreutils. 69 тестов завершилось неудачей, а 41 тест был пропущен. В ближайшие недели также планируется приступить к работе над заменой в Ubuntu утилит su и sudo на пакет sudo-rs. Из рассматриваемых проектов дополнительно упоминаются zlib-rs и ntpd-rs.



В качестве причины миграции называется желание повысить надёжность и безопасность утилит, лежащих в основе дистрибутива. Использование Rust даст возможность снизить риск появления ошибок при работе с памятью, таких как обращение к области памяти после её освобождения и выход за границы буфера. По мнению Джона Сигера, защита от подобных ошибок повысит гарантии безопасности, а с повышением безопасности увеличится и общая надёжность работы системы.

Отмечается, что Canonical рассматривает разные методы повышения качества и один из них - поставка программ, изначально разрабатываемых с оглядкой на безопасность, надёжность и корректность. Для базовых компонентов дистрибутива это особенно важно, так как если в низкоуровневом ПО возникают проблемы, то эти проблемы отражаются на работе и всех вышележащих слоёв, например, если в базовых пакетах имеются проблемы с производительностью, то они сказываются и на производительности других подсистем.

Для тестирования замены в Ubuntu системных компонентов подготовлен проект oxidizr, предлагающий инструментарий командной строки для управления экспериментами с системой, связанными с заменой традиционных утилит на альтернативы, написанные на Rust. В настоящее время в oxidizr доступны эксперименты для перехода по умолчанию на использование пакетов uutils coreutils, uutils findutils, uutils diffutils и sudo-rs. Например, для замены в своей системе coreutils и findutils достаточно выполнить команду "sudo oxidizr enable --experiments coreutils findutils", а для возвращения в исходное состояние можно использовать команду "oxidizr disable".

@rust_code

Читать полностью…
Subscribe to a channel