Quão bem é o Objective-C ++ suportado?

Eu tenho aprendido Objective-C e Cocoa trabalhando no livro da Hillegass e me ocorre que eu poderia estar melhor usando o Objective-C ++. Objective-C parece ser a escolha clara para o desenvolvimento de interfaces de usuário, mas eu tenho um fundo muito forte em C ++ e gostaria de desenvolver back-ends de aplicativos em C ++ e usar o Objective-C ++ para fazer a integração da interface do usuário. Mas eu me pergunto se a Apple continuará desenvolvendo o Objective-C ++ ou se será um beco sem saída.

Alguém aí está usando o Objective-C ++?

Disclaimer: Eu não trabalho ou falo para a Apple, então esta é a minha opinião:

Eu não posso falar pelas principais lojas de desenvolvimento, mas no meu pequeno grupo, usamos o Objective-C ++ para integrar bibliotecas C ++, e como você propõe para escrever backends em C ++. Como o @alxp menciona, coisas como manipulação de exceções no limite da linguagem são dolorosas, mas com um pouco de planejamento, a maioria dessas dores pode ser evitada. Para desenvolvedores experientes em C ++, os ganhos podem valer a pena.

Em termos de suporte, acho que você pode assumir que o suporte em seu estado atual não desaparecerá tão cedo. É parte da base de código do GCC e o conjunto de ferramentas Clang (a próxima toolchain de compilation da Apple) suporta totalmente o Objective-C ++. Por outro lado, não há qualquer garantia oficial de que a Apple continue a desenvolver a integração – consertar algumas das verrugas, por exemplo.

Para projetos atuais, eu diria que se usar o Objective-C ++ for benéfico, é seguro confiar no suporte existente e você deve usá-lo.

As únicas vezes que usei o ObjC ++ foi portar bibliotecas para torná-las acessíveis a partir do meu código ObjC. Os confrontos entre como o ObjC ++ e o ObjC lidam com coisas como exceções e criação e destruição de classs acabaram deixando muita dor de cabeça para manipular as duas linguagens em um projeto.

Eu não acho que o suporte irá embora assim como aconteceu com o Cocoa / Java, já que é uma parte bastante sólida do GCC, e o fato de que o Objective-C ++ compila para o C ++, da mesma forma que o Objective-C pode compilar direto C, mas eu ainda não acho um ambiente muito agradável para construir software em comparação com o Objective-C e ser capaz de usar confortavelmente as estruturas fornecidas pelo OS X.

É provável que o Objective-C ++ permaneça suportado, desde que o Objective-C seja. Obj-C ++ é uma meta básica para o clang , que deve replace o gcc como o compilador preferido da Apple. É provável que o uso aumente à medida que as aplicações de Carbono são movidas para os front ends do Cocoa.

É claro que a palavra “provável” aparece duas vezes acima porque a Apple é tão excitantemente imprevisível. 🙂

Eu suspeito que a Apple continuará a suportar o Objective C ++ por um tempo, já que não vejo nenhum esforço recorrente significativo exigido pela Apple para manter o Objective C ++ como atualizações da Apple Cocoa e Objective C ++.

Outro dia, fiquei surpreso quando tentei refatorar algum código Objective-C que estava dentro de um arquivo Objective-C ++ usando o suporte de refatoração do Xcode. Mesmo que os itens do menu estejam ativados, eu obtive o código “Não posso refatorar o Objective-C ++. O Xcode só pode refatorar código C e Objective-C”. mensagem de erro. Assim, enquanto a compilation do Objective-C ++ continuará funcionando indefinidamente, eu suspeito que o Objective-C ++ será um cidadão de segunda class dentro do Xcode.

Eu tirei de todo o meu código. Nenhum arquivo.

Mas você precisa de arquivos .cpp para conversar com arquivos .m. A solução é um arquivo .c / .h que mantém a barreira hematoencefálica intacta.

C ++ com objective-C geralmente é apenas muita bagagem.

Objetivo-C é realmente apenas um monte de código C que emula objects na linguagem C, e ainda usa o compilador C, incluindo os arquivos de header Objective-C. Usar Objective-C ++ usa o compilador C ++ e include os headers Objective-C como código C, pois o C ++ executará o código C. Objective-C ++ é essencialmente apenas C, C ++ e Objective-C (que é realmente apenas C)