Perché Objective-C non è ampiamente utilizzato oltre gli ambienti Cocoa?

24

L'obiettivo-C presenta un bell'orientamento agli oggetti, semplicità, eleganza e (come superset di C), abilità di basso livello. Potrebbe sembrare l'alternativa semplice e moderna al C ++ che molte persone cercano e cercano di trovare in Go. Ma è usato solo negli ambienti Cocoa e Post-NextSTEP, e anche in questo caso è visto più come un peso per ragioni storiche che come una scelta ottimale.

Perché non è più usato allora? Quali sono i suoi problemi?

    
posta Toni Cárdenas 17.08.2011 - 20:41
fonte

2 risposte

28

IMO, il problema con Objective-C non è tanto una carenza massiccia, quanto minori lacune (specialmente all'inizio) e mancanza di vantaggi percepiti.

L'obiettivo-C era un puro superset di C, quindi C code poteva facilmente passare a Objective-C. La mentalità per usare Objective-C, tuttavia, differiva dalla mentalità C di un lotto . La transizione da C a Objective-C è facile per il codice ma non facile per molti programmatori. Un programmatore C non può facilmente scegliere alcune nuove funzionalità di convenienza in Objective-C e ottenere una migliore produttività quasi immediatamente - ha bisogno di imparare un sacco di nuove "cose" prima che possa arrivare ovunque.

C ++ ha reso la transizione per alcuni codici un po 'più difficile, ma la transizione per la maggior parte dei programmatori è molto più semplice. I programmatori C che sono abituati a gestire ogni dettaglio del loro codice potrebbero comunque farlo in C ++ esattamente come volevano. C ++ ha anche reso facile l'uso di alcune nuove funzionalità (ad esempio, l'aggiunta di un Ctor per inizializzare automaticamente i membri della tua struct) senza realmente cambiare il tuo modo di pensare. Molti puristi di OO hanno spinto cambiamenti radicali nel modo di pensare, ma molti programmatori C sono passati al C ++ senza fare nulla del genere (almeno subito - e spesso mai, dall'aspetto delle cose).

Anche C ++ sembrava molto più familiare alla maggior parte dei programmatori C. Aggiungeva alcune nuove parole chiave, ma (soprattutto all'inizio) il codice sembrava ancora abbastanza familiare. Nonostante il suo status di "superset puro", la maggior parte del codice Objective-C sembra abbastanza estraneo alla maggior parte dei programmatori C. Un sacco di C ++ è anche abbastanza facile da spiegare e capire in termini di come funzionano le cose in C. Passando a Objective-C ci sono molti più posti in cui tutto quello che puoi dire è "fidati di me e dimentica tutto ciò che pensi di sapere. "

Molte delle decisioni di progettazione in Objective-C lo hanno reso (un po ') più lento del C ++, specialmente su macchine relativamente vecchie con processori lenti, memoria limitata, ecc. Giustamente o erroneamente, è stato visto anche come una singola azienda prodotto, dove C ++ era liberamente disponibile per chiunque e tutti da implementare.

Tutti questi elementi hanno portato il C ++ ad essere adottato abbastanza presto da raggiungere la "massa critica" abbastanza rapidamente, quindi (tra le altre cose) è diventato la scelta ovvia per molti progetti solo perché era già ampiamente utilizzato, quantità nota.

L'obiettivo-C non ha mai raggiunto quel punto. In effetti, era già sulla buona strada per svanire nell'oscurità, quando Apple la rianimò quasi forzandola su chiunque volesse sviluppare per i loro sistemi. La quota di mercato di Apple non è abbastanza grande da consentirgli di darle realmente una massa critica, ma solo una nicchia più ampia. È una scelta "predefinita" solo dove / perché Apple lo rende così.

Aggiungo anche che, almeno a mio parere, il modello a oggetti Smalltalk di Objective-C significa che in effetti è molto più un concorrente diretto a Java del C ++. Sì, ha ancora le basi C, e sì puoi ancora scrivere codice di basso livello senza usare un linguaggio separato - ma C pura e Objective-C reale sono abbastanza differenti da essere meno come una singola lingua rispetto a due lingue completamente diverse che capita ad entrambi di essere gestiti da un singolo compilatore (anche se è utile che i due possano parlare tra di loro senza qualcosa come JNI per unirsi a loro).

    
risposta data 18.08.2011 - 10:30
fonte
11

Bene, in sostanza, Apple è la forza trainante dietro Objective-C da qualche tempo:

  • Mentre l'ultima versione è praticamente abbandonata, Objective-C 2.0 sta iniziando a diventare sempre più legata ad alcune delle classi / protocolli fondamentali della fondazione, il che significa che esiste un collegamento intrinseco tra le funzionalità del linguaggio e il framework, NSFastEnumeration mi viene in mente, che è necessario per gli oggetti correttamente rispondere a per in loop. Ciò significa che esiste un legame crescente tra la lingua e la piattaforma.
  • Non c'è praticamente nessuna vera alternativa a Cocoa. E Cocoa, a sua volta, sta iniziando a dipendere da sempre più caratteristiche OSX. Mentre tecnicamente, puoi avere un'implementazione Objective-C in esecuzione su qualsiasi sistema operativo con qualsiasi framework core, non ci sono molte cose recenti là fuori per qualsiasi altra piattaforma.

Come è ora, Apple ha il pieno controllo su Objective-C e guida il linguaggio in base alle sue esigenze, mentre non c'è nessuna organizzazione su questo pianeta interessata a eseguire Objective-C su un dispositivo non Apple, che sarebbe sufficientemente grande per fornire una libreria standard e un kit di strumenti con cui iniziare, che potrebbe anche lontanamente competere con gli ecosistemi presentati da .NET / Mono, C ++ o Java.

    
risposta data 17.08.2011 - 21:44
fonte

Leggi altre domande sui tag