Компилятор Swift
Основной репозиторий Swift содержит исходный код компилятора Swift и стандартной библиотеки, а также связанные компоненты, такие как SourceKit (для интеграции с IDE), набор регрессионных тестов Swift и документацию на уровне реализации.
Репозиторий драйвера Swift содержит новую реализацию «драйвера» компилятора Swift, которая предназначена для того, чтобы стать более расширяемым, поддерживаемым и надёжным заменой существующего драйвера компилятора.
Архитектура компилятора
В целом, компилятор Swift в основном отвечает за трансляцию исходного кода Swift в эффективный, исполняемый машинный код. Однако фронтенд компилятора Swift также поддерживает ряд других инструментов, включая интеграцию с IDE для подсветки синтаксиса, автодополнения кода и других удобств. Данный документ предоставляет общее описание основных компонентов компилятора Swift:
-
Разбор: Парсер представляет собой простой, рекурсивный парсер нисходящего типа (реализованный в lib/Parse) с интегрированным, написанным вручную лексером. Парсер отвечает за создание дерева абстрактного синтаксиса (AST) без какой-либо семантической или типовой информации и выводит предупреждения или ошибки для грамматических проблем в входном источнике.
-
Семантический анализ: Семантический анализ (реализованный в lib/Sema) отвечает за взятие проанализированного AST и преобразование его в хорошо сформированную, полностью проверенную с точки зрения типов форму AST, выводя предупреждения или ошибки для семантических проблем в исходном коде. Семантический анализ включает в себя вывод типов и, при успешном выполнении, указывает, что можно безопасно генерировать код из результирующего, проверенного с точки зрения типов AST.
-
Импортер Clang: Импортер Clang (реализованный в lib/ClangImporter) импортирует модули Clang и сопоставляет экспортируемые API C или Objective-C с соответствующими API Swift. Результирующие импортированные AST могут быть использованы семантическим анализом.
-
Генерация SIL: Swift Intermediate Language (SIL) — это высокоуровневый, специфичный для Swift промежуточный язык, подходящий для дальнейшего анализа и оптимизации кода Swift. Фаза генерации SIL (реализованная в lib/SILGen) понижает проверенный с точки зрения типов AST до так называемого «сырого» SIL. Дизайн SIL описан в docs/SIL/SIL.md.
-
Гарантированные преобразования SIL: Гарантированные преобразования SIL (реализованные в lib/SILOptimizer/Mandatory) выполняют дополнительные диагностики потока данных, влияющие на корректность программы (например, использование неинициализированных переменных). Конечным результатом этих преобразований является «каноничный» SIL.
-
Оптимизации SIL: Оптимизации SIL (реализованные в lib/SILOptimizer/Analysis, lib/SILOptimizer/ARC, lib/SILOptimizer/LoopTransforms и lib/SILOptimizer/Transforms) выполняют дополнительные высокоуровневые, специфичные для Swift оптимизации программы, включая (например) оптимизации автоматической подсчёта ссылок, девиртуализацию и специализацию обобщений.
-
Генерация LLVM IR: Генерация IR (реализованная в lib/IRGen) понижает SIL до LLVM IR, после чего LLVM может продолжить оптимизацию и генерировать машинный код.
The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.
Documentation for Swift 6.0.3
https://www.swift.org/documentation/swift-compiler/