Saya harus mengakui bahwa saya masih menulis kode pseudo-C89 (tidak sepenuhnya memenuhi persyaratan C99) terutama karena Microsoft. Saya sangat mengandalkan MSVC untuk sisi Windows dan mereka masih belum sepenuhnya memenuhi persyaratan C99, alih-alih menempatkan sebagian besar fokus mereka pada C ++ 17 dan seterusnya.
Selain itu saya sedang mengerjakan C SDK yang banyak pengembang plugin menggunakan MSVC untuk pengembangan plugin mereka, dan beberapa masih MSVC 2010. Jadi masih ada kompiler populer yang banyak digunakan pada platform yang tidak begitu eksotis (kecuali Anda pertimbangkan Windows eksotis) yang bahkan belum sepenuhnya mengimplementasikan C99. Ketika Anda menargetkan kompatibilitas luas dengan rentang kompiler terbesar (yang merupakan salah satu alasan utama SDK ditulis dalam C dan bukan C ++), masih ada beberapa dari mereka yang banyak digunakan (setidaknya MSVC) yang ketinggalan zaman ketika datang ke dukungan C. Sudah hampir beberapa dekade sejak C99 dan kami masih belum memiliki VLA, misalnya, di MSVC AFAIK (belum memeriksa MSVC 2017, tetapi mengingat sikap Microsoft pada C, saya ragu itu jauh lebih sesuai dengan C99) .
Dan sayangnya masih ada kompiler baru yang sebenarnya cukup bagus dengan pengoptimal yang baik dan debugger yang bahkan masih belum sepenuhnya memenuhi persyaratan C99. Tentu saja jika bukan karena ini, saya akan melompati C11.
Selain kompatibilitas sumber dengan plugin dan MSVC, ada juga interop dengan bahasa lain. Beberapa bahasa lain menggunakan SDK melalui FFI, dan beberapa FFI hanya mengerti C89. Mereka mungkin tidak mengerti bool
atau _Bool
sebagai contoh sederhana ketika mengimpor fungsi dari dylib dan hanya mengerti, katakanlah int
,.
Ya, argumen yang mendukung adalah portabilitas tetapi pertanyaannya adalah apakah sebenarnya ada sistem non-hipotetis yang hanya dapat menggunakan kompiler C89 tetapi sedang menyusun distribusi perangkat lunak baru. mis. Jika saya memulai proyek C baru, bagaimana saya memutuskan apakah mematuhi C89 dapat meningkatkan jumlah pengguna potensial?
Hanya memperhatikan yang satu ini tapi agak menggemakan Blrfl
, peningkatan produktivitas dengan menggunakan C99 dan C11 tidak begitu besar dalam kasus saya sementara kehilangan kemampuan untuk memungkinkan orang menulis plugin mereka di MSVC bisa menjadi biaya yang sangat besar (terutama karena produk saya bekerja On memiliki pangsa pasar terbesar, sejauh ini, di sisi Windows dan rata-rata pengguna sering membeli dan mengunduh banyak plugin pihak ketiga). Jenis produk yang saya kerjakan hampir setengah jalan antara lingkungan pengembangan untuk programmer / skrip dan produk pengguna akhir untuk seniman, karena begitu banyak orang ingin mengembangkan hal-hal baru di atasnya untuk memungkinkan kemampuan baru dan mencapai efek khusus dari suatu orang baik belum melihat. Jadi dalam kasus saya itu sebenarnya keputusan yang cukup sederhana untuk mendukung C89 setidaknya untuk SDK.
Saya kira Anda harus melihat kompiler di sekitar Anda dan mencoba mencari tahu target demografis Anda. Jika Anda tidak mengembangkan arsitektur plugin untuk Windows atau melakukan pemrograman tertanam apa pun atau mencoba membangun kit pengembangan perangkat lunak yang dapat digunakan oleh berbagai kompiler dan bahasa terluas di luar sana, maka hal itu tentu membuat hal-hal lebih mudah dijangkau untuk C99 + benar jauh. Juga pertimbangkan berapa banyak peningkatan produktivitas yang Anda dapatkan dari formulir C99 dan seterusnya. Saya tidak mendapatkan banyak manfaat dari hal-hal seperti VLA karena saya mengandalkan cara yang cukup sederhana untuk menggunakan stack ketika data cocok dan menumpuk sebaliknya.
Tetapi ada banyak hal di luar sana tertinggal dari kompiler populer seperti MSVC ke FFI dalam bahasa lain yang keren dalam arti bahwa mereka dapat mengimpor dan memanggil fungsi C langsung dari sebuah dylib, tetapi mungkin juga sedikit tertinggal di belakang pada waktu. Jadi ada banyak hal bisnis yang lebih praktis untuk dipertimbangkan, tergantung pada domain Anda, daripada hanya memilih yang lebih tua dan terstandarisasi untuk beberapa jenis estetika.