Pemrograman C pada 2011 [ditutup]

19

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 ...

  1. comp.lang.c
  2. ANSI C sedapat mungkin (tetapi C89 sebagai C99 tidak didukung secara luas)
  3. gcc -Wall -ansi -pedantic sebagai pengganti alat analisis statis
  4. Emacs
  5. Ctags
  6. 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).

Duncan Bayne
sumber
Saya juga bertanya pada comp.lang.c: groups.google.com/group/comp.lang.c/browse_thread/thread/…
Duncan Bayne
3
Yah, ada vi bukan emacs, tapi saya tidak akan pergi ke sana. Saya akan terkejut jika ada yang masih memposting ke comp.lang.c, dan bahkan kontes C yang membingungkan itu stagnan ( www0.us.ioccc.org/main.html ). Masa-masa sedih - kontes baru berikutnya adalah untaian huruf yang dikaburkan yang mengeja beberapa frasa pesan teks, lol.
Jay Elston

Jawaban:

10

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.

Pos Tim
sumber
15

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.

zvrba
sumber
Saya pikir Anda bingung dengan GNU C Library (GLibC)
Lekensteyn
7
Tidak, saya tidak bingung.
zvrba
1
Ini adalah jawaban yang benar-benar valid, saya tidak yakin mengapa itu ditolak. glib lahir dari banyak yang frustrasi dengan Ulrich Drepper dan betapa 'dijaga' glibc.
Tim Post
1
Glib sepenuhnya dipisahkan dari GNOME sekarang. Saya tidak berdebat tentang asosiasi, hanya saja secara praktis Anda dapat sepenuhnya mengabaikan GNOME dan bahkan GTK +. Ada (banyak?) Baris perintah dan program non-interaktif tertulis di dalamnya.
detly
3
Saya suka menyebut glib "STL of C"
Cercerilla
4
  1. StackOverflow ;)
  2. Saya menggunakan C terutama untuk menulis firmware untuk mikrokontroler Microchip, dan karena kompiler mereka berbasis GCC, saya menggunakan C99 (tapi saya tidak jadi gila dengan fitur tambahan, terutama untuk membatasi ruang lingkup variabel loop dan array dinamis pada stack). Ketika saya menulis ekstensi Python, saya tetap menggunakan C89 jika seseorang perlu mengompilasinya dengan MSVC. Saya tidak tahu apa yang orang lain gunakan.
  3. Belat (bekerja pada C89, C99 tidak), dan statis analisa dentang ini - meskipun, karena keduanya tersedak pada kode firmware makro-berat, saya tidak memiliki besar jumlah pengalaman dengan mereka. Sebenarnya, banyak hal LLVM cukup menarik bagi seorang geek C.
  4. Oke, ini hanya umpan perang suci: P
  5. Tidak pernah menggunakan Ctags, tapi saya tidak menyukai Doxygen.
  6. Ya Tuhan, aku benci Autoconf. Aku sangat membencinya. Saya tidak pernah berhasil membuat bola lumpur Autoconf dari awal. Jika sebuah proyek sudah memiliki satu, saya hanya akan berakhir dengan memastor apa pun yang sudah ada di sana. Jika saya menulis sesuatu yang baru, saya berteriak-teriak dan rave dan mencari alternatif, meskipun saya terkutuk jika saya menemukan yang saya akan tetap dengan. Terakhir kali saya melewati siklus ini, saya memilih SCons, yang mungkin saya gunakan lagi.
detly
sumber
1
Saya juga menyarankan Cppcheck untuk analisis statis.
Greg Hewgill
10
mengenai poin nomor 6: "Saya melihat sebuah buku kemarin bernama 'Die Gnu Autotools', saya berpikir 'Heck Yeah!' sampai saya menyadari judulnya dalam bahasa Jerman ".
Cercerilla
2

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:

  • C11. ISO 9899: 2011.
  • MISRA-C: 2004.

sumber
1

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 :)

vpit3833
sumber
0

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.

Cercerilla
sumber