Virviil/oci2git
Это консольное приложение на Rust, которое преобразует контейнерные образы (Docker и др.) в Git-репозитории. Каждая слоя образа превращается в отдельный коммит, что позволяет сохранять всю историю и структуру исходного образа
Основные возможности:
- Поддержка разбора Docker-образов и извлечения информации о слоях.
- Генерация Git-репозитория, где каждый слой соответствует одному коммиту (включая «пустые» слои вроде ENV и WORKDIR)
- Экспорт всей метаинформации об образе в файл Image.md в формате Markdown.
- Расширяемая архитектура для работы с разными движками контейнеров (docker, nerdctl, tar)
- Типичные сценарии использования:
- Сравнение слоёв (Layer Diffing): благодаря git diff можно увидеть точные изменения между любыми двумя слоями образа и выявить, какие файлы были добавлены, изменены или удалены
- Отслеживание происхождения (Origin Tracking): команда git blame помогает быстро понять, в каком слое и какой Dockerfile-инструкции был впервые создан или изменён конкретный файл
GitHub
- История файла (File Lifecycle): с помощью git log --follow можно проследить путь любого файла через все слои: от создания до удаления
GitHub
- Исследование слоёв (Layer Exploration): переключаясь на любой коммит, вы получаете файловую систему образа в состоянии этого слоя, что удобно для отладки и аудита безопасности
Github
Это консольное приложение на Rust, которое преобразует контейнерные образы (Docker и др.) в Git-репозитории. Каждая слоя образа превращается в отдельный коммит, что позволяет сохранять всю историю и структуру исходного образа
Основные возможности:
- Поддержка разбора Docker-образов и извлечения информации о слоях.
- Генерация Git-репозитория, где каждый слой соответствует одному коммиту (включая «пустые» слои вроде ENV и WORKDIR)
- Экспорт всей метаинформации об образе в файл Image.md в формате Markdown.
- Расширяемая архитектура для работы с разными движками контейнеров (docker, nerdctl, tar)
- Типичные сценарии использования:
- Сравнение слоёв (Layer Diffing): благодаря git diff можно увидеть точные изменения между любыми двумя слоями образа и выявить, какие файлы были добавлены, изменены или удалены
- Отслеживание происхождения (Origin Tracking): команда git blame помогает быстро понять, в каком слое и какой Dockerfile-инструкции был впервые создан или изменён конкретный файл
GitHub
- История файла (File Lifecycle): с помощью git log --follow можно проследить путь любого файла через все слои: от создания до удаления
GitHub
- Исследование слоёв (Layer Exploration): переключаясь на любой коммит, вы получаете файловую систему образа в состоянии этого слоя, что удобно для отладки и аудита безопасности
Github
GitHub
GitHub - Virviil/oci2git: Introspecting Docker images as easy as using Git
Introspecting Docker images as easy as using Git. Contribute to Virviil/oci2git development by creating an account on GitHub.
🔥15👍3❤2🥰1
🦀 Rust-задача с подвохом: “Ловушка безопасного кэша”
📘 Условие
Ты хочешь реализовать простой кэш — если значение уже вычислено, вернуть его, иначе — сохранить и вернуть.
Вот пример:
❓ Вопрос:
1) Почему этот код не компилируется, хотя кажется безопасным?
2) Где именно проблема с lifetime'ами?
3) Как можно переписать этот код так, чтобы он компилировался и оставался эффективным?
---
✅ Подвох и разбор
💥 Проблема в
Метод
Внутри
Но главная причина — возвращаемое значение
📌 Ошибка компилятора: borrow may not live long enough.
✅ Как исправить
Вариант 1 — использовать `Entry` напрямую и разбить на шаги:
```rust
fn get_or_insert<'a, F>(map: &'a mut HashMap<String, String>, key: &str, compute: F) -> &'a String
where
F: FnOnce() -> String,
{
use std::collections::hash_map::Entry;
match map.entry(key.to_string()) {
Entry::Occupied(entry) => entry.into_mut(),
Entry::Vacant(entry) => entry.insert(compute()),
}
}
```
Теперь Rust понимает, как обрабатывается владение, и может гарантировать корректный lifetime.
---
⚠️ Подвох
• `.or_insert_with(...)` выглядит безопасным, но может скрывать временные владения
• Проблемы начинаются, когда `key.to_string()` создаёт временное значение, и Rust не может связать его lifetime
• Даже опытные разработчики удивляются ошибке компилятора, потому что выглядит «канонично»
🎯 Отлично подходит для проверки глубокого понимания владения и жизненных циклов в Rust.
📘 Условие
Ты хочешь реализовать простой кэш — если значение уже вычислено, вернуть его, иначе — сохранить и вернуть.
Вот пример:
use std::collections::HashMap;
fn main() {
let mut cache = HashMap::new();
let key = "user_123".to_string();
let result = get_or_insert(&mut cache, &key, || {
println!("Computing...");
"result for user_123".to_string()
});
println!("Result: {}", result);
}
fn get_or_insert<'a, F>(map: &'a mut HashMap<String, String>, key: &str, compute: F) -> &'a String
where
F: FnOnce() -> String,
{
map.entry(key.to_string()).or_insert_with(compute)
}
❓ Вопрос:
1) Почему этот код не компилируется, хотя кажется безопасным?
2) Где именно проблема с lifetime'ами?
3) Как можно переписать этот код так, чтобы он компилировался и оставался эффективным?
---
✅ Подвох и разбор
💥 Проблема в
or_insert_with(compute)
и владении ключом.Метод
.entry()
требует ключ во владение (`String`), а key
у нас — &str
. Внутри
or_insert_with
происходит вызов compute()
, который может вернуть ссылку на строку, но Rust не может доказать, что ссылка будет жить достаточно долго.Но главная причина — возвращаемое значение
&'a String
, полученное из HashMap::entry
, не может быть безопасно связано с временем жизни `map`, потому что key.to_string()
создаёт временное значение, и lifetime не совместим.📌 Ошибка компилятора: borrow may not live long enough.
✅ Как исправить
Вариант 1 — использовать `Entry` напрямую и разбить на шаги:
```rust
fn get_or_insert<'a, F>(map: &'a mut HashMap<String, String>, key: &str, compute: F) -> &'a String
where
F: FnOnce() -> String,
{
use std::collections::hash_map::Entry;
match map.entry(key.to_string()) {
Entry::Occupied(entry) => entry.into_mut(),
Entry::Vacant(entry) => entry.insert(compute()),
}
}
```
Теперь Rust понимает, как обрабатывается владение, и может гарантировать корректный lifetime.
---
⚠️ Подвох
• `.or_insert_with(...)` выглядит безопасным, но может скрывать временные владения
• Проблемы начинаются, когда `key.to_string()` создаёт временное значение, и Rust не может связать его lifetime
• Даже опытные разработчики удивляются ошибке компилятора, потому что
map.entry().or_insert_with()
🎯 Отлично подходит для проверки глубокого понимания владения и жизненных циклов в Rust.
👍22❤4🔥3🥰1
🔐 Как сделать код на Rust надёжнее и безопаснее?
📅 14 мая в 20:00 МСК мы разберём ключевые аспекты работы с контрактами и инвариантами в Rust на открытом вебинаре.
❗️Что вас ждёт:
— Разберём понятие инварианта и как он работает в Rust.
— Обсудим инвариант безопасности и его роль в написании надежного кода.
— Узнаем, как создавать удобные и безопасные контракты для API.
🦀 Вы освоите использование системы типов Rust для создания надёжных решений и узнаете, как компилятор и система типов помогают писать безопасный и эффективный код.
➡️ Регистрируйтесь и получите скидку на программу обучения «Rust Developer. Professional»: https://otus.pw/9LnV/?erid=2W5zFHCHQ3a
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
📅 14 мая в 20:00 МСК мы разберём ключевые аспекты работы с контрактами и инвариантами в Rust на открытом вебинаре.
❗️Что вас ждёт:
— Разберём понятие инварианта и как он работает в Rust.
— Обсудим инвариант безопасности и его роль в написании надежного кода.
— Узнаем, как создавать удобные и безопасные контракты для API.
🦀 Вы освоите использование системы типов Rust для создания надёжных решений и узнаете, как компилятор и система типов помогают писать безопасный и эффективный код.
➡️ Регистрируйтесь и получите скидку на программу обучения «Rust Developer. Professional»: https://otus.pw/9LnV/?erid=2W5zFHCHQ3a
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
😁6👍5❤1👀1🫡1
🚀 Nova — новый движок JavaScript/Wasбm на Rust. Этот экспериментальный проект пытается переосмыслить архитектуру JS-движков через призму data-oriented design. Вместо классических указателей Nova использует индексы и векторы, чтобы минимизировать накладные расходы и улучшить кэширование.
Пока движок далёк от готовности, но подход к разработке вызывает интерес, например safepoint garbage collector, построенный на особенностях системы заимствований Rust — это попытка максимально приблизить структуру кода к ECMAScript-спецификации.
🤖 GitHub
Пока движок далёк от готовности, но подход к разработке вызывает интерес, например safepoint garbage collector, построенный на особенностях системы заимствований Rust — это попытка максимально приблизить структуру кода к ECMAScript-спецификации.
🤖 GitHub
👍23🥰4❤3💊2🤔1
⁉️ Хотите научиться разрабатывать веб-сервисы на Rust?
📅 19 мая в 20:00 МСК на открытом вебинаре мы покажем, как создать мощный и эффективный веб-сервис с использованием HTTP и gRPC API на Rust.
Что вас ждёт:
— Разбор бизнес-логики веб-сервиса.
— Реализация HTTP и gRPC API.
— Разработка клиентского приложения и тестов для сервиса.
🎁 Открытый урок проходит в преддверие старта курса «Rust Developer. Professional». Все участники получат скидку на обучение.
➡️ Запишитесь прямо сейчас, чтобы не пропустить: https://otus.pw/ESP2/?erid=2W5zFGbnWVE
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
📅 19 мая в 20:00 МСК на открытом вебинаре мы покажем, как создать мощный и эффективный веб-сервис с использованием HTTP и gRPC API на Rust.
Что вас ждёт:
— Разбор бизнес-логики веб-сервиса.
— Реализация HTTP и gRPC API.
— Разработка клиентского приложения и тестов для сервиса.
🎁 Открытый урок проходит в преддверие старта курса «Rust Developer. Professional». Все участники получат скидку на обучение.
➡️ Запишитесь прямо сейчас, чтобы не пропустить: https://otus.pw/ESP2/?erid=2W5zFGbnWVE
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
👍7😁2🥴1
🎉 С днём рождения, Rust! 🦀
10 лет с момента выхода Rust 1.0 — языка, который подарил миру безопасное, быстое и конкурентное программирование.
Отпразднуем вместе с невероятным сообществом и тысячами проектов, созданных на Rust!
#rust #Rust10Years #программирование
https://blog.rust-lang.org/2015/05/15/Rust-1.0/
10 лет с момента выхода Rust 1.0 — языка, который подарил миру безопасное, быстое и конкурентное программирование.
Отпразднуем вместе с невероятным сообществом и тысячами проектов, созданных на Rust!
#rust #Rust10Years #программирование
https://blog.rust-lang.org/2015/05/15/Rust-1.0/
❤71🎉44🔥8👍5🏆4❤🔥3🥰2💯2😈1
Выпуск Rust 1.87
🔧 Основные изменения
- Улучшения системы типов: Введены новые возможности для более точного определения типов, что повышает безопасность и выразительность кода.
- Оптимизации компилятора: Улучшена производительность компиляции, особенно для крупных проектов, что сокращает время сборки.
- Расширения стандартной библиотеки: Добавлены новые функции и улучшены существующие модули, такие как std::fs и std::net, что упрощает разработку приложений.
- Улучшения в работе с асинхронным кодом: Обновления в async/await механизмах обеспечивают более стабильную и предсказуемую работу асинхронных операций.
Полный список изменений и подробности:http
🔧 Основные изменения
- Улучшения системы типов: Введены новые возможности для более точного определения типов, что повышает безопасность и выразительность кода.
- Оптимизации компилятора: Улучшена производительность компиляции, особенно для крупных проектов, что сокращает время сборки.
- Расширения стандартной библиотеки: Добавлены новые функции и улучшены существующие модули, такие как std::fs и std::net, что упрощает разработку приложений.
- Улучшения в работе с асинхронным кодом: Обновления в async/await механизмах обеспечивают более стабильную и предсказуемую работу асинхронных операций.
Полный список изменений и подробности:http
www.opennet.ru
Выпуск Rust 1.87
В день празднования десятилетия с момента выпуска языка программирования Rust 1.0 (проект Rust был основан в 2006 году, выпуск 0.1 был сформирован в 2012 году, а первая стабильная версия предложена в 2015 году) опубликован релиз Rust 1.87. Язык сфокусирован…
👍43❤10🥰6🔥4
🛡Децентрализованные приложения (dApps) — от идеи до реального продукта
Вы узнаете, как создаются современные приложения на блокчейне — без серверов, посредников и единого центра управления.
Простыми словами разберем:
- Что такое dApps и чем они отличаются от обычных мобильных приложений.
- Как превратить свою идею в работающий блокчейн-проект — пошаговый план.
- Какие инструменты используют разработчики (и как в этом разобраться без технического бэкграунда).
На живом примере вместе пройдем путь от задумки до готового прототипа — вы увидите, как выглядит процесс разработки "под капотом".
👉 Регистрация и подробности о курсе “Разработка децентрализованных приложений”
https://otus.pw/xxlS/?erid=2W5zFJSTFWx
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Вы узнаете, как создаются современные приложения на блокчейне — без серверов, посредников и единого центра управления.
Простыми словами разберем:
- Что такое dApps и чем они отличаются от обычных мобильных приложений.
- Как превратить свою идею в работающий блокчейн-проект — пошаговый план.
- Какие инструменты используют разработчики (и как в этом разобраться без технического бэкграунда).
На живом примере вместе пройдем путь от задумки до готового прототипа — вы увидите, как выглядит процесс разработки "под капотом".
👉 Регистрация и подробности о курсе “Разработка децентрализованных приложений”
https://otus.pw/xxlS/?erid=2W5zFJSTFWx
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
👍2😁2❤1🥰1
Forwarded from Machinelearning
OpenAI представляет Codex — облачного агента для генерации кода, способного выполнять множество задач параллельно.
В основе — модель codex-1.
🧠 Ключевые особенности:
• Codex работает прямо в браузере
• Поддерживает многозадачность: можно одновременно проверять код, задавать вопросы и переключаться между задачами
• Построен на **новой модели Codex-1** — самой мощной модели для кодинга от OpenAI
• Интеграция с GitHub — можно подключить свой аккаунт, и агент будет работать с вашими репозиториями
🚀 Codex — это шаг в сторону полуавтоматизированной разработки, где ИИ способен выполнять рутинную и аналитическую работу без постоянного контроля со стороны разработчика.
📅 Запуск ожидается уже сегодня.
▪ Релиз: https://openai.com/index/introducing-codex/
@ai_machinelearning_big_data
#OpenAI #Codex #AI #CodeAutomation #DevTools
В основе — модель codex-1.
🧠 Ключевые особенности:
• Codex работает прямо в браузере
• Поддерживает многозадачность: можно одновременно проверять код, задавать вопросы и переключаться между задачами
• Построен на **новой модели Codex-1** — самой мощной модели для кодинга от OpenAI
• Интеграция с GitHub — можно подключить свой аккаунт, и агент будет работать с вашими репозиториями
🚀 Codex — это шаг в сторону полуавтоматизированной разработки, где ИИ способен выполнять рутинную и аналитическую работу без постоянного контроля со стороны разработчика.
📅 Запуск ожидается уже сегодня.
▪ Релиз: https://openai.com/index/introducing-codex/
@ai_machinelearning_big_data
#OpenAI #Codex #AI #CodeAutomation #DevTools
👍13🤣9❤3🥰2🖕2💊1
📌 napi-rs — мост между Node.js и Rust. Это фреймворк для создания нативных расширений Node.js на Rust через Node-API, без необходимости работать с node-gyp или другими инструментами сборки C++.
Достаточно добавить аннотацию
🤖 GitHub
Достаточно добавить аннотацию
#[napi]
к Rust-функциям и они становятся доступными в JavaScript как обычные модули. Под капотом napi-rs автоматически генерирует binding-код, поддерживает асинхронные операции через tokio и даже предоставляет CLI для удобной сборки. Собранные `.node`-файлы работают на Windows, macOS, Linux и даже Android. 🤖 GitHub
👍33🥰6❤4🥴2🔥1
🤖 Тест по Rust проверь свои знания, готов ли ты к обучению на курсе.
Ответишь — пройдешь на курс "Rust Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса
За 5 месяцев обучения ты разберёшь ключевые особенности Rust и сможешь не только разрабатывать сложные программные продукты, но и в целом лучше проектировать ПО.
➡️ ПРОЙТИ ТЕСТ
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Ответишь — пройдешь на курс "Rust Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса
За 5 месяцев обучения ты разберёшь ключевые особенности Rust и сможешь не только разрабатывать сложные программные продукты, но и в целом лучше проектировать ПО.
➡️ ПРОЙТИ ТЕСТ
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
😁3🖕3❤2👍2🥰1
🦀 Задача на Rust: "Найди пропавшее число"
Условие
У тебя есть
Найди его без использования
Можно использовать
Формат функции:
Решение через XOR:
Пример использования:
Зависимости в `Cargo.toml`:
Объяснение:
XOR всех чисел от 1 до 100 ⊕ XOR из входных данных → пропущенное число.
Работает, потому что
Условие
У тебя есть
Vec<String>
, в котором находятся строки от "1"
до "100"
, но одно число отсутствует. Найди его без использования
sort
, HashMap
, iter().sum()
и т. д. Можно использовать
parse::<u32>()
.Формат функции:
fn find_missing_number(data: &Vec<String>) -> u32
Решение через XOR:
fn find_missing_number(data: &Vec<String>) -> u32 {
let mut xor_full = 0;
let mut xor_data = 0;
for i in 1..=100 {
xor_full ^= i;
}
for s in data {
if let Ok(n) = s.parse::<u32>() {
xor_data ^= n;
}
}
xor_full ^ xor_data
}
Пример использования:
fn main() {
let mut data: Vec<String> = (1..=100)
.filter(|&x| x != 42)
.map(|x| x.to_string())
.collect();
use rand::seq::SliceRandom;
let mut rng = rand::thread_rng();
data.shuffle(&mut rng);
let missing = find_missing_number(&data);
println!("Пропущено: {}", missing); // Ожидается 42
}
Зависимости в `Cargo.toml`:
[dependencies]
rand = "0.8"
Объяснение:
XOR всех чисел от 1 до 100 ⊕ XOR из входных данных → пропущенное число.
Работает, потому что
a ^ a = 0
, 0 ^ b = b
.👍22
⚡️Почему Rust — один из самых любимых языков среди разработчиков? Почему он всё чаще выбирается вместо C++ и других языков для разработки высокопроизводительных приложений?
На открытом вебинаре 22 мая в 20:00 мск мы расскажем, почему Rust привлекает так много разработчиков по всему миру. Вы узнаете, какие проблемы решает этот язык, почему его производительность и безопасность привлекают специалистов, а также как Rust занимает свою нишу в программировании.
Если вы хотите перейти на Rust или улучшить свои навыки, вы получите ответы на все вопросы. Мы обсудим его ключевые особенности, нововведения и возможности для использования в реальных проектах.
👉Запишитесь на открытый урок и получите скидку на большое обучение «Rust Developer. Basic»: https://otus.pw/GPhS/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
На открытом вебинаре 22 мая в 20:00 мск мы расскажем, почему Rust привлекает так много разработчиков по всему миру. Вы узнаете, какие проблемы решает этот язык, почему его производительность и безопасность привлекают специалистов, а также как Rust занимает свою нишу в программировании.
Если вы хотите перейти на Rust или улучшить свои навыки, вы получите ответы на все вопросы. Мы обсудим его ключевые особенности, нововведения и возможности для использования в реальных проектах.
👉Запишитесь на открытый урок и получите скидку на большое обучение «Rust Developer. Basic»: https://otus.pw/GPhS/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
👍8❤1☃1🔥1😁1
🦀 Как упростить изучение Rust: советы от Corrode
Rust — мощный и надёжный язык, но его обучение часто вызывает трудности даже у опытных разработчиков. В свежем блоге [Corrode Rust Consulting](https://corrode.dev/blog/flattening-rusts-learning-curve/) делятся рекомендациями, как сгладить кривую обучения Rust без боли и выгорания.
🔑 Основные советы:
- Примите особенности языка
Не сопротивляйтесь системам владения и заимствования — воспринимайте их как инструменты безопасности, а не ограничения.
- Начинайте с "грязных" решений
Используйте
- Учитесь постепенно
Разбивайте обучение на этапы, пишите много маленьких программ в [Rust Playground](https://play.rust-lang.org/).
- Читайте ошибки компилятора вдумчиво
В Rust компилятор — это не враг, а учитель. Он подсказывает, как мыслить «по-растовски».
- Пишите вручную, не полагайтесь на IDE
Автокомплит мешает усвоению синтаксиса — набирайте код вручную, чтобы лучше понять структуру.
- Проектируйте через типы
Rust даёт мощную систему типов — используйте её как инструмент проектирования, а не просто проверки.
📖 Полный текст: https://corrode.dev/blog/flattening-rusts-learning-curve/
Хороший Rust-разработчик — не тот, кто никогда не ошибается, а тот, кто умеет читать сообщения компилятора и не сдаваться.
Rust — мощный и надёжный язык, но его обучение часто вызывает трудности даже у опытных разработчиков. В свежем блоге [Corrode Rust Consulting](https://corrode.dev/blog/flattening-rusts-learning-curve/) делятся рекомендациями, как сгладить кривую обучения Rust без боли и выгорания.
🔑 Основные советы:
- Примите особенности языка
Не сопротивляйтесь системам владения и заимствования — воспринимайте их как инструменты безопасности, а не ограничения.
- Начинайте с "грязных" решений
Используйте
clone()
, unwrap()
, expect()
на старте — позже замените на идиоматичный и безопасный код.- Учитесь постепенно
Разбивайте обучение на этапы, пишите много маленьких программ в [Rust Playground](https://play.rust-lang.org/).
- Читайте ошибки компилятора вдумчиво
В Rust компилятор — это не враг, а учитель. Он подсказывает, как мыслить «по-растовски».
- Пишите вручную, не полагайтесь на IDE
Автокомплит мешает усвоению синтаксиса — набирайте код вручную, чтобы лучше понять структуру.
- Проектируйте через типы
Rust даёт мощную систему типов — используйте её как инструмент проектирования, а не просто проверки.
📖 Полный текст: https://corrode.dev/blog/flattening-rusts-learning-curve/
Хороший Rust-разработчик — не тот, кто никогда не ошибается, а тот, кто умеет читать сообщения компилятора и не сдаваться.
👍35🔥4🥰3❤2💯1
This media is not supported in your browser
VIEW IN TELEGRAM
RustScan – Инструмент для быстрого сканирования портов
Данный проект может похвастаться высокой скоростью работы(Сканирует все 65 тыс. портов за 3 секунды), гибкой расширяемостью и адаптивным методом работы.
https://github.com/bee-san/RustScan
Данный проект может похвастаться высокой скоростью работы(Сканирует все 65 тыс. портов за 3 секунды), гибкой расширяемостью и адаптивным методом работы.
https://github.com/bee-san/RustScan
⚡17🔥9👍7❤3🥰1
🦀 Rust и магия динамики: как создать Python‑подобный API с помощью Serde
В новой статье *Ohad Dravid* демонстрирует, как в языке Rust можно добиться удобства динамического доступа к данным — в духе Python — но без потери строгой типизации и производительности. Всё это — с помощью мощной библиотеки
📌 Статья: *“A Rust API Inspired by Python, Powered by Serde”*
🔗 [ohadravid.github.io/posts/2025-05-serde-reflect](https://ohadravid.github.io/posts/2025-05-serde-reflect/)
🔍 Проблема
Python позволяет обращаться к произвольным полям объектов, например при работе с WMI:
А вот Rust требует ручной работы: если вы хотите получить поле объекта по имени — нужно писать
🙄 Это:
- многословно,
- подвержено ошибкам,
- неудобно для пользователя API.
🎯 Цель
Сделать API на Rust, который позволял бы:
1. Писать простой, декларативный код
2. Избегать ручной сериализации и проверки типов
3. Получать строго типизированные структуры из «сырых» данных
И всё это — без хаков и макросов, а с помощью
⚙️ Как это реализовано
Охад реализует три версии API:
🛠 1.
Каждый вызов требует ручного
✨ 2.
Пользователь описывает
🚀 3.
Теперь
Теперь:
- никакой ручной сериализации
- никаких
- всё строго типизировано и работает с минимальными затратами
🧠 Как это работает под капотом
Проект использует:
•
• внутренний модуль
- извлекает названия полей и их типы
- генерирует SQL‑подобный запрос под структуру
- использует эти поля для сопоставления данных
API получается универсальным: любую структуру, которая реализует
📈 Почему это важно
✅ Приближает Rust к удобству Python, сохраняя безопасность
✅ Минимизирует дублирование кода
✅ Даёт мощный, типобезопасный интерфейс над динамическими структурами
✅ Применимо к WMI, COM, JSON API, SQL‑слоям и множеству других задач
🔭 Возможности расширения
- Генерация запросов по структурам (`SELECT ... FROM ... WHERE ...`)
- Интеграция с внешними API (WMI, COM)
- Расширение в сторону
- Создание DSL поверх API для ещё более лаконичного запроса данных
📚 Заключение
Rust и
Если ты когда-либо хотел писать на Rust как на Python — но без ущерба для надёжности — это один из лучших паттернов, который стоит изучить.
🔗 Читай подробнее: [ohadravid.github.io/posts/2025-05-serde-reflect](https://ohadravid.github.io/posts/2025-05-serde-reflect/)\
В новой статье *Ohad Dravid* демонстрирует, как в языке Rust можно добиться удобства динамического доступа к данным — в духе Python — но без потери строгой типизации и производительности. Всё это — с помощью мощной библиотеки
serde
.📌 Статья: *“A Rust API Inspired by Python, Powered by Serde”*
🔗 [ohadravid.github.io/posts/2025-05-serde-reflect](https://ohadravid.github.io/posts/2025-05-serde-reflect/)
🔍 Проблема
Python позволяет обращаться к произвольным полям объектов, например при работе с WMI:
for fan in c.Win32_Fan():
print(fan.Name, fan.DesiredSpeed)
А вот Rust требует ручной работы: если вы хотите получить поле объекта по имени — нужно писать
get_attr
, делать match
, проверять типы и всё это каждый раз.🙄 Это:
- многословно,
- подвержено ошибкам,
- неудобно для пользователя API.
🎯 Цель
Сделать API на Rust, который позволял бы:
1. Писать простой, декларативный код
2. Избегать ручной сериализации и проверки типов
3. Получать строго типизированные структуры из «сырых» данных
И всё это — без хаков и макросов, а с помощью
serde
и аккуратной архитектуры.⚙️ Как это реализовано
Охад реализует три версии API:
🛠 1.
raw_api.rs
— примитивный уровень
pub enum Value { Bool(bool), I1(i8), UI8(u64), String(String), Object(Object) }
impl Object {
pub fn get_attr(&self, name: &str) -> Value { /* ... */ }
}
Каждый вызов требует ручного
match
, приведения типов, извлечения значений.✨ 2.
v1_api.rs
— пользователь сам описывает структуру + ручная десериализацияПользователь описывает
struct
, и сам реализует для него трейт, чтобы распаковать поля.🚀 3.
v2_api.rs
— Serde‑магию включеноТеперь
query()
возвращает Vec<T>
:
#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Fan {
name: String,
active_cooling: bool,
desired_speed: u64,
}
let res: Vec<Fan> = query();
for fan in res {
if fan.active_cooling {
println!("Fan `{}` is running at {} RPM", fan.name, fan.desired_speed);
}
}
Теперь:
- никакой ручной сериализации
- никаких
match
- всё строго типизировано и работает с минимальными затратами
🧠 Как это работает под капотом
Проект использует:
•
serde::Deserialize
• внутренний модуль
meta.rs
, который: - извлекает названия полей и их типы
- генерирует SQL‑подобный запрос под структуру
- использует эти поля для сопоставления данных
API получается универсальным: любую структуру, которая реализует
Deserialize
, можно использовать как результат запроса.📈 Почему это важно
✅ Приближает Rust к удобству Python, сохраняя безопасность
✅ Минимизирует дублирование кода
✅ Даёт мощный, типобезопасный интерфейс над динамическими структурами
✅ Применимо к WMI, COM, JSON API, SQL‑слоям и множеству других задач
🔭 Возможности расширения
- Генерация запросов по структурам (`SELECT ... FROM ... WHERE ...`)
- Интеграция с внешними API (WMI, COM)
- Расширение в сторону
serde-reflection
для полного introspection - Создание DSL поверх API для ещё более лаконичного запроса данных
📚 Заключение
Rust и
serde
— это не только про производительность и безопасность, но и про удобный API, если правильно подойти к задаче. Этот проект показывает, как можно сделать гибкий, декларативный, типобезопасный интерфейс для работы с данными — без костылей и магии рантайма.Если ты когда-либо хотел писать на Rust как на Python — но без ущерба для надёжности — это один из лучших паттернов, который стоит изучить.
🔗 Читай подробнее: [ohadravid.github.io/posts/2025-05-serde-reflect](https://ohadravid.github.io/posts/2025-05-serde-reflect/)\
👍7😁4❤3🤔3
⚡️ Pydantic Core — Rust-ядро для валидации данных в Python. Этот низкоуровневый валидатор демонстрирует впечатляющую скорость: до 17x быстрее оригинальной реализации на чистом Python.
Хотя напрямую с ним обычно не работают (используя вместо этого основной пакет pydantic), проект интересен как пример интеграции Rust в Python-экосистему. Валидация описывается через JSON-схемы, поддерживая сложные условия вроде
🤖 GitHub
Хотя напрямую с ним обычно не работают (используя вместо этого основной пакет pydantic), проект интересен как пример интеграции Rust в Python-экосистему. Валидация описывается через JSON-схемы, поддерживая сложные условия вроде
ge: 18
для чисел или вложенных структур. Сборка требует Rust toolchain, но результат стоит того: например, валидация списка из 10к элементов занимает миллисекунды. 🤖 GitHub
❤18🔥5🥰3👍2😱2
🦀 Rust понижает поддержку 32-битной сборки для Windows (i686-pc-windows-gnu)
26 мая 2025 года команда Rust официально объявила: начиная с версии Rust 1.88.0, цель
🔧 Что изменится:
• Бинарники и стандартная библиотека по-прежнему будут доступны через
• Однако автоматическое тестирование на CI сокращается
• Возможны баги и сниженная стабильность без гарантий быстрой починки
📉 Почему так:
• Нет активных мейнтейнеров для
• Сложно отлаживать ошибки без специалистов
• 32-битная сборка почти не используется в сравнении с
📌 Что дальше:
Если ситуация не изменится, возможен полный отказ от поддержки этой цели. Сообщество Rust призывает желающих подключиться к поддержке
📖 Подробнее:
https://rust-lang.github.io/rfcs/3771-demote-i686-pc-windows-gnu.html
@rust_code
26 мая 2025 года команда Rust официально объявила: начиная с версии Rust 1.88.0, цель
i686-pc-windows-gnu
(32-битная сборка под Windows с GNU toolchain) больше не будет Tier 1. Её статус понижен до Tier 2 с поддержкой хост-инструментов.🔧 Что изменится:
• Бинарники и стандартная библиотека по-прежнему будут доступны через
rustup
• Однако автоматическое тестирование на CI сокращается
• Возможны баги и сниженная стабильность без гарантий быстрой починки
📉 Почему так:
• Нет активных мейнтейнеров для
*-windows-gnu
целей • Сложно отлаживать ошибки без специалистов
• 32-битная сборка почти не используется в сравнении с
x86_64-pc-windows-gnu
📌 Что дальше:
Если ситуация не изменится, возможен полный отказ от поддержки этой цели. Сообщество Rust призывает желающих подключиться к поддержке
*-windows-gnu
.📖 Подробнее:
https://rust-lang.github.io/rfcs/3771-demote-i686-pc-windows-gnu.html
@rust_code
👍27❤6🔥2🥰1
🦀 Победа для всего Rust-сообщества: состоялся релиз Linux 6.15 — и он действительно важный
Новый релиз ядра Linux 6.15 — не просто очередное обновление. Это первая версия, где Rust-код стал частью реального продакшн-функционала ядра, а не просто экспериментом.
🔥 Что нового:
• Поддержка Rust в драйверах и подсистемах (в том числе networking)
• Начало перехода некоторых компонентов с C на memory-safe Rust
• Улучшена совместимость с архитектурами RISC-V и ARM
• Обновления в системах безопасности, файловых системах и планировщике задач
💬 Линус Торвальдс уже заявил, что Rust — это будущее для многих чувствительных компонентов ядра, особенно в мире, где безопасность становится ключевым фактором.
📌 Rust в ядре — это не просто «новый язык». Это переход к более безопасной, надёжной и современной экосистеме Linux.
🔗 Подробнее:
https://www.zdnet.com/article/the-linux-6-15-kernel-arrives-and-its-big-a-victory-for-rust-fans/
@rust_code
Новый релиз ядра Linux 6.15 — не просто очередное обновление. Это первая версия, где Rust-код стал частью реального продакшн-функционала ядра, а не просто экспериментом.
🔥 Что нового:
• Поддержка Rust в драйверах и подсистемах (в том числе networking)
• Начало перехода некоторых компонентов с C на memory-safe Rust
• Улучшена совместимость с архитектурами RISC-V и ARM
• Обновления в системах безопасности, файловых системах и планировщике задач
💬 Линус Торвальдс уже заявил, что Rust — это будущее для многих чувствительных компонентов ядра, особенно в мире, где безопасность становится ключевым фактором.
📌 Rust в ядре — это не просто «новый язык». Это переход к более безопасной, надёжной и современной экосистеме Linux.
🔗 Подробнее:
https://www.zdnet.com/article/the-linux-6-15-kernel-arrives-and-its-big-a-victory-for-rust-fans/
@rust_code
👍78🔥34❤12🥰3❤🔥1