Por que o Objective-C não é amplamente usado além dos ambientes de cacau?

24

O Objective-C apresenta uma boa orientação, simplicidade, elegância e (como um superconjunto de C), capacidade de baixo nível. Pode parecer a alternativa simples e moderna ao C ++ que muitas pessoas procuram e tentam encontrar no Go. Mas é usado apenas nos ambientes de cacau e pós-NextSTEP e, mesmo nesse caso, é visto mais como um fardo por razões históricas do que como uma escolha ideal.

Por que não é mais amplamente usado então? Quais são os seus problemas?

Toni Cárdenas
fonte
5
"razões históricas" significam "muitas bibliotecas"
@artec você não é forçado a fazer isso. Veja o MonoTouch, por exemplo, é C #. Ah, e então você tem a regra da Apple sobre Objective-C, C e C ++, certo? Eles já abandonaram isso.
rightfold 28/10/11

Respostas:

28

Na IMO, o problema com o Objective-C não é tanto uma falha maciça, mas uma falha menor (especialmente no início) e falta de vantagens percebidas.

O Objective-C era um superconjunto puro de C; portanto, o código C poderia fazer a transição para o Objective-C facilmente. A mentalidade de usar Objective-C, no entanto, era diferente da C mentalidade um monte . A transição de C para Objective-C é fácil para o código, mas não é fácil para muitos programadores. O programador de CA não pode facilmente escolher apenas alguns novos recursos de conveniência no Objective-C e obter melhor produtividade quase imediatamente - ele precisa aprender muitas "coisas" novas antes de poder chegar a qualquer lugar.

O C ++ tornou a transição para algum código um pouco mais difícil, mas a transição para a maioria dos programadores muito mais fácil. Os programadores de C que estão acostumados a lidar com todos os detalhes de seu código ainda podem fazê-lo em C ++ exatamente na medida em que desejam. O C ++ também facilitou o uso de alguns novos recursos (por exemplo, adicionar um ctor para inicializar automaticamente membros de sua estrutura) sem realmente mudar sua maneira de pensar. Um monte de puristas OO empurrou mudanças radicais no pensamento, mas muitos programadores C comutada para C ++ sem fazer qualquer coisa do tipo (pelo menos de imediato - e muitas vezes nunca, a partir da aparência das coisas).

O C ++ também parecia muito mais familiar para a maioria dos programadores em C. Ele adicionou algumas novas palavras-chave, mas (especialmente no início) o código ainda parecia bastante familiar. Apesar de seu status de "superconjunto puro", a maioria dos códigos de Objective-C parece bastante estranha para a maioria dos programadores em C. Um monte de C ++ também é bastante fácil de explicar e entender em termos de como as coisas funcionam no C. Mudar para o Objective-C tem muito mais lugares que tudo o que você pode dizer é "apenas confie em mim e esqueça tudo o que acha que sabe". "

Muitas das decisões de design no Objective-C também o tornaram (um pouco) mais lento que o C ++, especialmente em máquinas relativamente antigas com processadores lentos, memória limitada etc. Certo ou errado, também era visto em grande parte como um produto de empresa única, onde O C ++ estava disponível gratuitamente para qualquer um e todos implementarem.

Todos eles levaram o C ++ a ser adotado rapidamente o suficiente para atingir "massa crítica" com bastante rapidez; portanto (entre outras coisas), tornou-se a escolha óbvia para muitos projetos, apenas porque já era um amplamente utilizado e conhecido. quantidade.

O objetivo C nunca chegou a esse ponto. Na verdade, estava a caminho de desaparecer na obscuridade quando a Apple a reviveu quase forçando-a a quem quisesse desenvolver para seus sistemas. A participação de mercado da Apple não é grande o suficiente para que isso realmente lhe dê massa crítica - apenas um nicho maior. É uma opção "padrão" apenas onde / porque a Apple faz isso.

Eu também acrescentaria que, pelo menos na minha opinião, o modelo de objeto semelhante ao Smalltalk da Objective-C significa que, na verdade, é muito mais um concorrente direto do Java do que o C ++. Sim, ele ainda possui os fundamentos de C, e sim, você ainda pode escrever código de baixo nível sem usar um idioma separado - mas C puro e Objective-C real são diferentes o suficiente para parecer menos um idioma do que dois idiomas completamente diferentes. Os dois são manipulados por um único compilador (embora seja útil que os dois possam conversar um com o outro sem que JNI se junte a eles).

Jerry Coffin
fonte
Uma excelente revisão histórica. Eu primeiro codifiquei o Objective-C em máquinas NextSTEP de caixa branca nos anos 90 e, já tendo ensinado C ++ na universidade, odiava a bizarra sintaxe do Objective-C. Como tal, eu posso apreciar muitas das coisas que você diz aqui.
Mark Booth
obrigado, essa é obviamente a resposta que eu estava procurando. ritchie fez C para tornar possível o trabalho em equipe; "C é peculiar e tem um enorme sucesso"; esta citação significa que você precisa criar uma linguagem simples e plana para que muitas pessoas possam entendê-la, e isso não significa que deve ser uma linguagem "impressionante". Ninguém quer reclamar de objc, porque ninguém gosta. "existem idiomas que as pessoas reclamam e que ninguém usa" bjarne stroustup. Pelo menos o Windows foi capaz de fazer a indústria de computadores crescer, mesmo com um cluster corporativo, e espero que a Apple falhe porque não se importa com os desenvolvedores.
Jokoon # 0313
Desculpe pelo discurso retórico, mas mesmo sendo um desenvolvedor significa que você precisa aprender coisas novas, isso não significa que você precisa esquecer tudo o que já sabe. Ouvi dizer que a funcionalidade messenger do objc é feita com algum código ASM otimizado. Que confusão, como você pode dizer aos desenvolvedores para entender isso? E quanto aos drivers e kernels devs? Os Macs são apenas Cadillacs que você usa para dirigir, são apenas objetos caros sofisticados que são vendidos, para que você possa apenas verificar e-mail, assistir a um DVD. Deseja adicionar algum software a essa coisa? boa sorte amigo. esqueça todos os soft existentes e faça o caminho da maçã TM.
Jokoon #
+1, excelente explicação!
Chan
11

Bem, basicamente, a Apple é a força motriz por trás do Objective-C desde há algum tempo:

  • Embora a última versão seja praticamente abandonada, o Objective-C 2.0 está realmente começando a ficar cada vez mais vinculado a algumas das principais classes / protocolos básicos, o que significa que há um vínculo inerente entre os recursos de linguagem e a estrutura, NSFastEnumeration surgindo em minha mente , necessário para que os objetos respondam adequadamente aos loops for. Isso significa que há um vínculo crescente entre o idioma e a plataforma.
  • Não há virtualmente nenhuma alternativa real ao cacau. E o cacau, por sua vez, está começando a depender de mais e mais recursos OSX. Embora tecnicamente, você possa ter uma implementação do Objective-C em execução em qualquer sistema operacional com qualquer estrutura principal, não há muito material recente disponível para qualquer outra plataforma.

Como agora, a Apple tem controle total sobre o Objective-C e dirige o idioma de acordo com suas necessidades, embora não exista nenhuma organização neste planeta interessada em executar o Objective-C em um dispositivo que não seja da Apple, que seria suficientemente grande para fornecer uma biblioteca e kit de ferramentas padrão para começar, que poderiam até rivalizar remotamente com os ecossistemas apresentados pelo .NET / Mono, C ++ ou Java.

back2dos
fonte
3
Existe o GNUStep. Eles tentam acompanhar a Apple, embora eu não tenha verificado há algum tempo o quão bem eles estão.
Per Johansson
11
E há Cocotron também.
perfil completo de Ysdx
11
No ponto desta resposta escrita, não havia realmente nada possível para executar o Objective-C 2.0 na plataforma não Apple. De qualquer forma, muitos esforços foram feitos depois disso, e agora podemos esperar executar o Objective-C 2.0 no FreeBSD usando o GNUstep sem problemas.
Eonil