Beberapa bulan yang lalu saya memotong kode C untuk mencari nafkah, terutama sambil mempertahankan server POP3 yang mendukung berbagai OS (Linux, * BSD, HPUX, VMS ...).
Saya berencana untuk memoles karat dari keterampilan C saya dan belajar sedikit tentang implementasi bahasa dengan mengkode FORTH sederhana dalam C.
Tapi saya bertanya-tanya bagaimana (atau apakah?) Perubahan di dunia C sejak tahun 2000. Ketika saya berpikir C, saya pikir ...
- comp.lang.c
- ANSI C sedapat mungkin (tetapi C89 sebagai C99 tidak didukung secara luas)
gcc -Wall -ansi -pedantic
sebagai pengganti alat analisis statis- Emacs
- Ctags
- Autoconf + make (dan lihat poin 2 untuk VMS, HP-UX dll.)
Adakah yang bisa menulis di C selama sebelas tahun terakhir dan beri tahu saya apa (jika ada ;-)) telah berubah selama bertahun-tahun?
(Dalam berita lain, sial, saya sudah melakukan ini selama lebih dari satu dekade).
programming-languages
c
language-agnostic
Duncan Bayne
sumber
sumber
Jawaban:
Sangat sulit bagi saya untuk berpikir kembali ke masa seperti "Wow, seperti apa pemrograman C 10 tahun yang lalu?", Tetapi saya dapat berbicara tentang beberapa hal yang saya tahu saya lakukan secara berbeda.
Meskipun Anda biasanya masih dapat memanggil seseorang seperti Peter Seebach di comp.lang.c untuk bantuan tentang bug yang sangat konyol yang Anda duga terkait dengan bahasa, sebagian besar jika tidak semua pertanyaan pemrograman C mendapatkan jawaban luar biasa di Stack Overflow.
Analisis statis masih agak menyakitkan. Belat (setidaknya sejauh yang saya tahu) tidak menangani C99 dengan baik, grafik cakupan masih sedikit menyulitkan untuk divisualisasikan. Peringatan GCC telah "sedikit meningkat" (dalam tanda kutip karena itu tergantung pada siapa yang Anda tanya).
Valgrind adalah orang suci dari semua pemeriksa kesalahan memori dan biasanya mengarahkan Anda ke masalah dalam kode Anda yang tidak akan / dapat ditemukan oleh alat analisis statis. Ini tidak 100% sempurna, tapi saya pikir itu tidak mungkin. Saya sangat jarang harus menyentuh GDB hari ini, yang (bukan masalah pribadi) baik-baik saja dengan saya. Alat massif Valgrind adalah profiler tumpukan sangat bagus juga.
Selalu ada ekstensi baru di GCC, beberapa di antaranya halus , jadi -pedantic adalah ide bagus jika portabilitas menjadi perhatian besar. Untuk programmer pemula / berkarat, terkadang mudah untuk membingungkan ekstensi dengan fitur bahasa 'tersembunyi'.
CCAN telah muncul (pikirkan CPAN, tetapi untuk C) dan mulai lepas landas. Ada banyak permata berguna di sana, termasuk adaptasi TAP yang merupakan alat pengujian yang luar biasa. String di C masih payah, tetapi jumlah dan kualitas perpustakaan untuk membantu menangani mereka sudah meningkat dalam sepuluh tahun terakhir.
SCons dan CMake semakin populer untuk membangun konfigurasi. Autoconf / Automake / Libtool masih banyak digunakan, tetapi banyak orang merasa agak terlalu dibatasi oleh M4. Namun, jika itu sistem yang Anda suka gunakan, arsip makro Autoconf masih hidup dan sehat.
Jelas ada lebih banyak editor yang tersedia saat ini. Saya belum menemukan "IDE" yang tidak menghalangi saya ketika bekerja dengan C, tapi itu mungkin karena saya adalah seorang penginjil tua yang suka minum, Sanka minum untuk kesederhanaan.
Namun secara keseluruhan, saya tidak akan mengatakan hidup (sejauh C berjalan) bahkan hampir berbeda dari 10 tahun yang lalu. Tetapi, dalam banyak hal, ini sebenarnya sedikit lebih mudah. Sulit untuk menghubungkannya dengan alat lebih dari pengalaman.
sumber
glib mungkin adalah "perpustakaan standar baru". Ia menawarkan banyak dari apa yang dirasakan oleh banyak orang dari standar - threading dan platform-independent platform, struktur data kontainer, dll. Tentu saja, itu tidak berlaku di mana-mana, tetapi jika Anda dapat menggunakannya, ini menghemat banyak waktu.
sumber
sumber
2) dan 3) telah berubah. C99 adalah arus utama, C90 semakin lama semakin usang.
gcc -Wall -std=c99 -pedantic
.Terlepas dari itu, dua perubahan paling penting yang belum dibahas dalam jawaban lain adalah:
sumber
Bahasa pemrograman C berhasil mencapai 2 atau 3 bahasa pemrograman teratas di jurnal Dr Dobb dalam studi / survei terbarunya.
Sedangkan untuk mengimplementasikan bahasa, C digunakan untuk mengimplementasikan bahasa baru yang sedang dibangun di Google, yang disebut Go (golang.org).
Saya belum mengikuti grup usenet C dalam beberapa tahun terakhir. Saya sering mengunjungi saluran IRC Freenode-nya. Ini aktif dan sering dikunjungi oleh banyak orang.
Program-program baru sedang ditulis dalam C, tetapi mereka tidak mendapatkan publisitas seperti yang akan mereka dapatkan jika tahun ini adalah, katakanlah, 1999.
Ini adalah sesuatu yang datang ke puncak pikiran. Mungkin ada lebih banyak lagi, tetapi saya harap Anda tetap berhubungan dengan topi programmer Anda, meskipun Anda mungkin tidak sering mengunjungi model C topi :)
sumber
Saya pikir dukungan C99 lebih baik dari yang Anda duga. Visual Studio tidak mendukungnya, tetapi setiap kompiler lain yang dapat saya pikirkan mendukungnya (dengan, mungkin beberapa kelalaian di sana-sini). Jika Anda tidak perlu kompatibilitas dengan VS, maka saya akan mengatakan pergi dengan C99, karena jauh lebih menyenangkan untuk menulis daripada C89 IMHO.
sumber