gram news
Rust channel avatar

Rust

@rust_lib

Полезный контент по программированию на Rust

ProjectsRUProgramming

2,230subscribers

Open the Channel

Latest posts

  • Rust

    21 Sept, 09:44

    🔮 Ты не пройдешь: Магия предсказателя ветвленийВы когда-нибудь задумывались, почему обработка отсортированного массива чисел происходит в разы быстрее, чем случайного, даже если логика одна и та же?Всё дело в конвейере (pipeline). Процессор выполняет инструкции не по одной, а потоком: пока одна декодируется, другая уже выполняется. Но тут появляется if (ветвление).Процессор не знает, пойдет код в then или в else, пока не вычислит условие. Но ждать он не может - конвейер встанет. Поэтому он угадывает.• Угадал? Выполнение продолжается без задержек.• Не угадал? Происходит Pipeline Flush. Процессор выбрасывает все инструкции, которые успел "набрать" по неверному пути, и начинает заново с правильного адреса. Это огромная потеря тактов (10-20 циклов CPU).Пример на Rust:// Если data отсортирован: T T T T T F F F F F (паттерн ясен) // Если data случайный: T F T T F F T F (паттерн
    3642211Open in Telegram
  • Rust

    17 Sept, 07:32

    🗝 Турбируем HashMapСтандартный std::collections::HashMap в Rust использует алгоритм хэширования SipHash. Почему? Он криптографически стоек к HashDoS атакам (когда злоумышленник подбирает ключи так, чтобы все они попадали в один бакет, превращая мапу в связный список и убивая CPU).Но SipHash медленный. Если вы решаете алгоритмические задачи, пишете геймдев или у вас внутренний сервис без внешнего доступа - вам не нужна защита от DoS. Вам нужна скорость.Используйте сторонние хэшеры. Самые популярные:1. FxHash (rustc-hash) - используется внутри самого компилятора Rust и Firefox. Молниеносно быстрый для коротких ключей (integers). 2. AHash - современный, быстрый, использует аппаратные инструкции AES.Пример с крейтом rustc-hash:use rustc_hash::FxHashMap;// Это та же HashMap, но с быстрым хэшером let mut map: FxHashMap<u32, &str> = FxHashMap::default();Прирост производительнос
    616931Open in Telegram
  • Rust

    16 Sept, 06:47

    ⚡️ Забудь про RefCell для примитивовВам нужно изменить поле внутри неизменяемой структуры (&self). Рука тянется к RefCell? Стоп.RefCell имеет оверхед:1. Хранит счетчик заимствований (borrow count). 2. В рантайме проверяет правила (может паниковать!).Если ваш тип реализует Copy (числа, bool, маленькие структуры) - используйте Cell.В чем магия Cell? У него нет никакого рантайм-оверхеда. Вообще. Он не проверяет заимствования. Он работает так: "Я даю тебе копию значения" (get) или "Я заменяю значение целиком" (set). Вы не можете получить ссылку (&) на содержимое Cell, поэтому правила Rust не нарушаются.use std::cell::Cell;struct Metric { count: Cell<u64>, // Zero overhead
    624642Open in Telegram
  • Rust

    15 Sept, 08:04

    Создание кроссплатформенного приложения с GUI на Rust: От идеи до реальностиElectron-приложения тяжелые, потребляют много памяти, а на Rust можно собрать легкое, быстрое и безопасное десктоп-приложение, которое будет работать на Windows, macOS и Linux. Tauri — это фреймворк, который позволяет использовать веб-технологии (HTML/CSS/JS) для интерфейса и мощь Rust для бэкенда. Но чтобы собрать работающий продукт, а не просто «посмотреть пример», нужно понимать, как связать фронтенд с бэкендом, работать с файловой системой, делать асинхронные вызовы и правильно собирать билды.На открытом вебинаре 23 сентября в 20:00 разберём полный цикл создания кроссплатформенного GUI-приложения на Rust с использованием Tauri. Посмотрим, как организовать проект, как писать логику на Rust и подключать её к интерфейсу, как сохранять и загружать данные,безопасно работать с файловой системой и системными
    Image from a post by RustImage from a post by Rust
  • Rust

    11 Sept, 06:29

    Почему Vec::new() это ловушка для производительности.📈 Векторный рост: Избегаем реаллокацийМы часто пишем:let mut vec = Vec::new(); for item in heavy_iter { vec.push(item); }Что происходит под капотом?1. Вектор создается пустым (0 байт).2. Первый push: аллокация на 4 элемента (условно).3. Пятый push: места нет. • Создается новый буфер (размером x2). • Все старые элементы копируются туда.
    742721Open in Telegram
  • Rust

    9 Sept, 05:33

    🤠 Трюк Индианы Джонса: std::mem::takeТипичная ситуация: у вас есть &mut self, и вы хотите забрать поле (например, String или Vec), что-то с ним сделать, и, возможно, вернуть обратно или сохранить измененную версию.Компилятор бьет по рукам: нельзя просто так переместить (move) значение из-за мутабельной ссылки. Новички часто делают .clone(), чтобы успокоить borrow checker. Но это лишняя аллокация!Решение: std::mem::take.Оно забирает значение из ссылки, оставляя на его месте Default::default().struct Buffer { data: Vec<u8>, }impl Buffer { fn process(&mut self) { // Мы "выкрадываем" вектор. // В self.data теперь пустой Vec (без аллокаций). let raw_data = std::mem::take(&mut self.data);
    714853Open in Telegram
  • Rust

    7 Sept, 07:32

    🐮 Cow: Ленивое клонированиеВсе знают: лишний clone() - это грех. Но иногда нам нужно вернуть строку, которая может быть изменена, а может и нет.Допустим, мы чистим инпут от спецсимволов.1. Если спецсимволов нет - зачем аллоцировать новую строку? Можно вернуть ссылку на исходную. 2. Если есть - придется создать новую String.Здесь на сцену выходит std::borrow::Cow (Clone on Write).use std::borrow::Cow;fn sanitize(input: &str) -> Cow<str> { if input.contains('!') { // Аллокация происходит только тут Cow::Owned(input.replace('!', "?")) } else { // Тут мы просто возвращаем ссылку. Zero allocation. Cow::Borrowed(input)
    8221032Open in Telegram
  • Rust

    2 Sept, 08:51

    Владение, заимствование и ссылки в Rust: как компилятор делает ваш код безопаснымВ Rust одна из самых непривычных для разработчиков тем — это ownership (владение) и borrowing (заимствование). Многие пытаются писать на Rust как на C++ или Python, натыкаются на компилятор, и правила borrow checker'а поначалу кажутся слишком строгими. На деле компилятор просто защищает вас от ошибок, которые в других языках приводят к падениям, утечкам памяти и гонкам данных. Но чтобы подружиться с borrow checker’ом, нужно понять логику, а не заучивать правила.На открытом вебинаре 9 сентября в 20:00 разберём фундаментальные концепции Rust, которые делают код безопасным без сборщика мусора. Поговорим о том, почему на одни и те же данные можно взять сколько угодно иммутабельных ссылок (&), но мутабельная (&mut) может быть только одна — и не одновременно с иммутабельными. Разберём, чем перемещение (move)
    Image from a post by RustImage from a post by Rust
    99121Open in Telegram
  • Rust

    2 Sept, 06:57

    🛠 Cargo Expand: Загляни под капот макросамПризнайтесь, у вас бывало такое: навесили #[derive(Serialize)] или сложный макрос из sqlx, получили странную ошибку компиляции и сидите в ступоре?Макросы это круто, но это черный ящик. Чтобы превратить его в прозрачный, поставьте cargo-expand.cargo install cargo-expandЗапускаем:cargo expandИ видите весь тот ужас (или красоту), который генерируется до того, как код попадет к компилятору. Это маст-хэв тулза при отладке async трейтов (привет, async-trait крейт) и понимании того, как работает "магия" фреймворков типа Actix или Rocket.P.S. Только не пугайтесь, когда увидите, во что разворачивается println!.#rust #tools #cargo #macro📲 Мы в MAX
    793741Open in Telegram
  • Rust

    31 Aug, 06:05

    👻 Сила пустоты: Zero-Sized Types (ZST)Мы часто говорим про "zero-cost abstractions", но редко задумываемся, как это выглядит в памяти. ZST - это типы, которые занимают 0 байт. Компилятор знает о них, но в рантайме они исчезают.Зачем это нужно, кроме экономии памяти? Для управления состоянием на уровне типов.Представьте, что у вас есть стейт-машина. Вместо того чтобы хранить enum State и делать проверки в рантайме:struct Socket<State> { inner: FileDesc, _marker: PhantomData<State>, // 0 байт }// ZST-маркеры struct Connected; struct Disconnected;impl Socket<Disconnected> { fn connect(self) -> Socket<Connected> { // Логика подключения...
    818101Open in Telegram
  • Rust

    23 Aug, 11:05

    🚀 Подборка полезных IT каналов в MaxСистемное администрирование, DevOps 📌https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак
    MAXСистемный Администратор | Sysadmin Windows & Linux Server. …Купить рекламу: https://telega.in/m/i_odmin Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
    8561210311Open in Telegram
  • Rust

    21 Aug, 07:49

    Pake🤱🏻 Превратите любую веб-страницу в настольное приложение с помощью Rust.Pake поддерживает Mac, Windows и Linux.https://github.com/tw93/Pake📲 Мы в MAX👉 @rust_lib
    865video542Open in Telegram
  • Rust

    20 Aug, 06:53

    🦀 Error Handling: Библиотеки против ПриложенийЧасто вижу в код-ревью кашу из способов обработки ошибок. Давайте раз и навсегда зафиксируем базу, чтобы ваш код был идиоматичным.Есть два лагеря, и вам нужно быть в обоих, но в разное время:1. Вы пишите Библиотеку? Используйте thiserror. Почему: Вашим пользователям важно матчить ошибки. Им нужно знать, что именно пошло не так (NetworkError, ParseError), чтобы программно на это отреагировать. Вы не должны навязывать им тяжелые трейты.#[derive(thiserror::Error, Debug)] pub enum MyLibError { #[error("IO error: {0}")] Io(#[from] std::io::Error), #[error("Invalid header")] InvalidHeader, }2. Вы пишите Приложение (CLI, Backend)? Используйте anyhow.
    1,0305532Open in Telegram
  • Rust

    19 Aug, 05:36

    Добро пожаловать на «Полный курс Rust»! (2024) (Eng ver.)Этот обширный курс разработан, чтобы превратить вас из новичка в опытного программиста Rust, охватывая все основные темы, необходимые для создания надежного и эффективного программного обеспечения.В этом курсе вы начнете структурированный процесс обучения, который включает:Chapter 0 Introduction to Rust 00:00 Chapter 0 Install Rust 08:05 Chapter 0 Write first Rust program 09:26 Chapter 0 Cargo package manager 12:36 Chapter 1 Primitive Data Types 15:53 Chapter 2 Compound Data Types 25:12 Chapter 3 Functions 46:40 Chapter 4 Ownership 01:06:27 Chapter 5 Borrowing, and References 01:15:22 Chapter 6 Variables and Mutability 01:27:16 Chapter 7 Constants 01:31:05 Chapter 8 Shadowing 01:38:00 Chapter 9 Comments 01:46:49
    954video5321Open in Telegram
  • Rust

    17 Aug, 05:24

    GhostportВысокопроизводительный инструмент для подмены портов, написанный на Rust. Сбивайте с толку порт-сканеры с помощью динамической эмуляции сервисов на всех портах. Поддерживает настраиваемые сигнатуры, эффективную асинхронную обработку и простое перенаправление трафика.Особенности- Динамическая эмуляция портов: отвечает на порт-сканирование набором правдоподобных сигнатур сервисов. - Настраиваемые сигнатуры: легко добавлять или изменять сигнатуры сервисов через простой текстовый файл. - Высокая производительность: построен на Rust и Tokio для эффективной асинхронной обработки соединений. - Гибкое логирование: режимы debug, verbose и quiet для разных сценариев использования. - Простота использования: простой интерфейс командной строки с разумными настройками по умолчанию.https://github.com/vxfemboy/ghostport📲 Мы в MAX👉 @rust_lib
    1,010video732Open in Telegram
  • Rust

    10 Aug, 05:43

    Пишем калькулятор на Rust с GUIЗачем еще один калькулятор? Да не зачем, просто как тестовый проект для рассмотрения GUI-библиотеки.Изначально я хотел попробовать такие крейты, как GPUI, Floem и Xilem, но первая, кажется, пока работает только под MacOS и Linux, вторая не позволяет установить иконку окну и кушает оперативы побольше Webview в Tauri, а до третьей я так и не добрался, узнав об Slint.Об Slint есть всего несколько новостных постов на Хабре, поэтому, возможно, вам будет интересно посмотреть, что это такое.https://habr.com/ru/articles/804655/📲 Мы в MAX👉 @rust_lib
    Image from a post by RustImage from a post by Rust
    1,28041Open in Telegram
  • Rust

    8 Aug, 12:00

    🚀 Подборка полезных IT каналов в MaxСистемное администрирование, DevOps 📌https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак
    MAXСистемный Администратор | Sysadmin Windows & Linux Server. …Купить рекламу: https://telega.in/m/i_odmin Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
    1,100108321Open in Telegram
  • Rust

    5 Aug, 12:42

    Pico Pico - Embedded Programming with RustВ этой книге используется Raspberry Pi Pico 2 (на базе чипа RP2350), программируемый на Rust.Рассмотрены разнообразные проекты - например, затухание светодиода, управление сервоприводом, измерение расстояния ультразвуковым датчиком, отображение изображения Ferris на OLED-дисплее, работа с RFID-ридером, проигрывание мелодий на зуммере, автоматическое включение светодиода при отсутствии света в комнате, измерение температуры и многое другое.https://pico.implrust.com/index.html📲 Мы в MAX👉 @rust_lib
    Image from a post by RustImage from a post by Rust
    1,11063Open in Telegram
  • Rust

    3 Aug, 10:35

    Пишем простой калькулятор используя фреймворк eframe (egui)Всем здравствуйте. Ниже будет приведен пример написания PWA приложения готового для использования как в браузере, так и на компьютере с ОС Windows. Использовать будем язык программирования Rust и фреймворк eframe (egui). Готовое приложение будет доступно как исполняемый файл для ОС Windows, и как файл Webassembly. В процессе работы мы будем использовать GitHub Action для отслеживания корректности написания нашего кода и сборки исполняемых файлов программы, а также для развертывания (версию программы с использованием Webassembly) как страницы в интернете (GitHub Pages).https://habr.com/ru/articles/722438/📲 Мы в MAX👉 @rust_lib
    Image from a post by RustImage from a post by Rust
    1,090111Open in Telegram
  • Rust

    29 Jul, 07:11

    Wgpu - это безопасная и переносимая графическая библиотека для Rust, основанная на API WebGPU. Она подходит для универсальной графики и вычислений на GPU.Приложения, использующие wgpu, могут работать нативно на Vulkan, Metal, DirectX 12 и OpenGL ES, а также в браузерах через WebAssembly на WebGPU и WebGL2.https://wgpu.rs/https://github.com/gfx-rs/wgpu📲 Мы в MAX👉 @rust_lib
    Image from a post by RustImage from a post by Rust
    1,250631Open in Telegram