Заголовок может быть недостаточным для обзора контекста вопроса. Итак, вот описание:
Процесс компиляции SWIFT
Компилятор Swift выполняет следующие шаги для компиляции файла Swift
Согласно Apple ,
Генерация IR (реализована в lib / IRGen) понижает уровень SIL до LLVM IR, при
с какой точки LLVM может продолжать оптимизировать его и генерировать машинный код.
Запрос номер 1 - Все мы знаем, что компилятор превращает наш исходный код в язык ассемблера и ассемблер (в основном встроенный в ОС, по крайней мере компилятор Swift не имеет ассемблера в это) преобразует это в машинный код. Таким образом, согласно приведенному выше утверждению, LLVM в компиляторе заменяет LLVM IR на машинный код. Так что, если это так, то ассемблер не будет играть никакой роли в программе и исполнении Swift?
Запрос № 2 - LLVM в Swift изменяет LLVM IR непосредственно на машинный код. Это означает, что мой скомпилированный исполняемый файл имеет машинный код, а не ассемблерный код. И, насколько я понимаю, машинный код не нуждается в каком-либо конкретном соглашении о вызовах, как в языке ассемблера, и ABI - это все о соглашениях о вызовах, представлениях разметки памяти и т. Д., Посредством которых определяется связь между двумя двоичными файлами. Так откуда же взялся ABI, потому что двоичный исполняемый файл уже имеет машинный код?
Так что, я чего-то упускаю или Apple сохранила это довольно абстрактно?