Quanto è supportato Objective-C ++?

Ho imparato Objective-C e Cocoa mentre mi occupavo del libro Hillegass e mi viene in mente che potrei stare meglio usando Objective-C ++. Objective-C sembra la scelta chiara per lo sviluppo di interfacce utente, ma ho uno sfondo C ++ molto forte e mi piacerebbe sviluppare i back-end delle applicazioni in C ++ e usare Objective-C ++ per fare l’integrazione dell’interfaccia utente. Ma mi chiedo se Apple continuerà a sviluppare Objective-C ++ o diventerà un vicolo cieco.

C’è qualcuno là fuori che usa Objective-C ++?

Disclaimer: Non lavoro o parlo per Apple, quindi questa è la mia opinione:

Non posso parlare per i principali negozi di sviluppo, ma nel mio piccolo gruppo, abbiamo usato Objective-C ++ sia per l’integrazione di librerie C ++, sia per la scrittura di backend in C ++. Come menziona @alxp, le cose come la gestione delle eccezioni attraverso il confine del linguaggio sono dolorose, ma con un po ‘di pianificazione, la maggior parte di questi dolori può essere evitata. Per gli sviluppatori C ++ esperti, i guadagni possono valere la pena.

In termini di supporto, penso che tu possa presumere che il supporto nel suo stato attuale non andrà via presto. Fa parte della base di codici GCC e la toolchain Clang (il prossimo compilatore di strumenti di Apple) supporta pienamente Objective-C ++. D’altra parte, non esiste alcuna garanzia ufficiale che Apple continui a sviluppare l’integrazione di alcune delle verruche, ad esempio.

Per i progetti attuali, direi che se si utilizza Objective-C ++ offre dei vantaggi, è ansible fare affidamento sul supporto esistente e si dovrebbe usarlo.

Le uniche volte che ho usato ObjC ++ sono state le librerie di porte per renderle accessibili dal mio codice ObjC. Gli scontri tra il modo in cui ObjC ++ e ObjC gestiscono cose come le eccezioni e la creazione e la distruzione delle classi hanno reso troppo mal di testa il gioco delle due lingue in un unico progetto.

Non credo che il supporto andrà via presto come è successo con Cocoa / Java dato che è abbastanza solidamente parte di GCC, e il fatto che Objective-C ++ si compatta fino al C ++ dritto nello stesso modo in cui Objective-C può compilare fino a dritto C, ma non trovo ancora un ambiente molto piacevole per creare software rispetto a Objective-C ed essere in grado di utilizzare pienamente i framework forniti da OS X.

È probabile che Objective-C ++ resti supportato finché Objective-C lo è. Obj-C ++ è un objective di base per clang , che dovrebbe finalmente sostituire gcc come compilatore preferito di Apple. È probabile che l’utilizzo aumenti mentre le applicazioni del carbonio vengono spostate sui front-end del cocoa.

Naturalmente, la parola “probabile” appare due volte sopra perché Apple è così eccitantemente imprevedibile. 🙂

Sospetto che Apple continuerà a supportare Objective C ++ per un po ‘, poiché non vedo alcun significativo sforzo ricorrente richiesto da Apple per mantenere Objective C ++ mentre Apple aggiorna Cocoa e Objective C ++.

L’altro giorno sono rimasto sorpreso quando ho tentato di ridefinire qualche codice Objective-C che si trovava all’interno di un file Objective-C ++ usando il supporto del refactoring di Xcode. Anche se le voci di menu sono abilitate, ho ottenuto il codice “Imansible rifattorizzare Objective-C ++. Xcode può solo refactificare C e il codice Objective-C.” messaggio di errore. Quindi mentre la compilazione di Objective-C ++ continuerà a funzionare indefinitamente, sospetto che Objective-C ++ sarà un cittadino di seconda class all’interno di Xcode.

L’ho preso da tutto il mio codice. Nessun file .mm.

Ma hai bisogno di file .cpp per parlare con i file .m. La soluzione è un file .c / .h che mantiene intatta la barriera emato-encefalica.

Il C ++ con l’objective-C è di solito solo troppo bagaglio.

Objective-C è in realtà solo un mucchio di codice C che emula oggetti nel linguaggio C, e utilizza ancora il compilatore C, inclusi i file di intestazione Objective-C. L’utilizzo di Objective-C ++ utilizza il compilatore C ++ e include le intestazioni Objective-C come codice C, poiché C ++ eseguirà il codice C. Objective-C ++ è essenzialmente solo C, C ++ e Objective-C (che è davvero solo C)