C adalah salah satu bahasa tertua yang masih ada. ABI-nya sederhana, dan hampir setiap sistem operasi yang masih digunakan saat ini telah ditulis di dalamnya . Sementara beberapa OS tersebut mungkin telah menambahkan hal-hal misalnya dalam C # /. NET atau apa pun di atas, di bawah mereka sangat mendalami C.
Itu berarti bahwa, untuk menggunakan fungsionalitas yang disediakan oleh OS, hampir setiap bahasa pemrograman di luar sana membutuhkan cara untuk berinteraksi dengan C perpustakaan pula . Perl, Java, C ++, mereka semua secara native menyediakan cara untuk "berbicara C", karena mereka harus jika mereka tidak ingin menemukan kembali setiap roda yang ada.
Ini menjadikan C bahasa Latin dari bahasa pemrograman. (Berapa tahun internet sebelum metafora itu harus menjadi "bahasa Inggris untuk bahasa pemrograman"?)
Saat Anda menulis pustaka di C, Anda mendapatkan antarmuka yang kompatibel dengan C secara gratis (jelas). Jika Anda menulis perpustakaan Anda di C ++, Anda bisa mendapatkan binding C, melalui extern "C"
deklarasi seperti yang Anda sebutkan.
Namun , Anda bisa mendapatkan orang-binding hanya untuk fungsi yang dapat dinyatakan dalam C .
Jadi API perpustakaan Anda tidak dapat menggunakan ...
- templat,
- kelas,
- pengecualian,
- fungsi yang mengambil atau mengembalikan objek.
Salah satu contoh sederhana, Anda perlu membuat fungsi yang diekspor mengambil dan mengembalikan array ( []
) alih-alih std::vector
(atau std::string
dalam hal ini).
Jadi, tidak hanya Anda tidak dapat memberikan hal-hal baik yang ditawarkan C ++ kepada klien perpustakaan Anda, Anda juga harus melakukan upaya tambahan untuk "menerjemahkan" API perpustakaan Anda dari C ++ ke "C kompatibel" ( extern "C"
).
Itulah mengapa poin dapat dibuat bahwa C adalah pilihan yang lebih baik untuk mengimplementasikan perpustakaan. Secara pribadi, saya pikir manfaat C ++ masih lebih besar daripada upaya yang diperlukan untuk extern "C"
API, tapi itu hanya saya.