Pelo que li lá: Por que Objective-C não é muito popular fora da comunidade Apple?
Objective-C é um superconjunto de C (muito mais estritamente do que C ++, na verdade), portanto, o problema de compatibilidade com versões anteriores não surge. Tudo o que você pode fazer em C, você pode fazer em Objective-C.
Ser um superconjunto é binário, como estar grávida. Obj-C é um superconjunto de C, e C ++ não é.
O que eles querem dizer com superconjunto? De que maneira o objetivo-C seria mais próximo // compatível com as versões anteriores de C? De que forma o objetivo-C segue a filosofia C mais de perto do que o C ++?
Qualquer programa C pode ser compilado sem modificação por um compilador objetivo-C (100% de compatibilidade)?
Esta é mais uma questão sobre o design e compatibilidade da linguagem de programação do que uma guerra sobre qual é a melhor.
fonte
Eles significam superconjunto estrito. Qualquer programa C válido será compilado com um compilador Objective-C. Alguns programas C válidos não compilarão com um compilador C ++.
Aqui está um exemplo simples:
Compila em C e Objective-C, mas não em C ++. Existem, é claro, outros exemplos também.
All - Objective-C é um superconjunto estrito de C.
Sim.
fonte
Desde o início, C ++ foi projetado como um "C melhor", corrigindo omissões de design, tanto reais quanto percebidas, à medida que os autores de C ++ examinavam a linguagem. O resultado dessa decisão de design foi que
X
ser um programa C válido não garantia queX
seria compilado, muito menos executado, quando processado pelo compilador C ++. As mudanças afetaram construções básicas como literais de string (eles se tornaramconst char*
), atribuição devoid
ponteiros, conversões entreenum
s e tipos integrais, semântica de operadores de atribuição compostos e assim por diante.Além disso, quando o C99 apareceu, os recursos que o integraram ao padrão C atualizado foram deixados de fora do padrão C ++ atualizado. Novamente, recursos muito importantes da linguagem foram deixados de fora - mais notavelmente, inicializadores designados e arrays de tamanho variável.
Em contraste, Objective C foi posicionado como um superconjunto de C, exigindo que todos os programas C válidos sejam compilados com um compilador Objective C.
fonte
int nil = 0; nil++;
não compila como Objective-C. Qual é o problema aí, é óbvio que Objective-C disponibiliza cabeçalhos que, uma vez incluídos, podem quebrar seu código exatamente como os cabeçalhos C podem? E, portanto, o autor desse trecho não deveria tê-los incluído."Objective-C é um superconjunto de C" significa que todo programa C válido é um programa Objective-C válido (com o mesmo significado).
Às vezes é dito, embora não por especialistas em C ++, que C ++ é um superconjunto de C. Isso não é preciso, e é por isso que sua citação está dando tanta importância à comparação entre os dois.
fonte
Objective C é um conjunto de extensões compatíveis com versões anteriores para C. Isso é possível porque os recursos do Objective C são delimitados de duas maneiras muito simples:
@
. Este caractere não é usado atualmente na linguagem C.[obj method:argument]
,. Em C, colchetes são usados de uma maneira muito específica para subscrito de array e, portanto, esta é a sintaxe C inválida. As extensões baseadas em sintaxe inválida não alteram o significado de nada que seja válido na linguagem do host.Tão fácil de ver que nenhum programa que usa extensões Objective C pode ser um programa ISO C estritamente em conformidade, não importa o quão simples seja. Além disso, todo programa ISO C pode ser declarado, por definição, um programa Objective C válido. Objective C pode facilmente seguir desenvolvimentos como C99 e C11.
Por outro lado, C ++ não é simplesmente extensões para C; é uma linguagem diferente que muda o significado de algumas das sintaxes de C. C ++ e C são mantidos separadamente e, portanto, seu relacionamento muda com o tempo. Por exemplo, C adquiriu novos recursos que estão completamente ausentes em C ++ e muito provavelmente não irão para C ++, como os arrays de comprimento variável C99. C ++ não pode pegar facilmente novos recursos C.
Se você escreve um programa C portátil, ele deve ser ao mesmo tempo um programa Objective C. Mas será necessário cuidado adicional para que também seja um programa C ++ com o mesmo significado. (Essa prática não é inédita e o dialeto que ela requer é informalmente conhecido como "C limpo").
Um exemplo trivial de um programa C que falha quando tratado como C ++ é qualquer programa C que usa uma palavra-chave C ++ como um identificador, como
class
ouvirtual
. Objective C não introduz nenhuma palavra-chave reservada. Possui novas palavras-chave que são introduzidas pelo@
personagem, como@interface
.fonte