DevPrep

Все темы › Основные понятия программирования

Компиляция

Junior

Суть

Компиляция — перевод исходного кода на языке высокого уровня в машинный код целевого процессора до запуска (ahead-of-time). Для iOS это единственный путь: сторонним приложениям запрещено генерировать код в рантайме (JIT), поэтому Swift и Objective-C компилируются полностью.

Конвейер swiftc

  1. Parse — текст → AST (синтаксическое дерево). Здесь ловятся ошибки синтаксиса.
  2. Sema — проверка и вывод типов, разрешение перегрузок. Самая дорогая стадия: длинные выражения с литералами могут собираться секунды.
  3. SILGen → SIL — Swift Intermediate Language: сюда встроены проверки инициализации, retain/release для ARC, проверка эксклюзивного доступа, оптимизации уровня Swift (devirtualization, специализация generics, inlining).
  4. IRGen → LLVM IR — машинно-независимое представление; LLVM оптимизирует и генерирует код под arm64 (устройство) или arm64/x86_64 (симулятор).
  5. Linker (ld) — объектные файлы и библиотеки объединяются в исполняемый файл; динамические фреймворки подгружаются dyld при запуске.
swiftc -emit-sil main.swift       # посмотреть SIL
swiftc -emit-ir main.swift        # LLVM IR
swiftc -O -wmo main.swift         # оптимизация, модуль целиком

Что из этого спрашивают на практике

На что смотрит интервьюер

Понимаете ли вы, что проверка типов, ARC и concurrency-проверки — это работа компилятора, а не рантайма, и как настройки сборки (-O, -wmo, final) влияют на производительность приложения.

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store