Домен
Компиляторы и языки
Профиль навыка
Вывод типов: Hindley-Milner, unification, type checking, generics, variance
Ролей
3
где встречается этот навык
Грейдов
5
сформированная дорожка роста
Обязательных требований
11
ещё 4 — необязательные
Компиляторы и языки
Теория компиляторов
17.03.2026
Выберите текущий грейд и сравните ожидания. Карточки ниже покажут, что нужно закрыть для следующего уровня.
Таблица показывает, как меняется глубина владения навыком от Junior до Principal.
| Роль | Обязательность | Описание |
|---|---|---|
| Compiler Engineer | Обязателен | Понимает базовые алгоритмы вывода типов: unification, Hindley-Milner inference. Знает разницу между structural и nominal type systems. Умеет работать с simple generics. |
| Language Tooling Engineer | Изучает основы алгоритмов вывода типов, таких как Hindley-Milner и унификация. Читает исходный код компилятора, чтобы понять работу проходов проверки типов на практике. | |
| Systems Programmer (C/C++) | Изучает, как вывод типов и проверка типов влияют на расположение данных в памяти и гарантии безопасности. Понимает базовые правила системы типов, применяемые компилятором в языках Rust или C++. |
| Роль | Обязательность | Описание |
|---|---|---|
| Compiler Engineer | Обязателен | Реализует bidirectional type checking для языков с type annotations. Понимает constraint-based type inference. Пишет type checker для языка с generics и simple subtyping. |
| Language Tooling Engineer | Реализует проходы вывода типов и интегрирует их с преобразованиями IR. Пишет комплексные тестовые наборы для проверки корректности type checker, включая граничные случаи с дженериками и вариантностью. | |
| Systems Programmer (C/C++) | Применяет знания вывода типов для написания более безопасного низкоуровневого кода с минимумом явных аннотаций. Использует проверку типов компилятора для обнаружения проблем безопасности памяти и неопределённого поведения на этапе компиляции. |
| Роль | Обязательность | Описание |
|---|---|---|
| Compiler Engineer | Обязателен | Проектирует type system для нового языка: variance, higher-kinded types, existential types. Реализует incremental type checking для language server. Оптимизирует производительность type checker. |
| Language Tooling Engineer | Обязателен | Проектирует продвинутые возможности системы типов, включая зависимые типы, GADT и вычисления на уровне типов. Архитектурно проектирует оптимизационные проходы компилятора, использующие информацию о типах для улучшения кодогенерации. Менторит команду по теории типов. |
| Systems Programmer (C/C++) | Обязателен | Проектирует типобезопасные абстракции для системных API, обеспечивающие корректность на этапе компиляции. Оценивает и влияет на решения по проектированию системы типов в языках вроде Rust, внося вклад в более безопасные паттерны системного программирования. |
| Роль | Обязательность | Описание |
|---|---|---|
| Compiler Engineer | Обязателен | Архитектурирует эволюцию type system языка с учётом backwards compatibility. Принимает решения о breaking changes. Управляет командой type system инженеров. |
| Language Tooling Engineer | Обязателен | Определяет архитектуру компилятора. Формирует стандарты разработки. Координирует compiler team. |
| Systems Programmer (C/C++) | Обязателен | Определяет архитектуру компилятора. Формирует стандарты разработки. Координирует compiler team. |
| Роль | Обязательность | Описание |
|---|---|---|
| Compiler Engineer | Обязателен | Определяет долгосрочную стратегию type system для языка платформы. Исследует dependent types, linear types, effect systems. Публикует академические работы о type системах. |
| Language Tooling Engineer | Обязателен | Определяет стратегию развития компилятора/языка. Проектирует core language features. Формирует technology vision. |
| Systems Programmer (C/C++) | Обязателен | Определяет стратегию развития компилятора/языка. Проектирует core language features. Формирует technology vision. |