Semua bahasa tidak boleh mencoba untuk memasukkan setiap fitur dari setiap bahasa lainnya.
C ++ pada dasarnya adalah assembler makro yang sangat, sangat canggih. Ini BUKAN (dalam arti tradisional) bahasa tingkat tinggi seperti C #, Java, Objective-C, Smalltalk, dll.
Adalah baik untuk memiliki alat yang berbeda untuk pekerjaan yang berbeda. Jika kita hanya memiliki palu, semua hal akan terlihat seperti paku, dll. Memiliki bahasa skrip berguna untuk beberapa pekerjaan, dan bahasa OO reflektif (Java, Obj-C, C #) berguna untuk kelas pekerjaan lain, dan super bahasa-telanjang-tulang dekat-ke-mesin-efisien berguna untuk kelas pekerjaan lain (C ++, C, Assembler).
C ++ melakukan pekerjaan yang luar biasa untuk memperluas teknologi Assembler ke tingkat manajemen kompleksitas yang luar biasa, dan abstraksi untuk membuat pemrograman lebih besar, tugas yang lebih kompleks sangat mungkin bagi manusia. Tetapi itu tidak selalu merupakan bahasa yang paling cocok untuk mereka yang mendekati masalah mereka dari perspektif tingkat tinggi (Lisp, Smalltalk, Java, C #). Jika Anda membutuhkan bahasa dengan fitur-fitur tersebut untuk mengimplementasikan solusi terbaik untuk masalah Anda, maka terima kasih kepada mereka yang telah membuat bahasa seperti itu untuk kita semua gunakan!
Tetapi C ++ adalah untuk mereka yang, untuk alasan apa pun, perlu memiliki korelasi yang kuat antara kode mereka dan operasi mesin yang mendasarinya. Baik efisiensinya, atau driver perangkat pemrograman, atau interaksi dengan layanan OS tingkat rendah, atau apa pun, C ++ lebih cocok untuk tugas-tugas itu.
C #, Java, Objective-C semuanya membutuhkan sistem runtime yang lebih besar dan lebih kaya untuk mendukung eksekusi mereka. Runtime itu harus dikirimkan ke sistem yang dipermasalahkan - sudah diinstal sebelumnya untuk mendukung pengoperasian perangkat lunak Anda. Dan layer itu harus dipertahankan untuk berbagai sistem target, dikustomisasi oleh BEBERAPA BAHASA LAIN untuk membuatnya bekerja pada platform itu. Dan lapisan tengah itu - lapisan adaptif antara OS host dan kode Anda - runtime, hampir selalu ditulis dalam bahasa seperti C atau C ++ di mana efisiensinya adalah # 1, di mana pemahaman dapat diprediksi interaksi yang tepat antara perangkat lunak dan perangkat keras dapat dengan baik dipahami, dan dimanipulasi untuk mendapatkan hasil maksimal.
Saya suka Smalltalk, Objective-C, dan memiliki sistem runtime yang kaya dengan refleksi, meta-data, pengumpulan sampah, dll. Kode yang luar biasa dapat ditulis untuk memanfaatkan fasilitas ini! Tapi itu hanyalah lapisan yang lebih tinggi pada tumpukan, lapisan yang harus bersandar pada lapisan yang lebih rendah, yang pada akhirnya harus berada di atas OS dan perangkat keras. Dan kita akan selalu membutuhkan bahasa yang paling cocok untuk membangun lapisan itu: C ++ / C / Assembler.
Tambahan: C ++ 11/14 terus memperluas kemampuan C ++ untuk mendukung abstraksi dan sistem tingkat tinggi. Threading, sinkronisasi, model memori yang tepat, definisi mesin abstrak yang lebih tepat memungkinkan pengembang C ++ untuk mencapai banyak abstraksi tingkat tinggi yang beberapa bahasa tingkat tinggi ini hanya digunakan untuk memiliki domain eksklusif, sambil terus menyediakan dekat dengan kinerja logam dan kemampuan prediksi yang sangat baik (yaitu subsistem runtime minimal). Mungkin fasilitas refleksi akan diaktifkan secara selektif dalam revisi C ++ di masa mendatang, bagi mereka yang menginginkannya - atau mungkin perpustakaan akan menyediakan layanan runtime seperti itu (mungkin sekarang ada, atau awal dari salah satu yang mendorong?).