Swift se puede compilar con el LLVM que genera el código Objective-C y luego Objective-C se compilará en código máquina o ¿cómo funciona?

Actualmente Apple está utilizando el compilador LLVM para compilar swift y aim-c. En el pasado, usaban el compilador GDC.

En cuanto a llvm, puede buscar en Google su arquitectura interna: en realidad es un compilador modular con módulos separados como frontend (para analizar el lenguaje en el árbol de sintaxis abstracta) y un compilador optimizador que produce código IL y backend para diferentes arquitecturas (como arm, arm7, arm7s, arm64 , x64, etc.). Algunas herramientas como los perfiladores o las refactorizaciones basadas en IDE pueden usar fácilmente este material modular sin necesidad de implementar un análisis de idioma propio. Entonces, tanto para swift como para objetivos-c, apple usa las mismas herramientas.

En cuanto a la interoperabilidad entre idiomas, se basa principalmente en el tiempo de ejecución común conocido como tiempo de ejecución Objective-C. Es por eso que las clases y los objetos de ambos idiomas pueden compartir memoria e interoperar fácilmente. Entonces, si necesita más información, simplemente búsquelo en Google.

La interfaz del compilador swift compila el código Swift en código IR. LLVM luego optimiza el código IR, lo vincula con las bibliotecas y eventualmente lo traduce a código binario de la máquina. No hay ningún Objetivo C involucrado en nada de esto (excepto si las bibliotecas contienen el código del Objetivo C, pero las bibliotecas pueden contener prácticamente cualquier código compilado de cualquier lenguaje).

La interfaz de Clang compila el código C / C ++ / Objective C en código IR. Entonces LLVM se hace cargo exactamente como se indicó anteriormente.

Realmente no “combina” Swift y Objective C con encabezados vinculantes. Simplemente informan a Swift de que existe un código (una biblioteca o un archivo de objeto) compilado a partir del Objetivo C o hacen que Objective C sepa que existe un código (una biblioteca o un archivo de objeto) compilado en Swift.
El código Swift se traduce independientemente al código IR y el código del Objetivo C también se traduce independientemente al código IR. Solo cuando los archivos de objeto y los archivos de la biblioteca están vinculados, las dos bases de código se encuentran. Esto es exactamente lo que significa “vinculación”.

Swift compila al código de máquina, y Objective-C compila al código de máquina. Pueden o no pasar por LLVM, pero esto es irrelevante para esta pregunta.

Consulte Compilar y vincular el código Swift plus Objective C desde la línea de comandos de OS X para ver el proceso realizado manualmente. Con los compiladores respectivos, produce los archivos Object y luego los vincula (los archivos objeto son código de máquina compilado que contiene metadatos como nombres de símbolos que el enlazador puede utilizar para producir el ejecutable final de una colección de archivos objeto). También habrá un código de tiempo de ejecución (las bibliotecas que importa) que manejará la conversión cuando los valores “crucen la frontera”.