Dlaczego Objective-C nie jest szeroko stosowany poza środowiskiem kakao?

24

Objective-C ma ładną orientację obiektu, prostotę, elegancję i (jako nadzbiór C), zdolność niskiego poziomu. Może się wydawać prostą, nowoczesną alternatywą dla C ++, której wiele osób szuka i próbuje znaleźć w Go. Ale jest on po prostu używany w środowiskach Cocoa i post-NextSTEP, i nawet w tym przypadku jest postrzegany bardziej jako obciążenie z powodów historycznych niż jako optymalny wybór.

Dlaczego więc nie jest szerzej stosowany? Jakie są jego problemy?

Toni Cárdenas
źródło
5
„powody historyczne” oznaczają „wiele bibliotek”
@vartec nie jesteś do tego zmuszony. Zobacz na przykład MonoTouch, jest to C #. Aha, a potem masz regułę Apple dotyczącą Objective-C, C i C ++, prawda? Już to porzucili.
prawej

Odpowiedzi:

28

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).

Jerry Coffin
źródło
Doskonały przegląd historyczny. Najpierw kodowałem w Objective-C na białych urządzeniach NextSTEP w latach 90-tych i już uczyłem się C ++ na uniwersytecie, nienawidziłem dziwacznej składni Objective-C. Jako taki mogę docenić wiele rzeczy, które tu mówisz.
Mark Booth
dzięki, to jest oczywiście odpowiedź, której szukałem. ritchie sprawił, że C umożliwił pracę zespołową; „C jest dziwaczne i ma ogromny sukces”; ten cytat OZNACZA, że musisz stworzyć płaski, prosty język, aby wiele osób mogło go zrozumieć, a to nie znaczy, że musi to być „niesamowity” język. Nikt nie chce narzekać na objc, bo nikt go nie lubi. „są języki, na które narzekają ludzie, a których nikt nie używa” bjarne stroustup. Przynajmniej Windows był w stanie sprawić, że przemysł komputerowy rozrósł się nawet przy korporacyjnym pieprzeniu klastra i mam nadzieję, że Apple upadnie, ponieważ nie dbają o deweloperów.
Jokoon
Przepraszamy za rant, ale nawet jeśli bycie programistą oznacza, że ​​musisz nauczyć się nowych rzeczy, nie oznacza to, że musisz zapomnieć o wszystkim, co już wiesz. Słyszałem, że funkcja komunikatora objc została wykonana przy użyciu zoptymalizowanego kodu ASM. Co za bałagan, jak możesz powiedzieć deweloperom, żeby to zrozumieli? Co powiesz na sterowniki i jądra deweloperów? Mac to tylko Cadillaki, których używasz do prowadzenia samochodu, to tylko fantazyjne drogie przedmioty, które sprzedają, więc możesz po prostu sprawdzić pocztę e-mail i obejrzeć DVD. Chcesz dodać do tego oprogramowanie? powodzenia kolego. zapomnij o wszystkich istniejących programach miękkich i zrób jabłko.
Jokoon
+1, doskonałe wyjaśnienie!
Chan,
11

Zasadniczo Apple jest siłą napędową Celu C od pewnego czasu:

  • Natomiast ostatnia wersja jest praktycznie opuszczony, Objective-C 2.0 jest rzeczywiście zaczynają coraz bardziej przywiązane do niektórych z rdzenia Foundation Classes / protokoły, co oznacza, istnieje nieodłączny związek między funkcjami językowymi i ram, NSFastEnumeration sprężynowania do mojego umysłu , który jest potrzebny, aby obiekty poprawnie reagowały na pętle for. Oznacza to, że istnieje coraz większe powiązanie między językiem a platformą.
  • Praktycznie nie ma prawdziwej alternatywy dla kakao. Z kolei kakao zaczyna zależeć od coraz większej liczby funkcji OSX. Chociaż technicznie rzecz biorąc, możesz mieć implementację Objective-C działającą na dowolnym systemie operacyjnym z dowolnym podstawowym szkieletem, ale nie ma zbyt wielu najnowszych rzeczy na żadnej innej platformie.

W tej chwili Apple ma pełną kontrolę nad Objective-C i steruje językiem zgodnie z jego potrzebami, podczas gdy na tej planecie nie ma organizacji zainteresowanej uruchomieniem Objective-C na urządzeniach innych niż Apple, które byłyby wystarczająco duże, aby zapewnić standardowa biblioteka i zestaw narzędzi na początek, które mogłyby nawet zdalnie rywalizować z ekosystemami prezentowanymi przez .NET / Mono, C ++ lub Java.

back2dos
źródło
3
Jest GNUStep. Próbują nadążyć za Apple, choć od jakiegoś czasu nie sprawdzałem, jak sobie radzą.
Per Johansson,
1
Jest też Cocotron.
ysdx,
1
W momencie napisania tej odpowiedzi naprawdę nie było możliwe uruchomienie Objective-C 2.0 na platformie innej niż Apple. W każdym razie podjęto wiele wysiłków, a teraz możemy spodziewać się, że Objective-C 2.0 na FreeBSD będzie działał dość płynnie.
Eonil