m04-zero-cost — скилл для Claude Code: дженерики и трейты в Rust
Разбирает ошибки E0277, E0308 и E0599 и помогает выбрать между дженериками и dyn Trait. Пригодится, когда компилятор Rust упирается в трейт-баунды.
npx skills add actionbook/rust-skills --skill m04-zero-cost -a claude-codeЧто делает m04-zero-cost
Скилл ведёт от ошибки к вопросу о дизайне. Вместо «добавь трейт-баунд» он спрашивает, на правильном ли уровне абстракция: одинаковое поведение у разных типов — трейт, разное поведение у одного типа — enum, абстракция не нужна — конкретный тип. Таблица ошибок покрывает E0277, E0308, E0599 и E0038.
Дальше идёт выбор между статической и динамической диспетчеризацией. Тип известен на этапе компиляции — дженерики или impl Trait, известен в рантайме — dyn Trait. Есть сравнение синтаксиса в позиции аргумента и возврата, таблица стоимости: у дженериков нулевые накладные расходы, но растёт размер кода, у dyn — поиск по vtable и аллокация для Box.
Отдельный блок про object safety: трейт остаётся объектно-безопасным, если не требует Self: Sized, не возвращает Self и не имеет generic-методов. Есть разбор антипаттернов — например, dyn там, где тип известен заранее. Скилл ссылается на соседние модули набора: m05-type-driven, m09-domain, m10-performance, m07-concurrency. Он не вызывается вручную: user-invocable: false, поэтому срабатывает, когда агент видит подходящий код или ошибку компилятора.
Какие задачи решает
- разобрать E0277 и понять, где ошибся с трейт-баундом
- выбрать между дженериками и
dyn Traitдля плагинной архитектуры - собрать коллекцию разнотипных значений через
Vec<Box<dyn Trait>> - проверить трейт на object safety перед переходом на динамическую диспетчеризацию
- сократить время компиляции, убрав лишнюю мономорфизацию
Примеры запросов агенту
- у меня E0277 на трейт-баунде, разбери, правильная ли это абстракция
- нужна плагинная архитектура на Rust: дженерики или
dyn Trait? - трейт не проходит по object safety, что переделать
Как установить m04-zero-cost
1Через Skills CLI (Vercel)
npx skills add actionbook/rust-skills --skill m04-zero-cost -a claude-code2Вручную: положить файлы
~/.claude/skills/m04-zero-cost/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/m04-zero-cost/
1Через Skills CLI (Vercel)
npx skills add actionbook/rust-skills --skill m04-zero-cost -a codex2Вручную: положить файлы
.agents/skills/m04-zero-cost/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add actionbook/rust-skills --skill m04-zero-cost -a cursor2Вручную: положить файлы
.cursor/skills/m04-zero-cost/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install actionbook/rust-skills m04-zero-cost2Вручную: положить файлы
.github/skills/m04-zero-cost/SKILL.md1Через Skills CLI (Vercel)
npx skills add actionbook/rust-skills --skill m04-zero-cost -a gemini-cli2Командой платформы
gemini skills install https://github.com/actionbook/rust-skills --path skills/m04-zero-costВручную: положить файлы
.devin/skills/m04-zero-cost/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add actionbook/rust-skills --skill m04-zero-cost -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о m04-zero-cost
Как установить m04-zero-cost в Claude?
Выполните npx skills add actionbook/rust-skills --skill m04-zero-cost -a claude-code. Скилл окажется в ~/.claude/skills/m04-zero-cost/SKILL.md.
Что делает m04-zero-cost?
Помогает выбирать между статической и динамической диспетчеризацией в Rust и разбирает ошибки трейт-баундов. Работает как справочник по дженерикам, impl Trait и dyn Trait.
Можно вызвать этот скилл вручную?
Нет, во фронтматтере стоит user-invocable: false. Агент подключает его сам, когда в коде появляются дженерики, трейты или соответствующие ошибки компилятора.