Mengapa Objective-C tidak banyak digunakan di luar lingkungan Kakao?

24

Objective-C menampilkan orientasi objek yang bagus, kesederhanaan, keanggunan, dan (sebagai superset dari C), kemampuan tingkat rendah. Ini bisa terlihat seperti alternatif sederhana dan modern untuk C ++ yang banyak orang cari dan coba temukan di Go. Tapi itu hanya digunakan di lingkungan Kakao dan pasca-NextSTEP, dan bahkan dalam kasus ini dipandang lebih sebagai beban karena alasan historis daripada sebagai pilihan yang optimal.

Mengapa itu tidak lebih banyak digunakan saat itu? Apa masalahnya?

Toni Cárdenas
sumber
5
"alasan historis" berarti "banyak perpustakaan"
@artec Anda tidak dipaksa untuk melakukan itu. Lihat MonoTouch misalnya, itu adalah C #. Oh dan kemudian Anda memiliki aturan Apple tentang Objective-C, C dan C ++, kan? Mereka sudah meninggalkan itu.
buka kembali

Jawaban:

28

IMO, masalah dengan Objective-C tidak banyak kekurangan besar, sebagai kekurangan kecil (terutama sejak awal) dan kurangnya keuntungan yang dirasakan.

Objective-C adalah superset murni dari C, sehingga kode C dapat beralih ke Objective-C dengan mudah. Pola pikir untuk menggunakan Objective-C, bagaimanapun, berbeda dari pola pikir C banyak . Transisi dari C ke Objective-C mudah untuk kode tetapi tidak mudah sama sekali bagi banyak programmer. Programmer AC tidak dapat dengan mudah hanya memilih beberapa fitur kenyamanan baru di Objective-C dan mendapatkan produktivitas yang lebih baik segera - ia perlu belajar banyak "barang" baru sebelum ia bisa pergi ke mana saja.

C ++ membuat transisi untuk beberapa kode sedikit lebih sulit, tetapi transisi untuk sebagian besar programmer lebih mudah. Pemrogram C yang terbiasa berurusan dengan setiap detail kode mereka masih bisa melakukannya di C ++ sampai batas yang mereka inginkan. C ++ juga membuatnya mudah untuk menggunakan beberapa fitur baru (misalnya, menambahkan ctor untuk secara otomatis menginisialisasi anggota struct Anda) tanpa benar-benar mengubah cara berpikir Anda. Banyak puritan OO mendorong perubahan radikal dalam berpikir, tetapi banyak programmer C beralih ke C ++ tanpa melakukan hal semacam itu (setidaknya segera - dan sering kali, dari penampilan).

C ++ juga tampak jauh lebih akrab bagi kebanyakan programmer C. Itu menambahkan beberapa kata kunci baru, tetapi (terutama awal) kode masih sebagian besar tampak cukup akrab. Terlepas dari statusnya "superset murni", sebagian besar kode Objective-C terlihat cukup asing bagi kebanyakan programmer C. Banyak C ++ juga cukup mudah untuk dijelaskan dan dipahami dalam hal bagaimana hal-hal bekerja di C. Beralih ke Objective-C memiliki lebih banyak tempat yang tentang semua yang dapat Anda katakan adalah "percayalah padaku dan lupakan semua yang Anda pikir Anda tahu. "

Banyak keputusan desain di Objective-C juga membuatnya (agak) lebih lambat daripada C ++, terutama pada mesin yang relatif lama dengan prosesor lambat, memori terbatas, dll. Benar atau salah, itu juga dilihat sebagian besar sebagai produk perusahaan tunggal, di mana C ++ tersedia secara bebas untuk diimplementasikan oleh siapa saja dan semua orang.

Ini semua menyebabkan C ++ diadopsi cukup cepat sejak awal sehingga mencapai "massa kritis" cukup cepat, jadi (antara lain) itu menjadi pilihan yang jelas untuk banyak proyek hanya karena sudah menjadi banyak digunakan, terkenal kuantitas.

Objective-C belum pernah mencapai titik itu. Bahkan, itu sedang dalam perjalanan menuju memudar menjadi ketidakjelasan ketika Apple menghidupkannya kembali dengan hampir memaksanya pada siapa saja yang ingin mengembangkan untuk sistem mereka. Pangsa pasar Apple tidak cukup besar untuk itu sehingga benar-benar memberikan massa kritis - ceruk yang lebih besar. Ini adalah pilihan "default" hanya di mana / karena Apple membuatnya demikian.

Saya juga menambahkan bahwa setidaknya menurut saya, model objek Smalltalk-like Objective-C berarti bahwa pada dasarnya itu lebih banyak pesaing langsung ke Jawa daripada C ++. Ya, masih memiliki dasar-dasar C, dan ya Anda masih dapat menulis kode tingkat rendah tanpa menggunakan bahasa yang terpisah - tetapi C murni dan Objective-C nyata cukup berbeda sehingga kurang seperti satu bahasa daripada dua bahasa yang sama sekali berbeda yang kebetulan keduanya ditangani oleh kompiler tunggal (meskipun itu berguna bahwa keduanya dapat berbicara satu sama lain tanpa sesuatu seperti JNI untuk bergabung dengan mereka).

Jerry Coffin
sumber
Ulasan sejarah yang sangat baik. Saya pertama kali berkode di Objective-C pada mesin kotak putih NextSTEP di tahun 90-an dan telah diajarkan C ++ di universitas, benci sintaks aneh Objective-C. Karena itu saya dapat menghargai banyak hal yang Anda katakan di sini.
Mark Booth
terima kasih, itu jelas jawaban yang saya cari. ritchie membuat C untuk memungkinkan kerja tim; "C cacat yang aneh dan sukses besar"; kutipan ini BERARTI Anda harus membuat bahasa yang datar dan sederhana sehingga banyak orang dapat memahaminya, dan itu tidak berarti bahasa tersebut harus merupakan bahasa yang "luar biasa". Tidak ada yang mau mengeluh tentang objc, karena tidak ada yang suka. "Ada orang-orang bahasa yang mengeluh, dan bahasa tidak ada yang menggunakan" bjarne stroustup. Setidaknya windows dapat membuat industri komputer tumbuh bahkan dengan corporate clusterfuck, dan saya berharap apel gagal karena mereka tidak peduli dengan devs.
jokoon
Maaf untuk kata-kata kasar, tetapi bahkan jika menjadi seorang pengembang berarti Anda harus mempelajari hal-hal baru, itu tidak berarti Anda harus melupakan semua yang sudah Anda ketahui. Saya mendengar fungsi messenger dari objc dibuat dengan beberapa kode ASM yang dioptimalkan. Benar-benar kacau, bagaimana Anda bisa memberitahu para devs untuk memahami itu? Bagaimana dengan driver dan kernel devs? Mac hanya Cadillac yang Anda gunakan untuk mengemudi, mereka hanya benda mahal mahal yang dijual sehingga Anda bisa memeriksa email, menonton dvd. Ingin menambahkan beberapa perangkat lunak ke benda itu? semoga beruntung sobat. lupakan semua soft yang ada, dan lakukan apple way TM.
jokoon
+1, penjelasan yang bagus!
Chan
11

Yah, pada dasarnya, Apple adalah kekuatan pendorong di belakang Objective-C sejak beberapa waktu sekarang:

  • Sementara versi terakhir benar-benar ditinggalkan, Objective-C 2.0 sebenarnya mulai menjadi semakin terikat dengan beberapa kelas inti / protokol, yang berarti, ada hubungan yang melekat antara fitur-fitur bahasa dan kerangka kerja, NSFastEnumeration muncul di pikiran saya. , Yang diperlukan untuk objek untuk merespon dengan benar dalam loop. Ini berarti, ada hubungan yang berkembang antara bahasa dan platform.
  • Hampir tidak ada alternatif nyata untuk Kakao. Dan Kakao pada gilirannya mulai bergantung pada semakin banyak fitur OSX. Sementara secara teknis, Anda dapat memiliki implementasi Objective-C berjalan pada OS apa pun dengan kerangka kerja inti, tidak ada banyak hal baru di luar sana untuk platform lain.

Seperti sekarang, Apple memiliki kontrol penuh atas Objective-C dan menggerakkan bahasa sesuai dengan kebutuhannya, sementara tidak ada organisasi di planet ini yang tertarik menjalankan Objective-C pada perangkat non-Apple, yang akan cukup besar untuk menyediakan pustaka dan toolkit standar untuk memulainya, yang bahkan dapat menyaingi ekosistem yang disajikan oleh .NET / Mono, C ++ atau Java dari jarak jauh.

back2dos
sumber
3
Ada GNUStep. Mereka mencoba mengikuti perkembangan Apple, meskipun saya belum mengecek seberapa baik kinerja mereka.
Per Johansson
1
Dan ada Cocotron juga.
ysdx
1
Pada titik jawaban yang ditulis ini, benar-benar tidak ada yang mungkin untuk menjalankan Objective-C 2.0 pada platform non-Apple. Bagaimanapun, banyak upaya yang dilakukan setelah itu, dan sekarang kita dapat menjalankan Objective-C 2.0 di FreeBSD menggunakan GNUstep dengan cukup lancar.
Eonil