2012-01-09 16 views
7

Poiché Objective-C è fondamentalmente un'estensione di C, il codice viene convertito in codice C puro prima di essere compilato in codice nativo?Ogni programma Objective C viene convertito in codice C?

In tal caso, la conversione avviene su RAM o un file temporaneo contenente il codice C su disco viene creato dal compilatore che viene ulteriormente compilato dal compilatore C al codice nativo?

+0

possibile duplicato di [L'Objective-C viene compilato su codice nativo o byte-code?] (Http://stackoverflow.com/questions/172614/does-objective-c-compile-to-native-code-or- byte-code) – Mark

+1

No. perché so che non esiste una VM con codice JIT e codice OBj compilato in bytecode. Si prega di leggere il mio commento in risposta alla risposta di Larsmans. –

+0

Ma le risposte devono essere le stesse che devono dirvi come è compilato il codice – Mark

risposta

8

Questa sintassi Objective-C è un'estensione della sintassi C non significa che non possa avere il proprio compilatore. C++ è allo stesso modo - la sua sintassi è compatibile con C (per la maggior parte, comunque) ma ha il suo set di strumenti. I compilatori per C, C++ e Objective-C possono riutilizzare parti l'uno dell'altro per la pre-elaborazione, l'analisi sintattica e la generazione di codice, ma non è necessario eseguirli in modo sequenziale (ad esempio Objective-C ==> C ==> Codice di destinazione). I compilatori non passano più attraverso il linguaggio assembly leggibile da umani (anche questo è avvenuto da molto tempo).

4

No, Objective-C viene compilato direttamente nell'assembler (presupponendo GCC).

+0

ma dovrebbe esserci qualche ragione per cui le classi nell'Objective C sono implementate come strutture C. –

+0

@AmoghTalpallikar: cosa intendi con questo? –

+0

Se si guarda alla documentazione di Apple, gli oggetti di Classi nell'Objective C sono fondamentalmente indicatori di alcune C Structures. per esempio, id è in realtà typedef per objc_obj *. e quella struttura ha un puntatore isa che indica a quale classe appartiene e altre informazioni su di esso. Quindi, se tutto si riduce al puro codice C, viene convertito come un codice C intermedio in memoria se non su disco? –