2012-09-27 8 views
6

En WWDC 2012, Apple introdujo una nueva sintaxis para literales NSNumber y literales de colección, en la conversación 405 llamada "Modern Objective-C". Aprendí Objective-C del libro sobre Objective-C 2.0 por Stephen G. Kochan.¿Es realmente "Modern Objective-C" una nueva versión, es decir, Objective-C 2.1?

¿El "Objective-C moderno" será Objective-C 2.1 o debería considerarse la nueva sintaxis de Apple como una alternativa, sintaxis específica de Apple (abreviatura) para las construcciones existentes que procesa el compilador?

(Hice algunas investigaciones en línea, pero encontré los términos "moderno" y "heredado" solo en el contexto del Objective-C RunTime. Me gustaría entender qué es exactamente lo que hay en el lenguaje, cuáles son las instrucciones del preprocesador, y cuáles son las directivas del compilador.)

Respuesta

10

de Objective-C se define como una extensión de las instrucciones del preprocesador C y directivas del compilador son exactamente lo que son para C.

no existe una definición "formal" de la Objetivo- Lenguaje C (sin estándar). Apple publica un documento que, más o menos, lo explica. Tampoco hay un verdadero "número de versión" del idioma. Apple a veces agrega una nueva característica y eso es todo. En cierto momento, Apple decidió promocionar un determinado conjunto de características como "Objective-C 2.0", pero esto no significa que todas las versiones anteriores tenían el mismo conjunto de características ni significa que todas las versiones posteriores tendrán el mismo conjunto de características. El apodo más reciente que Apple ha estado usando es "Objective-C moderno" y se refiere a un lenguaje que admite todas las características definidas actualmente.

Tenga en cuenta que algunas características se definen a nivel de compilador, otras se definen a nivel de biblioteca y otras son una combinación de ambas. Si usa una característica que está completamente implementada en el nivel del compilador (como la nueva sintaxis de los literales), funcionará para cualquier programa que escriba y compile con ese compilador. Pero si usa una característica que está definida a nivel de biblioteca o que requiere compatibilidad con el compilador y la biblioteca, solo funcionará para los programas que se ejecutan en sistemas donde hay disponible una biblioteca reciente (Apple no permite vincular estáticamente las bibliotecas de idiomas). . Los ejemplos son cosas como GC, ARC y la semántica de puesta a cero adjunta al weak.

Por lo tanto: sí, "Objective-C moderno" es lo suficientemente diferente de Objective-C anterior que debería considerar una nueva versión, sin embargo no, no hay un número de versión adjunto y es perfectamente posible que Apple agregará características del lenguaje y todavía lo llaman "Objective-C moderno". Además, exactamente qué características son parte del lenguaje no solo depende del compilador sino también del sistema de destino para el que se está compilando. Por lo tanto, un programa "moderno Objective-C" dirigido a iOS 4 podrá usar un conjunto diferente de características que un programa "moderno Objective-C" dirigido a OsX 10.8.

+0

Gracias, es bueno tener alguna perspectiva histórica. Comencé el desarrollo en la era K & R C y ANSI C, y esperaba un estándar similar para Objective-C. Claramente este no es el caso. –

+3

Tenga en cuenta que las nuevas características que requieren soporte en tiempo de ejecución generalmente solo se introducen con las principales versiones de OS X o iOS; uno lo obtendrá primero y otro se recuperará en el siguiente lanzamiento. Las funciones de compilación solo pueden ser un poco más fluidas. Ahora que el desarrollo se centra en LLVM, generalmente puede vigilar el proyecto de código abierto de LLVM para tener una idea de lo que viene a continuación. – bbum

+0

Es lamentable que Apple no haya adoptado los números de versión para estos cambios en Objective-C. ¿Cómo se llamará la próxima versión? Mo 'moderno Objective-C? – ThomasW

Cuestiones relacionadas