# interpreters

Подсказывает агенту, как устроить диспетчеризацию байткода, стековую или регистровую ВМ и простой JIT через mmap.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 564 установки · ★ 267
- Автор: mohitmishra786
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/mohitmishra786/low-level-dev-skills/tree/HEAD/skills/low-level-programming/interpreters/SKILL.md
- Обновлён: 2026-06-27
- HTML: https://affpapa.org/nevibecode/skills/interpreters

## Что делает

Скилл разбирает, как писать интерпретаторы и небольшие JIT-компиляторы на C и C++. Внутри — рабочий процесс из нескольких шагов: выбор архитектуры ВМ, стратегия цикла диспетчеризации, представление значений, управление стеком, инлайн-кэширование и минимальный JIT.

По диспетчеризации даны три варианта с примерами кода: `switch`, computed goto и прямое шитьё. Computed goto помечен как расширение GCC/Clang, не стандартный C, поэтому его советуют оборачивать в `#ifdef __GNUC__` и оставлять `switch` как запасной путь для других компиляторов. Для JIT показан пример на x86-64: выделение исполняемой памяти через `mmap`, запись байтов машинного кода, вызов. На macOS Apple Silicon нужен `pthread_jit_write_protect_np()` или флаг `MAP_JIT` — иначе код просто не выполнится.

Есть раздел с советами по производительности: держать указатель стека в callee-saved регистре, использовать NaN boxing или тегированные указатели, искать узкие места через `perf`, делать специализированные обработчики под частые комбинации типов. Скилл пригодится, когда интерпретатор тормозит и непонятно, где именно теряется время.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill interpreters -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/interpreters/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/interpreters/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill interpreters -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/interpreters/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill interpreters -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/interpreters/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install mohitmishra786/low-level-dev-skills interpreters
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/interpreters/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill interpreters -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/low-level-programming/interpreters
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/interpreters/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill interpreters -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/mohitmishra786/low-level-dev-skills/tree/HEAD/skills/low-level-programming/interpreters/SKILL.md

## Когда брать
- выбрать между стековой и регистровой ВМ под свой язык
- ускорить цикл диспетчеризации байткода
- добавить простой JIT без внешних библиотек
- разобраться, почему интерпретатор упирается в предсказание переходов
- уложить значения в один слот через NaN boxing или тегированный указатель

## Примеры запросов агенту
- Покажи, как переписать мой цикл `switch` на computed goto с запасным вариантом для MSVC
- Сравни стековую и регистровую ВМ для языка с замыканиями — что выбрать
- Напиши минимальный JIT на `mmap`, который компилирует сложение двух int

## Похожие
- [vm-and-bytecode-reverse](https://affpapa.org/nevibecode/skills/vm-and-bytecode-reverse.md) — скилл · 3700 установок
- [machine-learning](https://affpapa.org/nevibecode/skills/machine-learning.md) — скилл · 2100 установок
- [jax-best-practices](https://affpapa.org/nevibecode/skills/jax-best-practices.md) — скилл · 704 установки
- [dotnet-pinvoke](https://affpapa.org/nevibecode/skills/dotnet-pinvoke.md) — скилл · 3500 установок
- [nodejs-core](https://affpapa.org/nevibecode/skills/nodejs-core.md) — скилл · 1900 установок
- [browser-exploitation-v8](https://affpapa.org/nevibecode/skills/browser-exploitation-v8.md) — скилл · 3600 установок

Из того же набора: [mohitmishra786/low-level-dev-skills](https://affpapa.org/nevibecode/by/mohitmishra786/low-level-dev-skills.md) — 62 карточки

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
