Dari apa yang saya baca di sana: Mengapa Objective-C tidak terlalu populer di luar komunitas Apple?
Objective-C adalah superset dari C (sebenarnya jauh lebih ketat daripada C ++) sehingga masalah kompatibilitas ke belakang tidak muncul. Apa pun yang dapat Anda lakukan di C dapat Anda lakukan di Objective-C.
Menjadi superset adalah biner, seperti hamil. Obj-C adalah superset dari C, dan C ++ bukan.
Apa yang mereka maksud dengan superset? Dalam hal apa tujuan-C akan lebih dekat // kompatibel dengan C? Dalam hal apa tujuan-C mengikuti filosofi C lebih dekat daripada C ++?
Dapatkah program C dikompilasi tanpa modifikasi oleh kompiler C objektif (kompatibilitas 100%)?
Ini lebih merupakan pertanyaan tentang desain dan kompatibilitas bahasa pemrograman daripada perang tentang mana yang lebih baik.
sumber
Yang mereka maksud adalah superset ketat. Semua program C yang valid akan dikompilasi dengan kompiler Objective-C. Beberapa program C yang valid tidak dapat dikompilasi dengan kompiler C ++.
Berikut contoh sederhananya:
int *foo = malloc(12);
Mengompilasi dalam C dan Objective-C, tetapi tidak dalam C ++. Tentu saja ada contoh lain juga.
Semua - Objective-C adalah superset ketat dari C.
Iya.
sumber
Dari bawah ke atas, C ++ telah dirancang sebagai "C yang lebih baik", memperbaiki kelalaian desain, baik yang nyata maupun yang dipersepsikan, saat penulis C ++ mempelajari bahasanya. Hasil dari keputusan desain ini adalah bahwa
X
menjadi program C yang valid tidak menjaminX
akan dapat dikompilasi, apalagi dijalankan, ketika diproses oleh compiler C ++. Perubahan tersebut menyentuh konstruksi dasar seperti literal string (menjadiconst char*
), penugasanvoid
pointer, konversi antaraenum
s dan tipe integral, semantik operator penugasan gabungan , dan sebagainya.Selain itu, begitu C99 hadir, fitur yang membuatnya menjadi standar C yang diperbarui ditinggalkan dari standar C ++ yang diperbarui. Sekali lagi, fitur bahasa yang sangat penting ditinggalkan - terutama, penginisialisasi yang ditunjuk dan array ukuran variabel.
Sebaliknya, Objective C telah diposisikan sebagai superset dari C, yang mengharuskan semua program C yang valid dapat dikompilasi dengan compiler Objective C.
sumber
int nil = 0; nil++;
tidak dapat dikompilasi sebagai Objective-C. Apa masalahnya di sana, apakah jelas bahwa Objective-C menyediakan tajuk yang, setelah disertakan, dapat merusak kode Anda persis seperti tajuk C? Dan karenanya penulis potongan itu seharusnya tidak memasukkannya."Objective-C adalah superset dari C" berarti bahwa setiap program C yang valid adalah program Objective-C yang valid (dengan arti yang sama).
Kadang - kadang dikatakan, meskipun bukan oleh para ahli C ++, bahwa C ++ adalah superset dari C. Ini tidak akurat, itulah sebabnya kutipan Anda membuat perbandingan besar antara keduanya.
sumber
Objective C adalah sekumpulan ekstensi yang kompatibel dengan versi sebelumnya ke C. Hal ini dimungkinkan karena fitur Objective C dibatasi dalam dua cara yang sangat sederhana:
@
. Karakter ini saat ini tidak digunakan dalam bahasa C.[obj method:argument]
,. Di C, tanda kurung siku digunakan dengan cara yang sangat spesifik untuk subskrip array, dan ini adalah sintaks C yang tidak valid. Ekstensi yang dibangun di atas sintaks yang tidak valid tidak mengubah arti dari apa pun yang valid dalam bahasa host.Sangat mudah dilihat sehingga tidak ada program yang menggunakan ekstensi Objective C yang dapat menjadi program ISO C yang benar-benar sesuai, sesederhana apapun. Selain itu, setiap program ISO C dapat dideklarasikan, menurut definisi, sebagai program Objective C yang valid. Objective C dapat dengan mudah mengikuti perkembangan seperti C99 dan C11.
Di sisi lain, C ++ bukan hanya ekstensi ke C; Ini adalah bahasa berbeda yang mengubah arti dari beberapa sintaks C. C ++ dan C dipertahankan secara terpisah, sehingga hubungannya berubah seiring waktu. Misalnya, C telah memperoleh fitur baru yang sama sekali tidak ada di C ++, dan kemungkinan besar tidak akan masuk ke C ++, seperti array panjang variabel C99. C ++ tidak dapat dengan mudah mengambil fitur C baru.
Jika Anda menulis program C portabel, program tersebut harus sekaligus menjadi program Objective C. Tetapi perhatian tambahan akan diperlukan agar ini juga merupakan program C ++ dengan arti yang sama. (Praktik ini tidak pernah terdengar, dan dialek yang dibutuhkannya secara informal dikenal sebagai "C Bersih").
Contoh sepele dari program C yang rusak saat diperlakukan sebagai C ++ adalah program C apa pun yang menggunakan kata kunci C ++ sebagai pengenal, seperti
class
atauvirtual
. Tujuan C tidak memasukkan kata kunci yang dipesan. Ini memiliki kata kunci baru yang diperkenalkan oleh@
karakter, seperti@interface
.sumber