DigitableCourses
База знаний

Тема: Компиляторы

15 материалов в этой теме.

Материалы

12 на странице
Статья

Синтаксический анализ: грамматики, рекурсивный спуск, приоритеты операторов

Как из плоского потока токенов получается дерево: контекстно-свободные грамматики, BNF, неоднозначность, левая рекурсия, FIRST/FOLLOW, рекурсивный спуск и Pratt-разбор — …

#компиляторы#парсеры#грамматики
26 мин
Статья

Семантический анализ: области видимости, таблицы символов, разрешение имён

Фаза, связывающая каждое имя с его объявлением: лексические области видимости, таблица символов, слоты кадра и захват переменных замыканиями, порядок объявлений в разных …

#компиляторы#языки программирования#области видимости
19 мин
Статья

Сборка мусора: подсчёт ссылок, mark-sweep, поколения, паузы

Как рантайм решает, что память больше не нужна: достижимость против живости, подсчёт ссылок и его циклы, трассирующая сборка и трёхцветный инвариант, копирование по …

#компиляторы#сборка мусора#управление памятью
30 мин
Статья

Проектирование языков и DSL: синтаксис, ошибки, эргономика

Язык — это интерфейс: когда свой DSL оправдан, а когда достаточно конфига; как проектировать синтаксис, однозначный и для человека, и для парсера; почему сообщение об …

#компиляторы#dsl#проектирование языков
26 мин
Статья

Проверка и вывод типов: системы типов, унификация, Хиндли-Милнер

Как компилятор доказывает, что программа не сложит число со строкой: суждения типизации, бидирекциональная проверка, унификация с occurs check и полный алгоритм Хиндли — …

#компиляторы#типы#вывод типов
28 мин
Статья

Оптимизации: свёртка констант, инлайнинг, устранение мёртвого кода

Как компилятор переписывает программу, не меняя её смысла: решётки и анализ потока данных, SCCP, нумерация значений, DCE, инлайнинг и проблема порядка проходов — с …

#компиляторы#оптимизация#ssa
31 мин
Статья

Лямбда-исчисление в живых языках: от Lisp до современных стрелочных функций

Где именно лямбда-исчисление живёт в языках, на которых вы пишете каждый день: стрелочные функции как абстракции, вызов как бета-редекс, let как сахар, замыкания как …

#лямбда-исчисление#функциональное программирование#компиляторы
22 мин
Статья

Лексический анализ: токены, регулярные языки, свой лексер с нуля

Первая фаза компилятора: как поток символов превращается в поток токенов, почему для этого хватает конечного автомата, где проходит граница регулярных языков — и полный …

#компиляторы#лексический анализ#конечные автоматы
21 мин
Статья

Компиляторы: карта трека и что происходит между кодом и процессором

Обзор трека: как текст программы превращается в исполняемые инструкции, из каких фаз собран компилятор, чем он отличается от интерпретатора и JIT, и какой маленький язык …

#компиляторы#языки программирования#интерпретаторы
18 мин
Статья

Инструменты языка: LSP, форматтеры, линтеры, отладчики

Почему компилятор-функция не годится для IDE и во что он превращается: протокол LSP до последнего байта заголовка, компилятор как база данных запросов, устойчивый парсер …

#компиляторы#lsp#инструменты разработки
27 мин
Статья

Генерация кода: целевые архитектуры, распределение регистров, ABI

Как оптимизированное IR превращается в машинные инструкции: выбор инструкций и покрытие дерева плитками, анализ живости, распределение регистров раскраской графа и linear …

#компиляторы#кодогенерация#ассемблер
22 мин