Apa peran C ++ hari ini?

41

Saat ini saya seorang mahasiswa IT dan saya bertanya-tanya apa yang masih penting dalam C ++ hari ini, untuk apa ini digunakan? Saya menyelesaikan kursus dasar C ++ di universitas saya, tetapi saya tidak bisa membayangkan di mana saya bisa menggunakan pengetahuan saya dan ke arah mana saya harus belajar C ++.

Dengan kata lain apa yang harus saya pelajari untuk menjadi programmer C ++ yang sukses?

Saat ini saya sedang belajar Java hanya karena saya tidak melihat dengan jelas di area mana C ++ bisa berguna hari ini, tapi saya jelas tahu jenis pekerjaan apa yang akan saya lakukan sebagai programmer Java. Tapi saya masih berharap bahwa C ++ tidak mati.

neraka
sumber
2
Ini adalah sudut pandang saya. C ++ sangat berguna dalam situasi waktu nyata (dan videogame). Saya juga menggunakan C ++ untuk aplikasi desktop (jangan lupa tentang Qt) untuk alasan kinerja.
hosomaki
1
@stign IMO kemungkinan akan mati karena kemungkinan akan tiba saatnya semua bahasa saat ini usang (mungkin karena perubahan besar pada perangkat keras yang digunakan).
Kenneth
17
C ++ jauh dari mati (saya menulis kode baru di dalamnya setiap hari), dan jika COBOL ada indikasi, saya akan bekerja selama bertahun-tahun yang akan datang.
Michael Kohne
2
Lihatlah Beacon Bahasa Pemrograman dan buat kesimpulan Anda sendiri: lextrait.com/vincent/implementations.html
Nemanja Trifunovic
1
Baru-baru ini saya telah menonton beberapa video menarik di saluran Microsoft 9 . Microsoft telah menghabiskan jutaan dolar untuk riset pasar dan berdasarkan penelitiannya itu berbicara tentang kebangkitan C ++. Lihat video ini .
grokus

Jawaban:

57

Fitur pembunuh C ++ adalah manajemen sumber daya lingkup-terikat , SBRM (lebih dikenal sebagai " RAII "). Ini adalah satu - satunya bahasa pemrograman industri yang dibangun di sekitar konsep ini. Dalam C ++, waktu hidup semua objek diketahui dengan tepat, dan (C ++ ditulis dengan baik) program menjamin bahwa sumber daya diperoleh dan dirilis secara penuh deterministik. Sebagai perbandingan, bahasa yang dikumpulkan sampah atau dikelola dengan baik tidak memberikan jaminan seperti itu; pada kenyataannya objek-objek dalam bahasa-bahasa tersebut dapat bertahan setelah akhir masa hidupnya.

Itulah alasan mengapa C ++ digunakan dalam bidang keuangan, video game, sistem embedded dan real-time berkinerja tinggi, transportasi, manufaktur, dan industri lain di mana determinisme dan presisi penting. Tidak ada alternatif.

Memang, itu digunakan untuk banyak tugas lebih dari ini, dan tugas-tugas itu hilang ke C # dan Python dan bahasa lain yang lebih cocok, tetapi itu tidak mempengaruhi ceruk intinya.

Cubbi
sumber
20
Siapa pun yang menggunakan malloc di C ++ saya ingin memukul kepala mereka dengan benda keras. Juga, ada fitur yang kurang dikenal dari operator newdi C ++ yang disebut penempatan. Ini memungkinkan untuk menggunakan kembali ruang memori yang saat ini ditempati. Jadi, jika seseorang ingin menghindari (atau meminimalkan) fragmentasi yang mereka bisa, secara teori lakukan itu. Dan diprediksi bukan deterministik yang sama.
Tamás Szelei
4
@Apalala C ++ memiliki penghitungan referensi juga, tetapi jauh lebih buruk daripada SBRM dalam hal manajemen seumur hidup objek. Saya tidak hanya berbicara tentang determinisme hard-RT, saya berbicara tentang perilaku deterministik dari model objek.
Cubbi
4
Ketika saya belajar C ++, RAII tidak dikenal secara luas; Saya belajar manajemen pointer baru dan menghapus dan berbasis otak. Jadi saya tidak berpikir Anda dapat menggambarkannya sebagai "dibangun di sekitar konsep". Perpustakaan dan struktur pendukung lainnya yang digunakan saat ini mungkin memiliki, tetapi bukan bahasa inti atau sintaksis.
jprete
7
@ jprete Benar bahwa banyak kekuatan C ++ ditemukan daripada dirancang. Posting ini adalah tentang bahasa pasca-2005.
Cubbi
5
RAII itu dirancang menjadi C ++. Tetapi kebanyakan programmer C ++ hanya terus menulis C, mengganti malloc dengan yang baru dan bebas dengan delete.
kevin cline
40

Ada beberapa pasar untuk C dan C ++ (untuk pemahaman saya meskipun terbatas)

  1. Kode yang ada. C dan C ++ memiliki beberapa basis kode terbesar yang ada. Kode sebesar ini tidak bisa dibuang begitu saja hanya karena "bahasa baru panas berikutnya" telah muncul. Binding C cukup banyak standar interaksi antar-bahasa pada kebanyakan platform, sehingga mampu membuat (paling tidak) perpustakaan pembungkus dalam C atau C ++ bermanfaat.
  2. Aplikasi berkinerja tinggi (mis. Keuangan frekuensi tinggi). C dan C ++ masih mencapai kinerja keseluruhan yang lebih baik daripada kebanyakan bahasa pemrograman lainnya. Yang paling penting di C ++, yang sering membangun abstraksi dengan hal-hal yang hanya kompiler seperti templat, yang memindahkan komputasi dari runtime ke waktu kompilasi (membuat aplikasi keseluruhan Anda lebih cepat).
  3. (Mirip dengan 2) Aplikasi latensi rendah. Bahasa-bahasa yang berjalan pada misal CLR atau JVM seringkali dapat hampir secepat C ++ tergantung pada aplikasinya, tetapi seseorang masih perlu memuat CLR atau JVM sendiri ke dalam memori sebelum program Anda dapat dieksekusi. Jika Anda memiliki persyaratan startup yang berat, ini penting. EDIT DARI KOMENTAR : Dalam hal ini, persyaratan latensi keras dari deskripsi apa pun perlu diperhatikan di sini. Bahasa yang berjalan pada mesin virtual jarang menawarkan batasan waktu yang sulit karena menjalankan misal pengumpulan sampah bukanlah proses deterministik.
  4. Sistem tertanam. Beberapa sistem tertanam memiliki perangkat keras untuk dijalankan, misalnya JVM (Google Android (Oke, ini bukan JVM, tapi dekat), RIM Blackberry) atau CLR (Windows Phone), tetapi sebagian besar sistem embedded tidak memiliki kekuatan untuk menjalankannya. jalankan bahasa yang membutuhkan lebih banyak dukungan runtime daripada yang dibutuhkan untuk C atau C ++ (yang hampir tidak memiliki dukungan runtime sama sekali).
  5. Penerapan aplikasi terbatas. Kadang-kadang membutuhkan instalasi JVM atau CLR adalah pembunuhan besar-besaran jika seluruh program Anda hanya beberapa ratus KB. (Misalnya, sebagian besar program yang saya kerjakan harus digunakan sebagai .EXEfile tunggal tanpa jenis pemasang apa pun atau semacamnya; untuk ini tidak ada alternatif lain)
Billy ONeal
sumber
2
Latensi pemula bukan satu-satunya jenis latensi yang perlu diperhatikan: Persyaratan waktu nyata yang sulit bisa menjadi pelopor yang jauh lebih besar.
greyfade
1
Tambahkan apa pun di mana Anda tidak ingin dikunci ke pembuat tertentu (C # atau Objective-C) atau tidak ingin bahasa Anda menghilang ke sekelompok gugatan (Jawa)
Martin Beckett
@ Greyfade: Itu yang saya maksud dengan (2), tapi saya setuju itu tidak jelas. Diedit. @ Martin: Walaupun saya pikir itu adalah kekuatan yang baik untuk C ++, saya tidak berpikir itu menjawab pertanyaan - yang mana di pasar apa C ++ biasa digunakan. Juga saya tidak berpikir saya akan memanggil C # dikunci untuk pembuat tertentu ketika <S> BSD </S> (OOPS: Ini LGPL) versi CLR berlisensi ada (mono).
Billy ONeal
1
Juga 5. Sistem operasi dan kerangka kerja inti. Anda dapat melakukan banyak hal di mesin virtual, tetapi mesin virtual masih harus diimplementasikan dalam C dan / atau C ++.
Jan Hudec
1
@ Jan: Ya itu akan. Hal-hal seperti refleksi dan teman-teman akan memicu masalah 2-4. Satu-satunya himpunan bagian Anda benar-benar perlu menulis pengumpul sampah adalah beberapa objek yang mewakili memori fisik.
Billy ONeal