После C++ захотелось изучить Rust поглубже. Да и под рукой не оказалось софтины с нужным функционалом Quicksort

Каждый день я работаю с файлами: перемещаю, копирую, сортирую, раскладываю по папкам. И каждый день я трачу время на то, чтобы открыть нужную директорию, перетащить файл, закрыть лишние окна. В Windows эта рутина особенно утомляет: проводник, куча вкладок, постоянное переключение между папками. Хотелось простого решения: выделил файл → правый клик → выбрал папку → файл перемещён. Без лишних телодвижений, без открытия дополнительных окон.
Я поискал готовые утилиты. Есть проприетарные решения — FastFolders, XYplorer, Directory Opus. Но они либо платные, либо перегружены функционалом, либо требуют сложной настройки. Бесплатные аналоги оказались либо неудобными, либо недостаточно гибкими. Тогда я подумал: «А почему бы не написать свою?»
К тому моменту я уже много лет работал с C++ — знал WinAPI, COM, IPC, низкоуровневую работу с системой. Но в современных проектах хотелось попробовать что-то более безопасное, современное и приятное в разработке. Так я обратил внимание на Rust. Безопасная работа с памятью, богатая экосистема, отличная поддержка Windows через windows-rs — это выглядело многообещающе. А Tauri (на базе Rust) давал возможность сделать красивый GUI на React, но без тяжеловесного Electron.
В итоге я решил: изучу Rust на реальном проекте, который буду использовать сам. И если он окажется полезным — поделюсь с сообществом.
Рождение QuickSort: от идеи к первому прототипу
Первая цель была простой и конкретной: написать утилиту, которая добавляет в контекстное меню проводника каскадное меню с избранными папками. Клик — и файл перемещён. Никаких лишних окон, никаких перетаскиваний.
Почему я выбрал именно этот стек:
Rust — безопасность, производительность, кроссплатформенность (в будущем), отличная интеграция с Windows через
windows-rs.Tauri 2 — легковесный GUI, безопасная изоляция бэкенда и фронтенда, встроенная поддержка системных интеграций, минимальный размер приложения.
React + TypeScript — быстрая разработка интерфейса, компонентный подход, огромная экосистема.
Первые же шаги показали, что COM-интеграция с проводником Windows — это нетривиальная задача. Пришлось разбираться с устройством контекстного меню, интерфейсами IContextMenu, IShellExtInit, регистрацией COM-сервера без прав администратора. Rust + windows-rs сильно упростили работу с WinAPI, но потребовали времени на изучение. Я перелопатил тонны документации, примеров, форумов, статей.
И тут на меня напал «нейрослоп».
Шутка, конечно. Но если серьёзно — без нейросетей я бы потратил в разы больше времени. ChatGPT, Claude, локальные модели стали моими верными помощниками. Генерация шаблонов, поиск ошибок, перевод документации с «птичьего языка» на человеческий — нейросети ускорили процесс в несколько раз.
Но есть важный нюанс. «Нейрослоп» — это когда ИИ выдаёт код, который выглядит убедительно, компилируется, но делает не то, что надо. Или делает, но с багами, которые вылезают в самый неподходящий момент. Поэтому правило железное: нейросети — для скорости, проверка — руками. ИИ — это ассистент, а не замена разработчику.
В итоге через пару недель появился работающий context-menu-dll, который загружался в Explorer и показывал список папок. Ура! Прототип заработал.
Архитектура: не просто «ещё одна утилита»
Когда прототип начал работать, я понял: можно остановиться, но хочется сделать что-то большее. Поэтому я сразу заложил правильную архитектуру.
Я взял за основу Clean Architecture + DDD — подход, который хорошо зарекомендовал себя в корпоративных проектах. Разделение на слои:
Domain — сущности (
File,Folder,Operation), value objects, события. Никаких внешних зависимостей.Application — use cases (перемещение, копирование, отмена), порты (интерфейсы для внешних зависимостей).
Infrastructure — реализация репозиториев (пока JSON), файловой системы, генерация UUID.
Adapters — Tauri-приложение, COM-сервер, IPC-клиент.
Все крейты собраны в одном Cargo workspace. Это удобно для разработки и сборки.
COM-сервер реализован как независимая DLL. Она не требует прав администратора — регистрация в HKCU. При штатном завершении программы все ключи реестра удаляются, никакого мусора в системе не остаётся.
IPC через Named Pipes — простой JSON-фрейминг, асинхронная обработка команд. Это позволяет обмениваться данными между COM-сервером, GUI и фоновым сервисом (который появится позже).
Что дал Rust?
windows-rs— безопасные обёртки над WinAPI, компилятор не даёт стрелять себе в ногу.serde— удобная сериализация для IPC и хранения конфигов.Встроенное тестирование и документация — приятный бонус.
Borrow checker — поначалу бесил, но потом спас от многих трудноуловимых багов.
Ключевые фичи: что умеет QuickSort прямо сейчас
Каскадное контекстное меню — главная «фишка», ради которой всё и затевалось. Вложенность до 10 уровней, настройка прямо из GUI. Выделил файл, правый клик, выбрал папку — и файл уже там.
Мгновенное перемещение/копирование — атомарные операции с поддержкой跨дисковых перемещений. Предварительная проверка: есть ли дубликаты? (по имени, размеру, SHA-256). Если дубликат найден — уведомление, чтобы случайно не перезаписать важный файл.
История операций и отмена (Undo) — полный аудит всех действий. Можно откатить перемещение или копирование одним кликом. Это спасло меня уже не раз, когда я случайно перемещал файл не в ту папку.
Чистый и удобный GUI — редактор папок, поиск по библиотеке, тёмная тема, системный трей. Ничего лишнего — только то, что нужно для управления папками и операциями.
Zero-install deployment — один .exe-файл, который при первом запуске сам регистрирует COM-сервер. Портативный режим: можно запускать с флешки, никаких следов в системе (кроме временных записей в реестре, которые удаляются при выходе).
Что дальше? Планы, которые меня вдохновляют
На данный момент QuickSort — рабочий прототип для Windows 10/11 x64. Уже есть всё, что я перечислил выше. Но амбиции — намного шире.
Ближайшие планы (Фаза 0–2):
Кроссплатформенность (macOS, Linux) — адаптация путей, IPC через Unix-сокеты, интеграция с Nautilus/Finder.
Интерактивная командная строка с синтаксисом Everything — поиск, фильтрация, сортировка.
Расширенная индексация (USN Journal / inotify / FSEvents).
Долгосрочные амбиции (Фаза 3–11):
Семантическая организация папок (sidecar-файлы, теги, автоматическая категоризация).
Плагинная система: поддержка плагинов Total Commander (WCX/WDX/WFX/WLX) + Python через MCP + WASM.
Локальный ИИ (ONNX) — автоматическое тегирование, семантический поиск, категоризация.
Децентрализованный реестр «Смыслобайт» — неизменяемая фиксация хэшей и метаданных в блокчейне.
Фоновый сервис (Windows Service / Linux Daemon) для выполнения задач без GUI.
Проект полностью Open Source (MIT), и я открыт к любым contributions — от баг-репортов до pull request’ов.
Главные уроки: что я вынес из этого опыта
Rust — это не страшно. После C++ кривая обучения оказалась довольно пологой. Да, borrow checker поначалу раздражал, но потом я понял, что это не ограничение, а защита. Компилятор ловит ошибки, которые в C++ вылезли бы в рантайме.
Tauri — отличная альтернатива Electron. Минимальный оверхед, нативный бэкенд на Rust, безопасный фронтенд. Идеально подходит для утилит, которым нужен современный GUI, но не нужен лишний вес.
Clean Architecture окупается. Даже для небольшого проекта разделение на слои упрощает тестирование и расширение. Чёткие границы между доменом, приложением и инфраструктурой позволяют безболезненно менять реализации (например, перейти с JSON на SQLite).
Нейросети — это инструмент, а не решение. Они ускоряют разработку, но без контроля превращаются в «нейрослоп». Самый ценный навык сейчас — не знание языка или фреймворка, а умение тестировать, документировать, проектировать и анализировать. Код — это лишь часть работы.
Open Source — это круто. Проект живёт, даже когда у тебя нет времени — сообщество помогает с багами, идеями и переводом документации. Приятно видеть, что твоя утилита кому-то реально упрощает жизнь.
Заключение: попробуйте, поучаствуйте, помогите сделать лучше
QuickSort родился из личной потребности и желания изучить Rust. Вырос в полноценный проект с чистой архитектурой, открытым кодом и амбициозными планами. Мы продолжаем развивать его, добавлять фичи, расширять платформы.
Попробуйте QuickSort — скачать можно с GitHub: https://github.com/azmrv/QuickSort
Если понравилось — поставьте звезду ⭐, это лучшая мотивация для разработчиков.
Если хотите поучаствовать — создайте issue, мы обсудим и исправим, форкайте и отправляйте PR.
Помощь с документацией, переводами и тестированием тоже приветствуется!
Полезные ссылки:
GitHub репозиторий: https://github.com/azmrv/QuickSort
Лицензия: MIT
Документация и ADR — в репозитории
P.S. А пока я пошёл править баги, которые нейросеть написала вчера ночью. Но это уже совсем другая история.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.