Sebagai pengembang Linux (sisi server), saya tidak tahu di mana dan mengapa saya harus menggunakan C ++.
Ketika saya mencari kinerja, pilihan pertama dan terakhir adalah C.
Ketika "kinerja" bukan masalah utama, bahasa pemrograman seperti Perl dan Python akan menjadi pilihan yang baik.
Hampir semua aplikasi open source yang saya tahu di bidang ini telah ditulis dalam C, Perl, Python, skrip Bash, AWK atau bahkan PHP, tetapi tidak ada yang menggunakan C ++.
Saya tidak membahas bidang lain seperti GUI atau aplikasi web, saya hanya berbicara tentang Linux, CLI dan daemon.
Apakah ada alasan memuaskan untuk menggunakan C ++?
Jawaban:
Dan di situlah Anda harus membuat cadangan. Sekarang, saya tidak bisa, sama sekali , berbicara untuk pengembangan server. Mungkin memang tidak ada alasan kuat untuk memilih C ++ daripada alternatif.
Tapi secara umum, alasan untuk menggunakan C ++ daripada bahasa lain memang kinerja. Alasan untuk itu adalah bahwa C ++ menawarkan sarana abstraksi yang, tidak seperti semua bahasa lain yang saya tahu, tidak ada overhead kinerja saat runtime.
Ini memungkinkan penulisan kode yang sangat efisien yang masih memiliki tingkat abstraksi yang sangat tinggi.
Pertimbangkan abstraksi biasa: fungsi virtual, pointer fungsi, dan idiom PIMPL. Semua ini bergantung pada tipuan yang pada saat runtime diselesaikan oleh pointer aritmatika. Dengan kata lain, ini menimbulkan biaya kinerja (betapapun kecilnya).
C ++, di sisi lain, menawarkan mekanisme tipuan yang tidak menimbulkan biaya (kinerja): templat. (Keuntungan ini dibayar dengan waktu kompilasi yang meningkat (terkadang sangat besar).)
Pertimbangkan contoh fungsi sortir generik.
Dalam C, fungsi
qsort
mengambil pointer fungsi yang mengimplementasikan logika dengan mana elemen-elemen diurutkan relatif terhadap satu sama lain.Arrays.sort
Fungsi Java hadir dalam beberapa varian; salah satu dari mereka macam objek sewenang-wenang dan membutuhkanComparator
objek diteruskan untuk itu yang bekerja mirip dengan pointer fungsi dalam Cqsort
. Tetapi ada beberapa kelebihan lainnya untuk tipe Java "asli". Dan masing-masing dari mereka memiliki salinansort
metode sendiri - duplikasi kode yang mengerikan.Java menggambarkan dikotomi umum di sini: Anda memiliki duplikasi kode atau Anda mengalami overhead runtime.
Di C ++,
sort
fungsinya sangat miripqsort
di C, dengan satu perbedaan kecil tapi mendasar: pembanding yang diteruskan ke fungsi adalah parameter templat . Itu berarti bahwa panggilannya dapat digarisbawahi . Tidak perlu tipuan untuk membandingkan dua objek. Dalam lingkaran yang ketat (seperti halnya di sini) ini sebenarnya dapat membuat perbedaan besar.Tidak mengherankan, fungsi C ++
sort
mengungguli Csort
bahkan jika algoritma yang mendasarinya sama. Ini terutama terlihat ketika logika perbandingan sebenarnya murah.Sekarang, saya tidak mengatakan bahwa C ++ adalah apriori yang lebih efisien daripada C (atau bahasa lain), atau apriori yang menawarkan abstraksi yang lebih tinggi. Apa yang ditawarkannya adalah abstraksi yang sangat tinggi dan sangat murah pada saat yang bersamaan sehingga Anda sering tidak perlu memilih antara kode yang efisien dan yang dapat digunakan kembali.
sumber
Arrays.sort
implementasi Java ). Hanya Anda yang kehilangan keunggulan dari abstraksi tinggi. Ini bukan kerugian spesifik dari template, ini adalah kerugian dari duplikasi kode secara umum. Selain itu, ini cenderung tidak menjadi masalah karena dalam loop ketat, biasanya selalu kode yang sama yang dimuat.vector.push_back
untukvector<int>
, dan yang lain untukvector<float>
, tetapi saat bekerja denganvector<int>
, ada sedikit alasan mengapavector<float>
kode tersebut berada dalam cache instruksi. Jadi saya tidak melihat bagaimana itu benar-benar penting. Setiap instantiasi template individual sangat dioptimalkan dan biasanya lebih kompak daripada implementasi catch-all genericSaya melihat terlalu banyak programmer C yang membenci C ++. Butuh beberapa waktu (bertahun-tahun) untuk perlahan memahami apa yang baik dan apa yang buruk tentang itu. Saya pikir cara terbaik untuk mengungkapkannya adalah ini:
Lebih sedikit kode, tidak ada overhead run-time, lebih aman.
Semakin sedikit kode yang kita tulis, semakin baik. Ini dengan cepat menjadi jelas di semua insinyur yang berjuang untuk keunggulan. Anda memperbaiki bug di satu tempat, tidak banyak - Anda mengekspresikan algoritma sekali, dan menggunakannya kembali di banyak tempat, dll. Orang Yunani bahkan memiliki pepatah, ditelusuri kembali ke Spartan kuno: "untuk mengatakan sesuatu dengan sedikit kata, berarti bahwa Anda bijak tentang hal itu ". Dan faktanya, adalah bahwa ketika digunakan dengan benar , C ++ memungkinkan Anda untuk mengekspresikan diri Anda dalam kode yang jauh lebih sedikit daripada C, tanpa biaya kecepatan runtime, sementara lebih aman (yaitu menangkap lebih banyak kesalahan pada waktu kompilasi) daripada C.
Berikut ini contoh sederhana dari penyaji saya : Saat menginterpolasi nilai piksel melintasi garis pindai segitiga. Saya harus mulai dari koordinat X x1, dan mencapai koordinat X x2 (dari kiri ke sisi kanan segitiga). Dan di setiap langkah, di setiap piksel yang saya lewati, saya harus menginterpolasi nilai.
Saat saya menginterpolasi cahaya sekitar yang mencapai piksel:
Ketika saya menginterpolasi warna (disebut shading "Gouraud", di mana bidang "merah", "hijau" dan "biru" diinterpolasi oleh nilai langkah di setiap piksel):
Ketika saya membuat warna "Phong", saya tidak lagi menyisipkan intensitas (ambientLight) atau warna (merah / hijau / biru) - Saya menginterpolasi vektor normal (nx, ny, nz) dan pada setiap langkah, saya harus kembali -menghitung persamaan pencahayaan, berdasarkan vektor normal yang diinterpolasi:
Sekarang, insting pertama programmer C adalah "heck, tulis tiga fungsi yang menginterpolasi nilai-nilai, dan memanggil mereka tergantung pada mode yang ditetapkan". Pertama-tama, ini berarti saya memiliki masalah tipe - apa yang saya kerjakan? Apakah piksel saya PixelDataAmbient? PixelDataGouraud? PixelDataPhong? Oh, tunggu, programmer C yang efisien mengatakan, gunakan serikat pekerja!
..dan kemudian, Anda memiliki fungsi ...
Apakah Anda merasakan kekacauan itu menyelinap masuk?
Pertama-tama, satu kesalahan ketik adalah semua yang diperlukan untuk mem-crash kode saya, karena kompiler tidak akan pernah menghentikan saya di bagian "Gouraud" dari fungsi, untuk benar-benar mengakses ".a." nilai (ambient). Bug yang tidak ditangkap oleh sistem tipe C (yaitu, selama kompilasi), berarti bug yang bermanifestasi pada saat run-time, dan akan membutuhkan debugging. Apakah Anda memperhatikan bahwa saya mengakses
left.a.green
dalam perhitungan "dgreen"? Kompiler pasti tidak memberi tahu Anda.Lalu, ada pengulangan di mana-mana -
for
loop ada di sana sebanyak yang ada mode rendering, kami terus melakukan "kanan minus kiri dibagi dengan langkah-langkah". Jelek, dan rawan kesalahan. Apakah Anda perhatikan saya membandingkan menggunakan "i" di loop Gouraud, padahal seharusnya saya menggunakan "j"? Kompiler sekali lagi, diam.Bagaimana dengan if / else / ladder untuk mode? Bagaimana jika saya menambahkan mode rendering baru, dalam tiga minggu? Akankah saya ingat untuk menangani mode baru di semua "jika mode ==" di semua kode saya?
Sekarang bandingkan keburukan di atas, dengan rangkaian C ++ structs dan fungsi templat ini:
Sekarang lihat ini. Kami tidak lagi membuat sup jenis persatuan: kami memiliki jenis khusus per setiap mode. Mereka menggunakan kembali barang-barang umum mereka (bidang "x") dengan mewarisi dari kelas dasar (
CommonPixelData
). Dan templatnya membuat kompilator MENCIPTAKAN (yaitu, menghasilkan kode) tiga fungsi berbeda yang akan kita tulis sendiri dalam C, tetapi pada saat yang sama, menjadi sangat ketat tentang jenisnya!Perulangan kami di templat tidak dapat membuang waktu dan mengakses bidang yang tidak valid - kompiler akan menggonggong jika kami melakukannya.
Template melakukan pekerjaan umum (loop, meningkat dengan "langkah" di setiap waktu), dan dapat melakukannya dengan cara yang TIDAK BISA menyebabkan kesalahan runtime. Interpolasi per jenis (
AmbientPixelData
,GouraudPixelData
,PhongPixelData
) dilakukan denganoperator+=()
yang kita akan menambahkan dalam struct - yang pada dasarnya menentukan bagaimana masing-masing jenis interpolasi.Dan apakah Anda melihat apa yang kami lakukan dengan WorkOnPixel <T>? Kami ingin melakukan pekerjaan yang berbeda per jenis? Kami cukup memanggil spesialisasi templat:
Artinya - fungsi untuk memanggil, diputuskan berdasarkan jenisnya. Pada waktu kompilasi!
Untuk mengulanginya lagi:
WorkOnPixel
versi, kode C ++ akan LEBIH CEPAT daripada C, karena kompiler akan menyejajarkanWorkOnPixel
spesialisasi templat jenis-spesifik panggilan!Lebih sedikit kode, tidak ada overhead run-time, lebih aman.
Apakah ini berarti bahwa C ++ adalah bahasa be-all dan end-all? Tentu saja tidak. Anda masih harus mengukur trade-off. Orang yang bodoh akan menggunakan C ++ ketika mereka seharusnya menulis skrip Bash / Perl / Python. Pemula-senang C ++ pemula akan membuat kelas bersarang mendalam dengan beberapa warisan virtual sebelum Anda dapat menghentikan mereka dan mengirim mereka berkemas. Mereka akan menggunakan meta-pemrograman Boost yang kompleks sebelum menyadari bahwa ini tidak perlu. Mereka akan MASIH menggunakan
char*
,strcmp
dan makro, bukanstd::string
dan template.Tapi ini tidak lebih dari ... awasi dengan siapa kamu bekerja. Tidak ada bahasa untuk melindungi Anda dari pengguna yang tidak kompeten (tidak, bahkan Java).
Terus belajar dan menggunakan C ++ - hanya saja jangan overdesign.
sumber
RAII untuk bayi yang menang.
Serius, kehancuran deterministik dalam C ++ membuat kode lebih jelas dan lebih aman tanpa overhead sama sekali.
sumber
Templat dan STL. Anda menukar sedikit waktu pembuatan (dan beberapa pesan kesalahan yang berpotensi tidak dapat dipahami) dengan banyak abstraksi yang berguna dan alat hemat tenaga kerja, tanpa hit performa run-time yang lumayan (meskipun jejak biner mungkin sedikit lebih besar).
Butuh beberapa saat untuk membungkus kepala Anda (butuh saya beberapa tahun sebelum diklik), tetapi begitu Anda melakukannya dapat membuat hidup jauh lebih sederhana.
Pemrosesan teks dalam C ++ adalah urutan besarnya kurang menyakitkan daripada di C.
sumber
Iya.
Jika Anda mencari efisiensi yang dapat dieksekusi, Anda turun ke C atau C ++, jadi saya akan fokus pada hal itu.
Bahkan sebelum template umum, saya lebih suka menggunakan C ++ daripada C untuk jenis executable yang Anda bahas pada awal 1990-an karena dua alasan yang sangat sederhana: objek polimorfisme dan RAII .
Saya telah menggunakan objek C ++ polimorfik untuk semua jenis hal menarik. Sebagai contoh, saya sedang mengerjakan sistem Linux tertanam dengan overlay frame buffer pada OMAP dan XScale ARM CPU. Kedua arsitektur perangkat keras memiliki fitur overlay yang berbeda dengan API yang sangat berbeda. Saya menggunakan kelas dasar "Overlay" virtual umum untuk mengekspos tampilan overlay yang diidealkan, dan kemudian menulis kelas "OmapOverlay" dan "XScaleOverlay" yang dipakai secara tepat saat runtime, tergantung pada arsitektur mana kode yang terdeteksi menjalankannya.
Untuk menyederhanakan terlalu banyak, RAII adalah gagasan bahwa Anda mengalokasikan sumber daya yang terhubung ke objek selama konstruktor objek, atau mungkin nanti dalam masa hidup objek, dan sumber daya mendapatkan deallocated atau dirilis dalam destruktor objek. Itu sangat bagus di C ++, karena objek yang merupakan variabel otomatis dihancurkan ketika mereka keluar dari ruang lingkup. Untuk seseorang yang sama kompeten dalam C dan C ++, jauh lebih mudah untuk menghindari kebocoran sumber daya dan memori di C ++. Anda juga tidak melihat banyak kode C ++ dengan meme C yang sangat umum dari sebuah label di akhir fungsi yang mendahului sekelompok panggilan
free()
, dan berbagaigoto
blok fungsi melompat di sana.Saya sepenuhnya sadar bahwa Anda dapat melakukan semua hal ini dengan C - hanya saja lebih banyak pekerjaan, lebih banyak baris kode, dan apa yang Anda dapatkan jauh lebih jelek dan seringkali lebih sulit untuk dipahami. Ada kode polimorfisme di seluruh internal server X , dan man, apakah itu jelek dan aneh dan sering sulit dilacak.
Saya juga melakukan banyak pekerjaan dengan teknologi GNOME seperti GTK + dan Clutter, yang semuanya ditulis dalam C menggunakan sistem GObject. GObject seperti sistem objek C ++ dengan penutup yang bagus dilepas dan semua internal yang jelek terbuka, dan biasanya membutuhkan setengah lusin baris kode untuk melakukan apa yang akan dilakukan pemanggilan metode C ++ satu baris. Saat ini saya sedang menulis beberapa
ClutterActors
, dan sementara matematika benar-benar menarik, saya terus-menerus berpikir, "Ini semua akan menjadi jauh lebih ringkas dan mudah dipahami dalam C ++".Saya juga sering berpikir, "Anda tahu, jika saya menulis ini dalam C ++ bukannya C, saya akan keluar di ruang tamu menonton MythBusters bersama istri saya alih-alih duduk di kantor saya pada jam 9 malam."
sumber
C ++ hampir secepat C (beberapa hal lebih cepat, beberapa lebih lambat), dan ia menawarkan abstraksi dan organisasi yang lebih baik. Kelas bekerja sama dengan tipe primitif, memungkinkan sejumlah besar kode untuk digunakan tanpa dipikirkan. Overloading dan template operator memungkinkan untuk menulis kode yang berfungsi lebih baik jika representasi data berubah. Pengecualian dapat memungkinkan penanganan kesalahan yang lebih mudah. Kompiler dapat digunakan untuk memeriksa lebih banyak barang pada waktu kompilasi.
Harga yang Anda bayar untuk ini adalah kurva belajar yang cukup buruk, dan lebih mudah untuk membuat kesalahan halus di dalamnya daripada kebanyakan bahasa lain yang saya kenal.
Jadi, saya tidak tahu apakah akan bermanfaat bagi Anda untuk mempelajarinya untuk apa yang Anda lakukan sekarang. Anda tentu dapat bertahan dengan kombinasi Python atau Perl dan C, tetapi C ++ menawarkan abstraksi dan kinerja dalam satu paket yang sulit digunakan.
sumber
restrict
digunakan untuk membuat pengecualian dari optimasi alias , jadi bagaimana hal itu membantu membuat segalanya lebih cepat ? dan apa yang dimaksud dengan "parameter array statis"? dan bagaimana "gaya" mempengaruhi kinerja?T (&arr)[n]
ataustd::array<T, n>
- harus meneliti yang ini lagi, karena tidak ada banyak info di luar sana. Itu masuk akal tentang pointer cerdas, jelas contoh yang bagus. Jika pengkodean pada bidang bermain yang sama, kami tidak akan menggunakan pengecualian, jadi tidak ada biaya potensial yang akan dikeluarkan ... namun saya menduga Anda mungkin menyinggung bagaimana, begitu perpustakaan pihak ketiga memasukkan gambar, banyak asumsi beresiko.Saya menganggap C ++ sebagai bahasa tahun 1990-an, bahasa di masa lalu.
Saat itu besar karena menawarkan konstruksi dan mekanisme bahasa tingkat tinggi dengan biaya yang lebih rendah dalam hal kinerja. Itu adalah alat universal untuk mengembangkan segala sesuatu dari aplikasi buku alamat hingga perangkat lunak avionik, dan yang mengilhami kegilaan OO. OOP mengatasi kelaparan dan AIDS, dan ya, saya menyalahkan C ++ karena mencoba mencuci otak saya pada akhir 1990-an ketika saya pertama kali memulai pemrograman bahwa bahasa non-OO tidak layak dipelajari.
Sekarang perangkat keras telah maju begitu banyak dan lebih baru, bahasa modern telah muncul, saya gagal melihat C ++ tetap menjadi pilihan yang relevan untuk sebagian besar pemrograman aplikasi kecuali untuk perangkat lunak intensif komputasi di mana Anda masih memerlukan beberapa abstraksi (permainan, simulasi fisika, sistem CAD, dll. ). Bahkan yang terakhir dapat dihindari jika Anda menulis mesin modular yang ringkas dalam C dan memiliki logika aplikasi tingkat tinggi yang didelegasikan ke bahasa skrip yang rapi.
Jika Anda perlu beralih ke penggunaan logam C secara sehat, dan ketika Anda harus naik tingkat tinggi, lakukanlah dalam bahasa modern yang tidak mengiklankan enkapsulasi sementara Anda dapat dengan bebas mengubah setiap byte melalui pointer.
sumber
Menurut Linus , tidak ada:
sumber
Saya tidak berpikir ada alasan kuat untuk menggunakan C ++. Jika Anda ingin melakukan pemrograman OO, Anda dapat menggunakan Python dan menulis bagian-bagian yang membutuhkan kinerja cepat dalam C.
EDIT: Ada bahasa lain yang berinteraksi dengan baik dengan C, jadi jika Anda tidak suka Python, ada alternatif.
sumber
Apakah ada alasan untuk menggunakan C ++? Pasti.
Beberapa orang mungkin lebih suka menggunakan C ++ daripada opsi lain. Bertanya apakah ada alasan untuk menggunakan C ++ sama seperti bertanya mengapa kita perlu memiliki ratusan rasa es krim. Tidak semua orang suka bertahan dengan Vanilla.
Jika pengembang sudah sangat kompeten dengan C ++, pertanyaan bagi mereka mungkin bukan 'mengapa menggunakannya?', Melainkan 'mengapa tidak?'. Tampaknya ada hal anti-C ++ yang trendi ini terjadi di SO sekarang, tetapi percaya atau tidak, tidak semua orang berlangganan itu. Beberapa orang mungkin hanya menyukai C ++ lebih baik daripada bahasa lain.
Apakah C ++ perlu digunakan untuk aplikasi? Tentu saja tidak. Tetapi pertanyaan yang persis sama ini juga bisa ditanyakan untuk bahasa lain. Ada sangat, sangat sedikit kasus di mana bahasa tertentu perlu digunakan untuk aplikasi.
sumber
Saya hanya beralih dari C ke C ++, dan saya pikir keuntungannya cukup besar, bahkan jika Anda tidak membutuhkan template dan OOP.
sumber
Saya terkejut belum ada yang menyebutkan hal ini, tetapi C ++ memperkenalkan kami pada referensi , yang hampir menyelesaikan semua masalah dan perangkap dari pointer:
Dari pada:
Jauh lebih aman dan lebih mudah juga ... dan tanpa biaya tambahan.
sumber
Di mana dan mengapa biasanya akan menjadi:
Untuk pemrograman sisi server Anda sering dapat memilih dari berbagai bahasa yang berbeda, dikompilasi atau ditafsirkan. Biasanya pilihan bahasa didorong oleh platform yang paling efektif bagi Anda atau tim Anda. Atau jika Anda belum memiliki tim, ketersediaan keterampilan di pasar.
Di samping catatan saya tidak begitu mengerti memutuskan untuk menggunakan C / C ++ berdasarkan kinerja (hanya) karena banyak bahasa skrip dapat diperluas dengan C / C ++. Anda mendapatkan manfaat dari bahasa pengembangan cepat ditambah dengan kemampuan untuk memigrasi bagian lambat ke ekstensi C / C ++. Tentu saja jika Anda melakukan pemrograman sistem di mana setiap ops menghitung itu bisa dimengerti, tetapi dalam sebagian besar pengembangan aplikasi saya tidak mengerti.
sumber
C ++ vs Python vs Perl tidak bisa dinilai dengan mudah. Itu tergantung pada proyek dan persyaratan.
C ++ memiliki gudang utilitas sejak lama, berjalan di banyak platform. Tapi itu menyakitkan untuk mulai berjalan melalui stream untuk hanya melewati String ke Integer dan mundur.
C ++ di sisi lain, memiliki banyak sekali ketergantungan pada perpustakaan. Setelah Anda mengompilasi sesuatu di GCC X atau VC ++ Y, maka Anda tidak dapat mengandalkan bahwa kode akan dijalankan oleh versi berikutnya dari alat-alat itu. Neraka yang sama ada di Windows, neraka yang sama juga ada di Unix.
Perl, mengambil kekuatannya dari dunia Unix tetapi terutama sebagai alat ekspresi reguler. Inilah yang paling sering digunakan. Bersamaan dengan beberapa alat yang cukup serius yang bahkan Java tidak dapat melakukannya dengan cara biasa (lihat cara mengunggah file ke server web), Perl adalah "lakukan saja".
Python mudah, fleksibel, dan bahasa yang dinamis. Sangat mudah bahwa Anda dapat mengirim integer ke suatu fungsi, skrip mengharapkan string, namun Anda dapat memperoleh hasilnya! Meskipun tidak terduga, tetapi hasilnya. Jadi programmer harus sangat berhati-hati. IDLE menawarkan beberapa debugging, tetapi ketika Anda memiliki TELNET ke suatu sistem, atau SSH di tiga tingkat ke bawah dan Anda ingin menemukan masalah Anda, debugger tidak akan ada di sana untuk berdiri di samping Anda. Tapi, itu bisa melakukan beberapa pekerjaan matematika dengan cepat.
Java adalah ekosistem kata kunci, teknologi asing, dan kata-kata besar dan ketika Anda hanya ingin mengunggah file ke server web, Anda dapat melakukannya hanya jika server memiliki JSP . Jika Anda ingin memanggil pustaka sistem atau fungsi-fungsi sistem seperti pemantauan, Anda harus banyak menggali. Dan mungkin untuk mencapai JNI dan OK ... Anda berpikir kemudian ... "Kenapa, Tuhan?"
Terlepas dari itu, Java adalah alat yang hebat untuk suite bisnis, dan multithreading, saya sangat menyukainya.
Cepat membuat program dan menunjukkan ke CV Anda "Oh, saya tahu teknologi itu juga" dan bos Anda yang ingin menjadi, kagum! Meskipun demikian, teknologinya mungkin tidak terlalu dibutuhkan ... (Oke, teman-teman, saya benci Spring Framework ....)
sumber
Hal yang perlu diingat saat memilih bahasa, adalah manfaat apa yang akan Anda dapatkan dari menggunakannya, dan berapa lama untuk mendapatkannya.
Ide utama antara bahasa seperti python dan perl adalah melakukan lebih banyak dengan lebih sedikit waktu kerja, tetapi dengan lebih banyak waktu cpu. Sebenarnya Anda akan menghabiskan lebih banyak waktu coding skrip python atau perl daripada yang akan dieksekusi, tetapi Anda mengerti maksud saya.
Keuntungan C / C ++ adalah mereka cepat, tetapi dengan biaya sintaks dan pengetikan yang kuat: Anda harus melakukan banyak hal sendiri sehingga komputer tidak harus memilihnya pada waktu kompilasi.
Ketika Anda membuat kode, beberapa baris akan dijalankan lebih banyak daripada yang lain, dan baris-baris itu yang menimbulkan masalah. Di sisi lain, semua sisa kode, kode yang banyak Anda habiskan, dieksekusi lebih jarang. Anda mungkin pernah mendengarnya, tetapi itu adalah aturan 80/20 yang terkenal, dan Anda tidak akan dapat mem-bypass aturan tersebut.
Solusi untuk masalah ini, adalah dengan menggunakan bahasa yang lebih mudah (maksud saya lebih mudah lebih ramah pengembang: kurang mengetik, interpretasi malas, banyak rutin dan hal-hal yang sudah ada sebelumnya, dll) untuk melakukan semua kode Anda.
Anda akan melakukannya dengan sangat cepat dibandingkan dengan jika Anda melakukannya dengan C atau C ++, itu akan membutuhkan lebih banyak sakit otak.
Program Anda akan lambat, tetapi dengan profiler, Anda mengisolasi bagian yang berjalan 80% dari waktu, dan Anda melakukannya dengan C atau C ++.
Dengan prorgamming cara ini, Anda menghemat banyak waktu, dan program Anda seefisien, secepat, memiliki lebih sedikit peluang untuk membocorkan memori, dan Anda menghemat waktu.
Bahasa skrip dirancang untuk berada di sisi pengembang, tetapi pengoptimalan masih dimungkinkan. Tentu saja Anda bisa menjadi penyihir pola desain atau voodoo STL atau bahkan seorang prajurit kacangan, dan mungkin seorang biksu haskell. Tetapi bahasa membuat kita berbicara dengan komputer, bahasa tidak dibuat untuk kita MENJADI komputer!
sumber
Linux? Bagaimana dengan "berorientasi objek Pascal" atau "D"?
Saran:
sumber
C ++ yang saya gunakan disebut C dengan kelas!
sumber
Sebenarnya ada satu jawaban untuk semua pertanyaan yang terbentuk seperti ini. Alasan terbaik untuk menggunakan tech X daripada tech Y (di mana X dan Y kira-kira berada pada level yang sama [seperti hampir semua bahasa pemrograman kontemporer]) adalah karena Anda sudah tahu X dan tidak tahu Y.
(tapi setelah Haskell tiba, tidak ada alasan untuk menggunakan hal lain)
sumber
Tidak, tidak sama sekali. Jika Anda tidak membutuhkan kinerja dan ada perpustakaan Anda dapat menggunakan bahasa lain maka jangan repot-repot dengan C / C ++. Saya hanya melakukannya saat ini ketika saya menargetkan sistem tertanam yang tidak dapat (dengan mudah?) Menjalankan bahasa. Terkadang saya menggunakan C karena saya menulis sebuah plugin tetapi sebenarnya tidak.
Namun, saya tidak akan menggunakan Python, Perl, dll untuk menghindari penggunaan C. Preferensi saya sebenarnya adalah C #, karena saya suka perpustakaan yang bagus (yang merupakan kekuatan .NET), dan saya suka bahasa yang diketik secara statis. Boo adalah alternatif yang bagus. Tapi benar-benar Haskell , OCaml , D , ML dan semacamnya baik-baik saja.
sumber