Esta es una pregunta interesante y difícil de responder sin reservas: sin importar cuál sea su opinión personal sobre el idioma, fue claramente lo suficientemente bueno como para enviar Mac OS X y su software en gran parte, así como el iPhone, iPad y Gran parte del contenido de la App Store.
El aumento meteórico en popularidad que ha disfrutado ha traído consigo muchas voces con experiencia con otras tecnologías e idiomas. Esto ha permitido una maravillosa polinización cruzada en la comunidad de desarrollo, pero también ha resaltado algunos de los defectos del lenguaje.
¿Objective-C está desactualizado?
Objective-C es en esencia un hijo de los años 80 (algo así como yo). Para su época, el mensaje inspirado en Smalltalk que pasaba y se unía tarde, por no mencionar el dinamismo salvaje y lanudo posible con el uso inteligente del tiempo de ejecución, era, si no novedoso, un contrapunto fascinante a lo que de otro modo sería conveniente en un lenguaje estático como C (y mucho menos su “hermano” C ++ con su enfoque en la unión temprana y genéricos en tiempo de compilación).
Avancemos rápidamente hasta 2000 y el lanzamiento de Mac OS X, basado en el desarrollo de NeXT en la década de 1990, y Objective-C de repente tiene una audiencia incipiente de entusiastas que siguieron a NeXT con interés o que estaban entusiasmados con este próximo capítulo en la vida de Mac. Para estos, el contraste con C ++ a veces puede parecer liberador: Objective-C puede parecer un poco extraño con sus corchetes y @s esparcidos, pero olía bien y te trajo cacao, y te mostró cómo usar su tiempo de ejecución para terribles , terribles propósitos.
En 2013, sin embargo, la imagen es un poco diferente. Haskell nos ha mostrado mucho sobre lo que puede saber sobre un programa sin ejecutarlo. El óxido también. Erlang conoce mejor el paralelismo, C # parece estar desarrollando nuevas ideas todo el tiempo e incluso C ++ tiene inferencias de tipos. Mientras tanto, Objective-C ha agregado azúcar para enumerar, construir y colocar un recolector de basura, y aprovechó su compilador para obtener ARC, y ganó bloques (cierres) … pero con advertencias: todos los demás hacen una mejor iteración, C frustra a cualquier recolector de basura debido a su sistema de tipo débil y rango libre, actitudes de memoria de todo vale, y ARC, aunque ciertamente es una herramienta excelente, aún admite ciclos de retención frustrantes, ¡especialmente con bloques!
El sistema de tipos no es lo suficientemente expresivo como para describir inequívocamente situaciones comunes como colecciones genéricas pero bien escritas. Los bloques son difíciles de usar de manera segura debido a la oportunidad de retener los ciclos, y los detalles de su vida útil cuando se crean en la pila pueden dificultar saber en qué tipo de costos incurrirán. El recuento de referencias no puede compactar objetos en la memoria, por lo que la localidad de referencia debe ser cuidadosamente organizada por el programador. Y el dinamismo tiene un precio: puede ser difícil detectar ciertos errores en tiempo de compilación cuando pasan a través de un contenedor genérico, y la falta de información de tipo específico significa que los métodos no se pueden alinear, y en su lugar siempre deben pasar. objc_msgEnviar.
¿Objective-C está desactualizado? Sí.
¿Objective-C es un desastre?
Como se diseñó originalmente, Objective-C era un conjunto estrecho de construcciones de tiempo de ejecución sentado detrás de un preprocesador que convirtió los corchetes en objc_msgEnviar llamadas y @s en estructuras y así sucesivamente.
Hoy, el tiempo de ejecución abarca características como propiedades, conteo de referencias, sincronización, manejo de excepciones, punteros etiquetados y objetos asociados.
En general, se han agregado cuidadosamente, teniendo cuidado de exponer el poder del sistema detrás de una interfaz relativamente limpia. Pero el hecho es que las cadenas “” “y otros literales, por no mencionar ARC, para (in), y probablemente más entremezclan los detalles del lenguaje con lo que tradicionalmente se consideraban detalles de los marcos.
Si bien esta es una práctica bastante estándar en todo tipo de idiomas, como Ruby, donde el lenguaje y los marcos son casi indistinguibles, es un cambio de un Objective-C más modular y claramente separado que solía existir.
Y luego tienes C. Punteros indomables, mecanografía débil y sintaxis fea y desagradable (algunos de los cuales han infectado Objective-C, como con la sintaxis de bloque).
¿Objective-C es un desastre? Bueno, C es, entonces sí. ¿Está solo? Más de lo que solía ser, al menos.
Pero eso está bien?
A pesar de ser obsoleto y probablemente un desastre, Objective-C tiene éxito no porque los desarrolladores no tengan alternativas, sino porque ocupa un nicho ecológico importante y fuertemente defendido. La interoperabilidad con casi cualquier cosa a través de C y C ++, y el grupo irracionalmente inteligente de personas responsables de cosas como ARC, sin mencionar los esfuerzos de Apple y los desarrolladores de marcos de terceros que se basan en esta base, es lo que ha hecho que este lenguaje humilde y peculiar no solo sobrevivir, pero prosperar.
Está bien ser un desastre anticuado si tienes el nicho ecológico, la suerte y, lo más importante, el trabajo duro y la inteligencia que necesitas para pasar gradualmente de un desastre obsoleto a un desastre moderno a un lenguaje moderno y limpio. Objective-C ha recorrido un largo camino, y dudo que lo veamos desaparecer pronto. El Objetivo-C de 2018, si hay uno, probablemente será un lenguaje radicalmente diferente.