IMO, problem z Objective-C to nie tyle poważne niedociągnięcia, co drobne niedociągnięcia (szczególnie wczesne) i brak dostrzeganych zalet.
Cel C był czystym nadzbiorem C, więc kod C mógł łatwo przejść do Celu C. Sposób myślenia, aby korzystać Objective-C, jednak różni się od C sposobu myślenia o partii . Przejście z C do Objective-C jest łatwe dla kodu, ale nie jest wcale łatwe dla wielu programistów. Programista AC nie może tak łatwo wybrać kilku nowych funkcji zwiększających wygodę w Objective-C i niemal natychmiast uzyskać lepszą produktywność - musi nauczyć się wielu nowych „rzeczy”, zanim będzie mógł w ogóle dostać się gdziekolwiek.
C ++ sprawił, że przejście do jakiegoś kodu było nieco trudniejsze, ale przejście dla większości programistów znacznie łatwiejsze. Programiści C, którzy są przyzwyczajeni do obsługi każdego szczegółu swojego kodu, mogą nadal to robić w C ++ w dokładnie takim zakresie, w jakim chcą. C ++ ułatwił także korzystanie z niektórych nowych funkcji (np. Dodanie ctor do automatycznej inicjalizacji członków twojej struktury) bez zmiany sposobu myślenia. Wielu purystów OO pchnęło radykalne zmiany w myśleniu, ale wielu programistów C przeszło na C ++, nie robiąc nic podobnego (przynajmniej od razu - i często zawsze z wyglądu).
C ++ również wyglądał znacznie lepiej dla większości programistów C. Dodał kilka nowych słów kluczowych, ale (szczególnie na początku) kod nadal wyglądał dość znajomo. Pomimo statusu „czystego supersetu” większość kodu Objective-C wygląda dość obco dla większości programistów C. Dużo C ++ jest również dość łatwe do wyjaśnienia i zrozumienia w odniesieniu do tego, jak działają rzeczy w C. Przejście na Objective-C ma o wiele więcej miejsc, w których wszystko, co możesz powiedzieć, to: „zaufaj mi i zapomnij o wszystkim, co myślisz. „
Wiele decyzji projektowych w Objective-C spowodowało również (nieco) wolniejsze niż C ++, szczególnie na stosunkowo starych komputerach z powolnymi procesorami, ograniczoną pamięcią itp. Słusznie lub nie, był również postrzegany w dużej mierze jako produkt jednej firmy, gdzie C ++ był swobodnie dostępny dla każdego i dla wszystkich do wdrożenia.
Wszystko to spowodowało, że C ++ został przyjęty wystarczająco wcześnie, aby dość szybko osiągnął „masę krytyczną”, więc (między innymi) stał się oczywistym wyborem dla wielu projektów tylko dlatego, że był już powszechnie używany, dobrze znany Ilość.
Cel C nigdy nie osiągnął tego punktu. W rzeczywistości był na dobrej drodze, aby zniknąć w zapomnienie, gdy Apple ożywił go, niemal zmuszając go do każdego, kto chciał opracować dla swoich systemów. Udział Apple w rynku nie jest jednak wystarczająco duży, aby naprawdę dać mu masę krytyczną - tylko większą niszę. Jest to „domyślny” wybór tylko tam, gdzie / ponieważ Apple tak czyni.
Dodałbym również, że przynajmniej moim zdaniem model obiektowy podobny do Smalltalk Objective-C oznacza, że w rzeczywistości jest on bardziej bezpośrednim konkurentem dla Javy niż C ++. Tak, nadal ma podbudowę w języku C i tak, nadal możesz pisać kod niskiego poziomu bez użycia osobnego języka - ale czyste C i prawdziwy Objective-C są wystarczająco różne, aby mniej przypominały jeden język niż dwa zupełnie różne języki, w których zdarza się, że oba są obsługiwane przez jeden kompilator (chociaż jest to przydatne, gdy mogą rozmawiać ze sobą bez czegoś takiego jak JNI).