Apakah Anda menggunakan C, hari ini, untuk proyek perangkat lunak? [Tutup]


18

Jika ya, di mana dan mengapa Anda menggunakannya?

Jika tidak, berikan penjelasan mengapa C tidak dapat Anda terima.


10
Tentu saja ada aplikasi yang C adalah pilihan yang tepat dan jelas, tetapi secara pribadi, jika saya tidak pernah membuat blok memori lagi, saya akan mati bahagia.
Adam Crossland

Ya- Kuda untuk kursus.
Martijn Verburg

Apa artinya?
Luca Matteis

Ini adalah pepatah lama bagi mereka yang mengikuti balap kuda. Pada dasarnya itu berarti bahwa setiap Kuda dapat menang pada hari itu, selama Kursus (Kering, Berlumpur, Panjang, Pendek, apa pun) cocok untuknya. Hal yang sama berlaku untuk bahasa pemrograman - itu selalu tergantung pada konteks dan domain masalah.
Martijn Verburg

2
Tidak, tetapi hanya karena hari ini saya tidak mengerjakan proyek yang C akan menjadi pilihan bahasa yang baik. Tanya saya lagi besok.
James McNellis

Jawaban:


38

C adalah bahasa yang bagus untuk pemrograman Sistem

Saya akan menggunakan C jika saya mengimplementasikan beberapa driver harware. Dan saya akan menggunakan C jika saya mengimplementasikan kernel Sistem Operasi saya sendiri atau Mesin Virtual saya sendiri.

Ini adalah bahasa yang sangat baik untuk melakukan hal-hal tingkat rendah jika Anda harus berurusan dengan perangkat keras atau API OS tingkat rendah untuk Windows API, Linux, Mac OS X, Solaris dan sebagainya ... Sistem yang disematkan biasanya memiliki dukungan yang baik untuk C dengan kit pengembangan + compiler.


4
Bisakah Anda menunjukkan di mana "Mac OS adalah linux"? Saya pikir Mac OS adalah Darwin: en.wikipedia.org/wiki/Darwin_%28operating_system%29
LennyProgrammers

1
@Stephen Furlani: LOL - yeah, itu agak meremehkan. :-) Ada banyak Unix yang mati seperti Xenix, DYNIX, dan A / UX, dan versi saat ini kebanyakan dari kita tidak melihat seperti HP-UX. Pohon keluarga sama rumit dan kusutnya dengan keluarga kerajaan Eropa.
Bob Murphy

4
C adalah bahasa yang mengerikan untuk pemrograman sistem. Kami telah mengetahui bahwa selama lebih dari 20 tahun, sejak Worm Morris, dan siapa pun yang masih menggunakannya untuk proyek apa pun dengan persyaratan keamanan apa pun, terutama sistem operasi atau aplikasi yang menghadapi jaringan, harus menghadapi tuntutan kelalaian kriminal.
Mason Wheeler

2
@Mason Wheeler: Apa yang harus kita gunakan?
Steve S

1
@Mason Wheeler: Hmm ... Saya sudah mengabaikan Pascal di masa lalu, tapi mungkin sudah waktunya untuk melihat (lebih dekat) lagi. Apakah Anda punya saran lain?
Steve S

17

Ya tentu saja. Saya akan menggunakan C untuk menulis bagian-bagian kritis kinerja sistem atau bagian komunikasi tingkat rendah. Sebagai contoh saya akan menggunakan C untuk menulis NIF di proyek Erlang hanya karena itu adalah The Right Tool (tm) untuk pekerjaan semacam ini. Atau saya akan menggunakan C untuk menulis bagian yang serupa (XS) dalam proyek Perl.


16

Saya menggunakan C secara profesional, hampir setiap hari. Sebenarnya, C adalah bahasa tingkat tertinggi di mana saya secara teratur memprogram.

Di mana saya menggunakan C: Saya menulis kode perpustakaan tingkat rendah yang memiliki persyaratan agar seefisien mungkin. Kode lem saya ditulis dalam C, loop komputasi bagian dalam ditulis dalam rakitan.

Mengapa saya menggunakan C: Ini jauh lebih mudah untuk menangani struktur argumen yang kompleks dan kondisi kesalahan daripada di perakitan, dan kinerja overhead untuk memeriksa kondisi semacam itu sebelum memulai perhitungan nyata sering diabaikan. Karena C adalah bahasa yang sederhana dan dispesifikasikan dengan baik, saya memiliki waktu yang mudah bekerja dengan tim penyusun di tempat kerja untuk meningkatkan pembuatan kode setiap kali saya melihat kode yang dikompilasi dengan bahaya kinerja yang tidak dapat diterima.

Portabilitas adalah nilai bagus lain dari C. Kode lem saya dibagikan di beberapa implementasi khusus perangkat keras dari perpustakaan yang saya kerjakan, yang benar-benar menyederhanakan membawa dukungan untuk platform baru. Sebagian besar platform tidak memiliki mesin virtual atau juru bahasa untuk cita rasa bahasa bulan ini. Beberapa platform tidak memiliki kompiler C ++ yang bagus. Ada beberapa platform yang tidak memiliki kompiler C yang dapat digunakan (dan, karena saya memiliki hubungan kerja yang baik dengan tim kompiler kami, saya biasanya tidak kesulitan mendapatkan dukungan yang saya butuhkan).


6
Sepertinya Anda memiliki pekerjaan yang sangat menyenangkan!
Paul Nathan

Ini adalah pekerjaan impian saya.
rsmahanti

5

Ya, saya akan menggunakan C dalam sistem tertanam yang sangat terbatas sumber daya. Saya dapat menggunakan C ++ sebagai gantinya karena membuatnya mudah untuk mempromosikan antarmuka yang kuat antara komponen perangkat lunak, tetapi hanya jika semua insinyur yang bekerja pada proyek memahami bahwa C ++ mudah disalahgunakan yang mengarah ke mengasapi ukuran kode (fungsi virtual dan template adalah contoh hal yang harus dihindari ).

Saya juga melihat seorang programmer C ++ mencoba membuat objek 10K pada tumpukan 1K, bukan ide yang baik.


2
sebenarnya virtualfungsi tidak apa-apa karena mereka mengikuti prinsip "Anda tidak membayar untuk apa yang tidak Anda gunakan", tetapi dalam lingkungan yang dibatasi memori, Anda dapat menonaktifkan pengecualian dan RTTI.
Matthieu M.

Saya merasa seperti saya selalu hanya membuat objek tunggal di C ++ untuk menyediakan antarmuka periferal. Saya pikir orang memilih C ++ daripada C dalam embedded system karena mereka pikir C ++ "lebih baik".
Erik

5

Saya bekerja sebagian besar dengan hypervisor Xen, berbagai macam perpustakaan fitur dan kernel Linux. Kadang-kadang, saya harus menulis driver perangkat (atau menulis ulang sehingga mesin virtual nxx dapat berbagi satu perangkat seperti HRNG). C adalah bahasa utama saya dan saya cukup senang dengan itu.

Apakah saya akan mencoba menulis program spreadsheet yang menggunakannya? Tidak mungkin. Setiap alat memiliki aplikasinya, dan saya senang bahwa saya memiliki banyak alat.

Saya suka C, tapi saya tidak mencoba menggedor sekrup dengan palu.

Jika C adalah pilihan yang masuk akal untuk proyek baru, tentu saja. Jika tidak, saya akan menggunakan sesuatu yang lain.


4

Saya akan melakukan beberapa proyek. Pasti akan jika saya harus menerapkan sistem tertanam, katakanlah untuk pengontrol pesawat otonom. Bahkan mungkin naik level lebih rendah pada beberapa bagian dengan perakitan.

Jika cocok dengan proyek, saya tidak punya masalah dengan itu.

Jika Anda ingin mengembangkan aplikasi web, hmm, mungkin tidak (atau saya perlu melihat justifikasi yang sangat kuat dan didukung fakta).

Saya juga akan menggunakannya dari proyek lain terutama dikembangkan dengan bahasa lain ketika hambatan telah diidentifikasi dengan jelas dan optimasi dapat diimplementasikan menggunakan kode asli. Misalnya, solusi Java yang perlu melakukan perhitungan intensif untuk beberapa perenderan tingkat lanjut (katakanlah, mesin perenderan atau sesuatu). Anda bisa default ke implementasi Java jika itu bukan platform yang didukung, tetapi memberikan implementasi yang dikompilasi secara asli dari C untuk beberapa platform yang didukung, dan mendapatkan peningkatan kinerja yang bagus.


Anda ingin alasan untuk menggunakannya untuk aplikasi web? Memcached ditulis dalam C, dan itu adalah bagian inti dari banyak aplikasi web. Juga, seorang kolega saya menulis sepotong kode yang berkaitan dengan situs jejaring sosial di C - begitu kompleks secara algoritmik, dengan kumpulan data yang berbatasan dengan ukuran RAM yang tersedia secara ekonomi, dan menangani kueri yang berjalan rata-rata 23 kali per render halaman. kami menghemat 4 bulan gaji server, dengan aplikasi C selama 4 hari.
qdot

@qdot: Itu alasan yang sah. Ada juga alasan mengapa ada kerangka kerja yang baik untuk C dan C ++ web dev. Hanya tidak akan menjadi pilihan pertama saya jika diperlukan untuk mengembangkan aplikasi web atau situs web umum. Dalam kasus kerangka kerja seperti memcached, itu jelas masuk akal. Demikian pula memiliki server di C bisa masuk akal. Karena itu mungkin tidak. Memcached (dan implementasi C spesifik Anda dari bagian intensif aplikasi web) adalah penggunaan C yang valid untuk web dev. Tetapi Anda memang membutuhkan programmer C yang baik untuk melakukan itu. Hanya bukan seseorang yang mengambilnya di jalan, atau mengharapkan masalah.
haylem

Dan jika orang lain memiliki alasan sah lainnya seperti ini, silakan posting di sini! Ini berguna untuk pembaca.
haylem

Jika Anda menggunakan C, Anda belajar untuk mengharapkan kinerja yang hebat, pengalaman belajar yang baik, dan banyak masalah yang tidak dapat dijelaskan pada awalnya. Saya hanya mencoba mendorong orang untuk menggunakan C, karena menjadi cepat penting ketika Anda beralih dari menjadi pengembang PHP / Ruby / Python "satu-dalam-sejuta" dan mulai menggaruk-garuk kepala Anda terhadap masalah perhitungan besar.
qdot

@qdot: memang. Malu banyak orang tidak benar-benar tahu C lagi, sungguh.
haylem

4

Setiap bahasa di luar sana memiliki ceruk penggunaan yang layak. Saya sering menemukan diri saya menerapkan hal-hal dalam bahasa tingkat yang lebih tinggi, dan kemudian secara bertahap membawanya ke C-land jika saya membutuhkannya untuk kinerja yang lebih tinggi atau bahkan sekadar lebih portabel. Ada kompiler C untuk hampir semua yang ada, dan jika Anda menulis ke API yang tersedia secara universal (seperti POSIX), maka itu bisa sangat berguna.

Apa yang saya sering memberitahu orang-orang yang tertarik belajar pemrograman saat ini adalah memastikan bahwa di beberapa titik, mereka belajar C dan menjadi nyaman dengan itu. Anda mungkin menemukan diri Anda dalam keadaan di mana Anda membutuhkannya. Pada lebih dari satu kesempatan, saya harus mengkompilasi program "fast reboot" kecil yang terhubung secara statis, dan menggunakan scp untuk meletakkannya di disk RAM pada server di mana subsistem disk sepenuhnya hilang. (Murah, server murah, tidak ada redundansi online, dan hanya kemampuan memuat program kecil? C adalah cara yang harus dilakukan.)

Selain itu, mempelajari cara bekerja dalam bahasa C tanpa memotret diri sendiri dapat berkontribusi secara signifikan pada kemampuan seseorang untuk menulis secara efisien dalam bahasa dan lingkungan lain. Setidaknya, itulah pengalaman saya.

Walaupun saya tentu saja tidak menggunakannya untuk semuanya, atau bahkan kebanyakan hal, itu memiliki tempatnya dan itu cukup universal: jadi ya, saya telah menggunakannya di masa lalu dan akan menggunakannya di masa depan (meskipun saya tidak menggunakannya) tahu kapan saat ini).


4

Ya, saya selalu melakukannya.

Jika Anda tidak memanggil perpustakaan apa pun, kode yang dihasilkan dari C tidak memerlukan dukungan OS. Ini juga memberi Anda kontrol yang baik atas bahasa mesin yang dihasilkan. Jadi sangat bagus untuk menulis driver atau kode lain yang hidup di ruang kernel, dan situasi terbatas lainnya seperti banyak jenis sistem embedded bekerja. Ini juga bahasa utama untuk proyek open-source yang bekerja dengan saya seperti X Windows, GTK +, dan Clutter.

Meskipun Anda dapat melakukan segalanya dalam C Anda dapat dalam C ++, seringkali mekanisme C ++ membuatnya lebih cepat dan lebih mudah untuk menulis kode. Saya suka OOP dan cara kelas C ++ merangkum fungsionalitas, dan saya suka RAII. Penggunaan doa destruktor otomatis dengan hati-hati ketika suatu objek keluar dari ruang lingkup menghilangkan sebagian besar kebocoran memori dan sumber daya yang merupakan kutukan dari pemrograman C. STL pada dasarnya adalah perpustakaan raksasa algoritma dan struktur data yang sangat optimal; jika Anda ingin menggunakannya dari C, Anda harus menulisnya sendiri atau membelinya di suatu tempat.

Sayangnya, untuk alasan yang saya tidak mengerti, sistem runtime di Linux memerlukan perpustakaan objek bersama khusus (setara dengan DLL pada Windows, dylib pada Mac) untuk menjalankan C ++, dan tidak ditemukan ketika Anda menjalankan program C. Jadi saya tidak bisa melakukan salah satu trik Mac dan Windows favorit saya, yaitu menulis objek bersama berbasis C ++ dengan API berbasis C, dan menyebutnya dari program C.

Jadi inilah proses pengambilan keputusan saya:

  1. Apakah saya bekerja dalam situasi terbatas seperti driver perangkat? Gunakan C.
  2. Apakah saya menulis perpustakaan Linux yang harus digunakan orang lain? Gunakan C.
  3. Apakah saya mengerjakan kode yang sudah ditulis dalam C? Gunakan C.
  4. Apakah saya menulis perpustakaan Mac atau Windows, atau perpustakaan Linux yang akan saya gunakan? Tulis internal di C ++, tetapi hanya mengekspos antarmuka C untuk menghindari masalah antarmuka biner yang rapuh.
  5. Gunakan C ++.

Satu hal yang menyenangkan adalah karena C ++ dapat mengkompilasi C, jika Anda benar-benar membutuhkan kendali yang lebih baik atas kode yang dihasilkan untuk situasi tertentu, Anda cukup menulis C untuk itu, dan C ++ untuk yang lain, dan kompilasi semuanya dengan kompiler C ++ .


Anda tidak dapat "mengkompilasi semuanya dengan kompiler C" karena masalah malloc dengan C ++ - Anda harus menggunakan C ++ tetapi tidak dalam C. Tentu saja tidak apa-apa jika Anda menggunakan kode C yang legal dan menjengkelkan .
alternatif

1
@ mathepic: Ya, C ++ jelas lebih ketat daripada C tentang banyak hal, termasuk menugaskan void pointer ke pointer yang diketik. Namun, saya memperbaiki bug di beberapa proyek lawas, sebagian dengan mengkompilasi file C dengan C ++. Saya menemukan tipe-casting hasil malloc menjadi harga kecil yang harus dibayar untuk memiliki kompiler C ++ mengungkap bug halus karena kode yang legal di C.
Bob Murphy

3

Ya, tetapi tergantung pada proyek. C sangat baik untuk beberapa proyek tingkat rendah atau bagian dari solusi terbesar.

Misalnya. Untuk logika bisnis ok, tetapi tidak untuk antarmuka pengguna.


2

jika harus keduanya

  • cepat dan
  • portabel

maka saya menggunakan C. Mungkin C ++.


Cepat dan portabel, bisa juga Java atau C #.
Jonas

11
@Jonas: tidak. Portable bukan berarti hanya 'windows or linux' ;-)
Steven A. Lowe

1
@Jonas: Cepat dan portabel, itu bukan Java atau C #. C ++ portabel di seluruh platform dan perangkat tertanam seperti mikrokontroler, dan C bahkan portabel (sebagai fungsi asing) ke bahasa lain. Keduanya lebih cepat daripada bahasa yang dikumpulkan non-fungsional-dan-karena-tumpukan-tapi-masih-sampah. Anda tidak perlu keduanya: tumpukan dan pengumpul sampah.
comonad

2
@Jonas: bacalah; perhatikan peringatan, dan sekali lagi, "portable" tidak berarti hanya windows / linux. Pertanyaannya menanyakan kapan Anda akan menggunakan C; jawabannya adalah: ketika harus berjalan cepat di mana-mana . Saya suka Java dan C #, tetapi mereka adalah palu, dan sistem yang lebih lama / tertanam tidak memiliki runtimes. Banyak dari mereka bahkan tidak memiliki ruang untuk menahan runtime!
Steven A. Lowe

2
@Jonas: Saya menghargai hasrat Anda, tetapi "platform baru" bukanlah topiknya. Biarkan saya memberi Anda contoh yang lebih spesifik, untuk melihat apakah itu membantu: mikroprosesor yang memberikan dukungan pengendalian api untuk tank di medan perang memiliki kompiler C. Mereka tidak, juga tidak akan pernah, memiliki JVM.
Steven A. Lowe

2

Ya, sebenarnya saya punya baru-baru ini!

Saya suka pemrograman dalam C. Saya melakukan sebagian besar pemrograman saya dengan python, tetapi ada kalanya saya membutuhkan kode cepat dan saya benar-benar menikmati keanggunan yang berasal dari kesederhanaan bahasa.

Proyek yang saya kerjakan sekarang adalah database, yang, seperti yang dapat Anda bayangkan, adalah kinerja yang kritis. Saat ini saya menggunakan C dan beberapa python, tetapi pada akhirnya akan didominasi, jika tidak sepenuhnya C.


2

Iya!

C adalah bahasa tingkat rendah dan ada situasi di mana C adalah satu-satunya pilihan seperti saya menggunakan C untuk memprogram pengendali mikro, atau menyatukan beberapa kode untuk berinteraksi dengan perangkat dari port klasik seperti Parallel, Serial atau bahkan Modem!


2

Iya. Saya menghabiskan sebagian besar karir saya pemrograman C ++, tetapi sekarang saya menulis sebagian besar kode saya di Ruby dan jika saya membutuhkan kinerja atau akses ke hal-hal tingkat rendah saya menulis ekstensi C. Itu manusia masa depan!


Beberapa jawaban membahas portabilitas dan kecepatan sebagai manfaat kode C, tetapi keterkaitan adalah karakteristik penting lainnya. Relatif mudah untuk menautkan kode "asing" yang ditulis dalam C karena disiplin tumpukan "klasik" yang sederhana. Banyak kompiler C akan memungkinkan "inline assembler" sebagai kemudahan untuk pergi tingkat yang sangat rendah dalam arsitektur (jelas mengorbankan portabilitas dalam bertindak).
hardmath

1

Saya akan menggunakan C jika saya sedang menulis sistem operasi. Karena itu tidak akan terjadi dalam dua puluh tahun ke depan, kecuali saya memukul lotre dan tidak ada lagi yang bisa dilakukan selain membuat distro Linux saya sendiri yang luar biasa, saya mungkin hanya akan menempel pada C #, Java, Python, dll, dll. Saya berlindung pernah menggunakan C dalam waktu yang sangat lama tetapi saya selalu menikmati menggunakannya; Saya pikir, hari ini kepalaku begitu melilit OO jika aku harus kembali ke sana, aku butuh sedikit untuk bisa berputar lagi.


0

C ++ portabel di seluruh platform dan perangkat tertanam seperti mikrokontroler. (C ++ dapat dikompilasi ke C, oleh karena itu mikrokontroler.)

C bahkan portable (sebagai fungsi asing) ke bahasa lain. Oleh karena itu, jika saya memprogram perpustakaan tingkat rendah, maka saya ingin lebih banyak kompatibilitas daripada C ++.

Haskell bersifat portable lintas platform (ARM akan segera hadir) tetapi BUKAN perangkat yang disematkan seperti mikrokontroler. Kecepatannya sebanding dengan C dan C ++; tetapi karena fungsional, ia menggunakan pengumpul sampah alih-alih tumpukan runtime, oleh karena itu dapat lebih cepat dan lebih lambat daripada C pada waktu yang berbeda (pengumpulan sampah) dan dalam situasi yang berbeda (kelanjutan alih-alih panggilan sub-rutin).


Saya memilih bahasa yang paling abstrak, karena kecepatan program tidak berbeda tetapi waktu pengembangan dan tingkat bug. C dan C ++ berbeda jauh, tetapi tidak dari sudut pandang Haskell.

Saya tidak suka bahasa lain, meskipun saya tahu satu atau dua tangan penuh. ... kecuali dalam beberapa kasus, well, bash .


0

Sistem tertanam sering memiliki tidak lebih dari beberapa kilobyte RAM dan mungkin beberapa lusin kilobyte flash, dengan kecepatan clock prosesor beberapa MHz. C adalah satu-satunya pilihan yang masuk akal dalam lingkungan bare-metal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.