Hacker News Digest

10 октября 2025 г. в 15:57 • hackeryarn.com • ⭐ 98 • 💬 44

OriginalHN

#rust

Let's write a macro in Rust

Статья демонстрирует процесс создания макроса в Rust на примере query!, вдохновлённого SQL-подобными DSL.

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

Основные шаги создания включают:

  • Написание самой простой возможной версии макроса (например, query!(from db select title))
  • Постепенную реализацию одной функциональности за раз (начиная с поддержки select для выборки полей)
  • Использование встроенных инструментов Rust (как macro_rules!) для декомпозиции задачи

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

В статье разбирается конкретный пример с песнями (структура Song с полями title, artist, rating), показывая, как макрос преобразует декларативный синтаксис в действительный код на Rust, извлекающий данные из коллекции.

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