Copy vs Clone в Rust: почему использование одногр почти не ест ресурсы а другое может стоить вам дорого
В Rust
Но разница принципиальная.
Вы передали
С
Самый понятный пример -
Если бы Rust просто скопировал байты самой структуры
Поэтому
Главная мысль простая:
Поэтому в Rust
В Rust
Copy и `Clone` часто воспринимают как одно и то же: «ну, просто сделать копию».Но разница принципиальная.
Copy - это когда значение можно безопасно продублировать как набор байтов. Без вызова кода, без выделения памяти, без скрытой логики. Поэтому u32, bool, char, f64 и другие простые типы спокойно копируются автоматически.Вы передали
u32 в функцию - старое значение осталось доступно. Rust просто скопировал число.С
Clone другая история.Clone означает: «создай новое значение такого же типа». А как именно это сделать, решает сам тип. Иногда это тоже дешево. Но иногда clone() запускает полноценную работу: выделяет память, копирует данные, пересобирает внутреннюю структуру.Самый понятный пример -
String.Если бы Rust просто скопировал байты самой структуры
String, мы получили бы два владельца одного и того же буфера в памяти. Это сломало бы модель владения.Поэтому
String::clone() создает новый буфер и копирует туда текст. Это уже не бесплатная операция.Главная мысль простая:
Copy - для типов, которые можно безопасно копировать как байты.Clone - для типов, которым может понадобиться настоящая работа, чтобы создать независимую копию.Поэтому в Rust
clone() в коде стоит замечать. Не паниковать, но понимать: здесь может быть цена.🔥15❤7👍6🗿5🥰1🤗1
Вышел RustRover 2026.1.2.
Главное исправление - IDE теперь корректно разбирает комментарии, которые начинаются с
Да, тот самый случай, когда валидный Rust-код мог подсвечиваться как ошибочный просто из-за лишнего слеша в комментарии. Код нормальный, компилятор не ругается, а IDE показывает false positive и заставляет искать проблему там, где её нет.
В обновлении также поправили:
- несколько других ложных ошибок
- вывод типов
- стабильность IDE
Обновление небольшое, но полезное.
Скачать:
https://jetbrains.com/rust/download/
Главное исправление - IDE теперь корректно разбирает комментарии, которые начинаются с
////.Да, тот самый случай, когда валидный Rust-код мог подсвечиваться как ошибочный просто из-за лишнего слеша в комментарии. Код нормальный, компилятор не ругается, а IDE показывает false positive и заставляет искать проблему там, где её нет.
В обновлении также поправили:
- несколько других ложных ошибок
- вывод типов
- стабильность IDE
Обновление небольшое, но полезное.
Скачать:
https://jetbrains.com/rust/download/
👍17🖕16😁7🔥6❤5🤣3🤬1🎉1🍾1
Репозиторий для системной подготовки к собеседованиям по Rust на позиции middle, senior и staff.
Внутри 100 реальных вопросов с собеседований в продуктовых и инфраструктурных компаниях, подробные разборы с примерами кода и сценарии задач, которые встречаются в продакшене. Не «угадай вывод программы», а механика, на которой строятся настоящие сервисы.
Здесь lock-free структуры, self-referential типы в async, FFI с тензорными библиотеками, корректный Send на гардах через await, memory ordering под loom, soundness кастомных коллекций. И при этом все начинается с базы. Владение, заимствование, лайфтаймы. Кто хочет, может зайти и с нуля, и с уровня staff
https://github.com/Develp10/rustinterviewquiestions
Please open Telegram to view this post
VIEW IN TELEGRAM
❤24👍6🔥4🥰1🖕1🤗1
Если нужно написать Kubernetes controller, стоит посмотреть на
kube-rs.• типизированные Kubernetes API
• описание состояний через
enum и sum types • явную обработку ошибок
• меньше runtime-сюрпризов
• отсутствие `nil`-крашей
• более строгую модель для reconciliation-логики
Rust помогает перенести часть проверок в компилятор и сделать поведение контроллера более предсказуемым.
GitHub: https://github.com/kube-rs/kube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤5👍3🥰1🤗1
Репозиторий для системной подготовки к собеседованиям по Rust на позиции middle, senior и staff.
Внутри 100 реальных вопросов с собеседований в продуктовых и инфраструктурных компаниях, подробные разборы с примерами кода и сценарии задач, которые встречаются в продакшене. Не «угадай вывод программы», а механика, на которой строятся настоящие сервисы.
Здесь lock-free структуры, self-referential типы в async, FFI с тензорными библиотеками, корректный Send на гардах через await, memory ordering под loom, soundness кастомных коллекций. И при этом все начинается с базы. Владение, заимствование, лайфтаймы. Кто хочет, может зайти и с нуля, и с уровня staff
https://github.com/Develp10/rustinterviewquiestions
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤5🥰3🖕1🤗1
Rust-приложение, которое превращает скучный терминал в живой dashboard
Splashboard - это splash screen для терминала, написанный на Rust. Открываешь новый shell - и вместо пустого экрана видишь контекст по проекту.
Он может показывать Git-статус, состояние CI, открытые PR, contribution heatmap и даже фазу Луны. Да, зачем-то это тоже есть.
Главная фишка в DX: репозиторий сам может описать свой dashboard через один
Под капотом Rust и
Вот так выглядит нормальный zero-overhead DX: не ещё одна тяжёлая панель в браузере, а быстрый TUI прямо там, где разработчик и так живёт - в терминале.
🔗 http://github.com/unhappychoice/splashboard
#Rust #RustLang #CLI #TerminalTools #OpenSource #DeveloperTools #TUI #Ratatui #Rustacean
Splashboard - это splash screen для терминала, написанный на Rust. Открываешь новый shell - и вместо пустого экрана видишь контекст по проекту.
Он может показывать Git-статус, состояние CI, открытые PR, contribution heatmap и даже фазу Луны. Да, зачем-то это тоже есть.
Главная фишка в DX: репозиторий сам может описать свой dashboard через один
dashboard.toml. Заходишь в папку проекта через cd - и терминал сразу подхватывает нужный контекст без флагов, ручной настройки и лишней возни.Под капотом Rust и
ratatui, работает кроссплатформенно, пакет доступен на crates.io.Вот так выглядит нормальный zero-overhead DX: не ещё одна тяжёлая панель в браузере, а быстрый TUI прямо там, где разработчик и так живёт - в терминале.
🔗 http://github.com/unhappychoice/splashboard
#Rust #RustLang #CLI #TerminalTools #OpenSource #DeveloperTools #TUI #Ratatui #Rustacean
👍28❤10🥰4🥴4😁2🤗1
⚙️ ASMLings - подробный гайд на русском
ASMLings - это набор из ~32 коротких упражнений на ассемблере Intel 8086, выстроенных по возрастанию сложности: от mov ax, 0x1337 до 32-битного сложения через carry flag, циклов, подпрограмм, работы с памятью и стеком.
Полный русскоязычный гайд по asmlings - интерактивной песочнице для изучения ассемблера Intel 8086, в которой 16-битный x86-эмулятор написан на Rust.
Внутри: что это, как устроено под капотом, как установить, как читать и решать упражнения, разборы реальных задач из репозитория, готовые примеры в examples/ и шпаргалки.
https://github.com/justxor/-ASMLingsru/
ASMLings - это набор из ~32 коротких упражнений на ассемблере Intel 8086, выстроенных по возрастанию сложности: от mov ax, 0x1337 до 32-битного сложения через carry flag, циклов, подпрограмм, работы с памятью и стеком.
Полный русскоязычный гайд по asmlings - интерактивной песочнице для изучения ассемблера Intel 8086, в которой 16-битный x86-эмулятор написан на Rust.
Внутри: что это, как устроено под капотом, как установить, как читать и решать упражнения, разборы реальных задач из репозитория, готовые примеры в examples/ и шпаргалки.
https://github.com/justxor/-ASMLingsru/
❤14🥰9👍5👏1🤗1
Команда Rust выложила pre-release версии 1.96.0. Это не финальный релиз, а последняя проверка перед публикацией stable, которая запланирована на 28 мая.
Разработчиков просят прогнать новую версию на реальных проектах и заранее поймать регрессии, пока релиз ещё можно поправить.
Из заметного в 1.96:
- стабилизировали
assert_matches! и debug_assert_matches!- добавили поддержку итерации по диапазонам `NonZero`-чисел
- Cargo теперь позволяет зависимости указывать одновременно git-репозиторий и альтернативный registry
- добавили
target.'cfg(..)'.rustdocflags в конфигурации Cargo- Rustdoc получил более аккуратный рендер deprecated-документации
- есть несколько compatibility notes, которые могут затронуть редкие edge cases
Отдельный сигнал: Rust Team обсуждает изменения в самом pre-release процессе и просит фидбек от сообщества. То есть речь не только про конкретную версию, но и про то, как Rust будет тестировать релизы дальше.
Проверить pre-release можно через rustup:
RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup update stablehttps://blog.rust-lang.org/inside-rust/2026/05/26/1.96.0-prerelease/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥10❤6🥰2🤗1
Если задача - быстро достать текст, координаты, структуру страниц и скриншоты, это можно делать локально.
Что умеет LiteParse:
- парсит PDF через PDFium
- сохраняет bounding boxes для текста
- умеет OCR через встроенный Tesseract
- поддерживает внешние OCR-серверы вроде EasyOCR или PaddleOCR
- генерирует скриншоты страниц для LLM-агентов
- отдаёт результат в JSON или обычный текст
- работает из Rust, Python, Node.js/TypeScript и WASM
- запускается на Linux, macOS и Windows
Авторы прямо разделяют сценарии: LiteParse для быстрых локальных задач, LlamaParse - для тяжёлых случаев с таблицами, сложной версткой, графиками, рукописным текстом и сканами.
https://github.com/run-llama/liteparse
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤7🔥4🥰1🤗1
🌐 Умный DNS-резолвер Numa
Numa - это портативный DNS-резолвер, который работает из одного бинарного файла. Он блокирует рекламу, позволяет настраивать локальные сервисы и шифрует запросы с помощью ODoH, обеспечивая вашу конфиденциальность. Все функции встроены, без необходимости в облачных сервисах.
🚀 Основные моменты:
- Портативный, работает на любом устройстве.
- Блокировка рекламы и кэширование по умолчанию.
- Поддержка DNSSEC и DNS-over-TLS для шифрования.
- Автоматическое обнаружение устройств в локальной сети.
- Легкий в использовании интерфейс и настройка.
📌 GitHub: https://github.com/razvandimescu/numa
Numa - это портативный DNS-резолвер, который работает из одного бинарного файла. Он блокирует рекламу, позволяет настраивать локальные сервисы и шифрует запросы с помощью ODoH, обеспечивая вашу конфиденциальность. Все функции встроены, без необходимости в облачных сервисах.
🚀 Основные моменты:
- Портативный, работает на любом устройстве.
- Блокировка рекламы и кэширование по умолчанию.
- Поддержка DNSSEC и DNS-over-TLS для шифрования.
- Автоматическое обнаружение устройств в локальной сети.
- Легкий в использовании интерфейс и настройка.
📌 GitHub: https://github.com/razvandimescu/numa
🔥23❤6🥰3🤗1
🦀 Rust 1.96 вышел: новые range-типы, удобные assert-матчи и важное изменение для WebAssembly
Rust 1.96.0 выглядит как минорный релиз, но внутри есть несколько вещей, которые реально стоит заметить.
Главное изменение - новые
Теперь можно хранить диапазоны в
Ещё одно приятное обновление -
Это как assert!(matches!(...)), только при падении выводится значение через Debug, а значит тесты и отладка становятся заметно понятнее. Макросы не добавили в prelude, их нужно импортировать вручную из core или std.
Для WebAssembly есть изменение построже: undefined symbols теперь становятся ошибкой линковки, а не молча превращаются в импорты из "env". Это может сломать часть старых сборок, зато такие проблемы теперь ловятся раньше, а не всплывают странным поведением на рантайме.
Из важного по безопасности: в Rust 1.96 исправлены две уязвимости Cargo для пользователей сторонних registry. Пользователей crates.io они не затрагивают.
Обновление стандартное:
Релиз без фейерверков, но полезный: меньше footgun'ов с range, удобнее проверки в тестах, строже WebAssembly-сборки и пара закрытых дыр в Cargo.
https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/
Rust 1.96.0 выглядит как минорный релиз, но внутри есть несколько вещей, которые реально стоит заметить.
Главное изменение - новые
core::range::Range* типы. Старые Range из core::ops напрямую реализуют Iterator, поэтому их нельзя нормально сделать Copy без неприятных ловушек. Новые range-типы идут другим путём: они реализуют IntoIterator, а значит могут быть Copy.Теперь можно хранить диапазоны в
Copy`-структурах без костылей вроде раздельных `start и end.
use core::range::Range;
#[derive(Clone, Copy)]
pub struct Span(Range<usize>);
Ещё одно приятное обновление -
assert_matches! и debug_assert_matches!. Это как assert!(matches!(...)), только при падении выводится значение через Debug, а значит тесты и отладка становятся заметно понятнее. Макросы не добавили в prelude, их нужно импортировать вручную из core или std.
Для WebAssembly есть изменение построже: undefined symbols теперь становятся ошибкой линковки, а не молча превращаются в импорты из "env". Это может сломать часть старых сборок, зато такие проблемы теперь ловятся раньше, а не всплывают странным поведением на рантайме.
Из важного по безопасности: в Rust 1.96 исправлены две уязвимости Cargo для пользователей сторонних registry. Пользователей crates.io они не затрагивают.
Обновление стандартное:
rustup update stable
Релиз без фейерверков, но полезный: меньше footgun'ов с range, удобнее проверки в тестах, строже WebAssembly-сборки и пара закрытых дыр в Cargo.
https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/
❤10👍8🔥6⚡2🥰1👏1🤗1