2012-09-27 8 views
6

Nel WWDC 2012 Apple ha introdotto una nuova sintassi per i letterali NSNumber e i letterali Collection, in talk 405 denominato "Modern Objective-C". Ho imparato Objective-C dal libro su Objective-C 2.0 di Stephen G. Kochan."Modern Objective-C" è davvero una nuova versione, ad esempio Objective-C 2.1?

"Modern Objective-C" sarà Objective-C 2.1 o la nuova sintassi di Apple dovrebbe essere considerata un'alternativa, sintassi specifica di Apple (stenografia) per i costrutti esistenti elaborati dal compilatore?

(Ho fatto qualche ricerca online, ma ho trovato i termini "moderno" e "legacy" solo nel contesto di Objective-C RunTime. Mi piacerebbe capire cosa è esattamente nella lingua, quali sono le istruzioni del preprocessore, e quali sono le direttive del compilatore.)

risposta

10

Objective-C è definito come un'estensione delle istruzioni C. preprocessore e le direttive del compilatore sono esattamente quello che sono per la C.

non esiste una definizione "formale" della Objective- Linguaggio C (non standard). Apple pubblica un documento che, più o meno, lo spiega. Inoltre non esiste un vero "numero di versione" della lingua. A volte Apple aggiunge una nuova funzionalità e il gioco è fatto. A un certo punto, Apple ha deciso di promuovere un certo insieme di funzionalità come "Objective-C 2.0", ma ciò non significa che tutte le versioni precedenti avessero lo stesso set di funzionalità, né che tutte le versioni successive avessero lo stesso set di funzionalità. Il moniker più recente che Apple ha utilizzato è "Modern Objective-C" e si riferisce a un linguaggio che supporta tutte le funzionalità attualmente definite.

Si noti che alcune funzioni sono definite a livello di compilatore, altre sono definite a livello di libreria e altre sono un mix di entrambe. Se si utilizza una funzionalità completamente implementata a livello di compilatore (come la nuova sintassi literals), funzionerà per qualsiasi programma che si scrive e si compila con tale compilatore. Ma se si utilizza una funzionalità definita a livello di libreria o che richiede sia il supporto di compilatore che di libreria, funzionerà solo per programmi eseguiti su sistemi in cui è disponibile una libreria recente (Apple non consente il collegamento statico delle librerie di lingue) . Esempi sono cose come GC, ARC e la semantica di azzeramento allegata a weak.

Pertanto: sì, "Objective-C moderno" è abbastanza diverso dal precedente Objective-C che dovresti considerarlo una nuova versione, tuttavia no, non è associato alcun numero di versione ed è perfettamente possibile che Apple aggiungerà nuovo caratteristiche del linguaggio e ancora lo chiamano "Oggettivo moderno-C". Inoltre, esattamente quali caratteristiche fanno parte del linguaggio non dipende solo dal compilatore ma anche dal sistema di destinazione per cui si sta compilando. Pertanto, un programma "Oggettivo-C moderno" che si rivolge a iOS 4 sarà in grado di utilizzare un diverso set di funzionalità rispetto a un programma "Oggettivo-C moderno" rivolto a OsX 10.8.

+0

Grazie, bello avere una prospettiva storica. Ho iniziato lo sviluppo nell'era K & R C e ANSI C e mi aspettavo uno standard simile per Objective-C. Chiaramente questo non è il caso. –

+3

Si noti che le nuove funzionalità che richiedono il supporto al runtime vengono generalmente introdotte solo con le versioni principali di OS X o iOS; lo otterremo per primo e altri rimarranno nella prossima versione. Le caratteristiche del compilatore possono essere leggermente più fluide. Ora che lo sviluppo è focalizzato su LLVM, puoi generalmente tenere d'occhio il progetto open source LLVM per avere un'idea di ciò che verrà dopo. – bbum

+0

È un peccato che Apple non abbia adottato i numeri di versione per queste modifiche all'Objective-C. Come si chiamerà la prossima versione? Mo 'moderno Objective-C? – ThomasW

Problemi correlati