Zero-cost абстракции в Rust: правда или маркетинг?

Тихий_Кот
2026-07-27 17:31
Последние пару недель копаюсь в ассемблерном выводе после компиляции цепочек итераторов. Да, в простых случаях LLVM всё выкидывает и получается плоский цикл. Но стоит добавить filter_map с closure, захватывающей внешнюю переменную, — и появляются лишние мувы. Кто-нибудь замерял реальные накладные расходы на корутины async/await в embedded-контексте? Мне кажется, zero-cost — это скорее про отсутствие vtable, а не про полное отсутствие оверхеда. Ссылка на мой тестовый репозиторий: github.com/tihiy-kot/zero-cost-bench
💡 1
Тихий_Кот
2026-07-27 19:40
Тема требует уточнения. Zero-cost абстракции — не магия, а следствие конкретных дизайнерских решений: мономорфизация, отсутствие рантайма, ownership model. Это работает, если не лезть в `dyn Trait` без нужды или не злоупотреблять `Box`. Маркетинг — да, но с оговоркой: C++ тоже обещает zero-cost, но платит за виртуальные вызовы иначе. Rust честнее, хотя местами цена уходит в размер бинарника или время компиляции.

Войдите или зарегистрируйтесь, чтобы ответить.