Saya sedang mempertimbangkan untuk menulis produk perangkat lunak baru. Kinerja akan menjadi sangat penting, jadi saya waspada menggunakan bahasa yang ditafsirkan atau bahasa yang menggunakan lapisan emulasi (baca java).
Yang membuat saya berpikir untuk menggunakan C (atau C ++) namun keduanya agak panjang di gigi. Saya sudah lama tidak menggunakan keduanya. Saya pikir dalam 20 tahun terakhir seseorang mungkin telah menciptakan sesuatu yang cukup populer, baik untuk dikodekan dan dikompilasi.
Apa alternatif yang lebih modern yang ada untuk C untuk menulis kode kompilasi kinerja tinggi?
Jika C ++ adalah binatang yang berbeda dari 15 tahun yang lalu, saya akan mempertimbangkannya, saya kira saya memiliki asumsi bahwa ia memiliki beberapa masalah yang melekat.
Parallelisation akan menjadi penting, tetapi mungkin tidak di beberapa mesin.
sumber
Jawaban:
Ada bahasa dalam pengembangan yang disebut The Rust Programming Language yang mengejar tujuan yang sama seperti C ++, terutama abstraksi tanpa biaya dan kontrol yang baik atas manajemen memori. Yang mengatakan, itu mungkin kandidat mendatang yang paling menonjol meskipun masih sangat muda.
Selain Rust, sebenarnya tidak ada alternatif populer lain yang mengkompilasi ke kode asli. Ada Delphi dan D juga, tentu saja, tetapi mereka tidak secepat, populer atau digunakan. Bahasa Google Go bisa menjadi kandidat, tetapi masih sangat muda dan bertujuan untuk domain yang sedikit berbeda.
Namun, perlu dicatat bahwa C # (dengan asumsi platform Microsoft) dan Java mungkin tidak terlalu lambat meskipun mereka berjalan di atas mesin virtual; kompilasi kode just-in-time dapat melakukan beberapa optimisasi yang tidak dapat diterapkan oleh kompiler tradisional sebelumnya karena kurangnya informasi tentang keadaan dan lingkungan program.
Terus terang saya pribadi tidak akan menganggap C sebagai kandidat jika C ++ adalah pilihan, terutama karena fakta bahwa C ++ modern lebih aman, bekerja pada tingkat abstraksi yang lebih tinggi, lebih ekspresif dan secara praktis tidak memiliki kehilangan kinerja lebih dari C (dalam beberapa kasus C ++ khususnya lebih cepat). Sederhananya, C ++ menyediakan semua yang disediakan C dan banyak lagi. Sebagian besar fungsi C dianggap "usang" dan alternatif yang lebih baik, lebih aman, lebih cepat dan lebih intuitif disediakan oleh pustaka standar C ++.
sumber
Ada juga Ada , yang mengkompilasi ke kode asli, dan portabel di berbagai platform dalam batas-batas dari perpustakaan standar. Bahasa ini hidup dan sehat, dengan pembaruan standar bahasa terbaru saat ini sedang berlangsung (dikenal sebagai Ada 2012).
Ringkasan cepat untuk mereka yang tidak terbiasa dengan Ada:
sumber
15 tahun yang lalu, tidak ada standar C ++. Yang kedua telah diterbitkan tahun lalu. Praktik terbaik C ++ berubah banyak dalam 5 tahun setelah penerbitan standar 98, dan mereka berubah lagi dengan penerbitan 11 standar.
sumber
Mengapa orang selalu bersikeras mencari bahasa baru?
C ++:
Satu-satunya kelemahan C ++ adalah Anda harus belajar sedikit. Itu dia.
Bandingkan dengan bahasa lain yang merupakan satu atau lebih dari:
IMHO, semakin sedikit bahasa yang akan kita gunakan dan dukung, semakin baik situasinya.
Hal ini menyebabkan perbaikan otomatis dalam kerangka kerja untuk bahasa, dukungan, dokumentasi, kerja komite standardisasi, buku yang lebih baik, lebih banyak pengetahuan, lebih mudah untuk mendukung perangkat lunak, pola yang lebih baik, siklus dukungan bahasa yang lebih lama dan kode yang lebih terampil yang ditulis dalam bahasa tersebut.
Saya tahu orang-orang akan downvote ini, tetapi pikirkanlah, sungguh.
sumber
const
masalah kebenaran dan hal-hal seperti itu. Siapa pun yang telah membaca C ++ Efektif (seperti yang diklaim oleh Coder) dan menyatakan bahwa C ++ itu mudah, memiliki mental disconnect.C / C ++ agak panjang di gigi .... ini adalah hal yang baik . Ini menyiratkan bahwa mereka dirancang cukup baik (ahem) sehingga mereka masih sangat bermanfaat, bahwa banyak orang menggunakannya untuk tugas sehari-hari, dan bahwa Anda akan menemukan sejumlah besar pengembang yang ahli dalam hal itu. Kedewasaan adalah sesuatu yang harus dihargai.
Jika Anda menghabiskan seluruh waktu Anda untuk mencari sesuatu yang baru, hanya karena itu baru dan karena itu pikir itu entah bagaimana harus lebih baik, Anda berada dalam banyak kekecewaan. Ini berlaku untuk bahasa perangkat lunak, sistem GUI (perhatikan, Microsoft dan Gnome) dan kekasih (perhatikan, wanita muda :))
Sekarang diakui, jika pengalaman Anda C + + adalah 20 tahun, ketika kode C ++ umumnya dikodekan seperti C, maka mungkin saatnya untuk mengevaluasi kembali bahasa, semua fitur yang ada di hari yang tidak pernah cukup digunakan digunakan lebih banyak hari ini, dan beberapa upaya standardisasi telah sedikit memperluas bahasa untuk membuatnya tampak jauh berbeda dari perkembangan gaya C lama. Bukan berarti C buruk juga - itu bahasa yang sempurna untuk banyak jenis tugas pengkodean juga!
sumber
Standar saat ini dari C ++ adalah C ++ 11 , yang diterbitkan pada tahun 2011. Jadi itu bukan standar 20 tahun. Dan ada banyak standar di antaranya. Masing-masing dari mereka memperkenalkan banyak peningkatan kinerja.
Compiler juga terus meningkat. Mereka jauh lebih baik dalam mengoptimalkan, daripada dulu.
Format yang dapat dieksekusi juga meningkat, 20 tahun yang lalu Anda memiliki a.out , sekarang Anda memiliki ELF .
Secara keseluruhan, saran bahwa C ++ tidak berubah dalam 20 tahun tidak bisa jauh dari kebenaran.
Juga, perlu diingat, bahwa C dan C ++ adalah bahasa yang sangat berbeda.
sumber
Saya bukan ahli besar bahasa ini, tapi saya pikir OCaml bisa menjadi pilihan yang menarik untuk dilihat.
OCaml adalah bahasa yang dikompilasi, fungsional / berorientasi objek. Untuk perbandingan kinerja dengan C ++ lihat perbandingan C ++ vs OCaml: Ray tracer . Tentu saja, ini adalah contoh yang sangat spesifik dan seseorang harus melakukan pengujian yang lebih luas untuk memiliki perasaan yang lebih baik terhadap kinerja OCaml.
sumber
Tergantung pada apa yang akan dilakukan produk Anda. Jika kinerja benar-benar kritis, maka pilihan bahasa masuk masih FORTRAN . Saya juga tidak akan mengesampingkan Jawa - itu digunakan dalam banyak aplikasi perdagangan keuangan volume tinggi. Erlang patut dilihat jika domain masalah Anda memerlukan konkurensi tinggi. Objective-C bagus, meskipun saya tidak tahu seberapa baik didukung di luar ekosistem Apple (di luar kompiler dan runtime dasar). Saya juga mendengar hal-hal baik tentang kinerja Haskell, tetapi saya tidak yakin apakah itu kinerja absolut atau hanya kinerja relatif terhadap bahasa fungsional lainnya.
sumber
Ketika Anda mengatakan proyek Anda sensitif terhadap kinerja, maksud Anda setiap baris kode itu? Atau, seperti biasa, apakah ada persentase yang lebih kecil yang kinerja kritis sedangkan sisanya adalah menjalankan biasa dari kode bisnis pabrik?
Setelah Anda menjawab itu, apa risiko lebih besar untuk proyek Anda: bahwa hasil akhirnya terlalu lambat, atau bahwa Anda tidak pernah menyelesaikannya sejak awal?
Dengan asumsi Anda menjawab yang kedua untuk keduanya, Anda harus mengembangkan bahasa tingkat yang lebih tinggi yang mendukung interop asli (Python, Ruby, .Net Family semuanya memiliki ini). Pertama, selesaikan proyek. Kemudian profil, optimalkan, bilas, ulangi. Hanya setelah itu, pertimbangkan untuk menulis ulang segmen pilihan aplikasi Anda dalam kode asli dan mengintegrasikan kode asli itu dengan produk jadi Anda.
sumber
Vala mirip dengan Java dan C #, mengkompilasi ke kode asli (atau kode sumber C jika Anda suka), dan sangat cepat . Memang membutuhkan GLib untuk bit berorientasi objeknya, dan itu ditulis oleh peretas Linux untuk peretas Linux, jadi jika domain Anda adalah Windows, itu mungkin tidak terlalu baik.
sumber
Objective-C adalah alternatif kompilasi modern untuk C lurus dan C ++. Ia memiliki manajemen memori yang dikumpulkan dan deterministik serta runtime OO penyaluran pesan telah dioptimalkan untuk kinerja.
Ini tersedia melalui GCC dan CLang dan ada perpustakaan aplikasi seperti GNUStep dan Cocotron yang bekerja pada berbagai platform.
Jika Anda melakukan pekerjaan berkinerja tinggi, saya akan berasumsi bahwa itu semacam kerja menghitung angka atau membagi-dan-menaklukkan lainnya alih-alih UI, sehingga itu berarti Anda bisa melakukan UI dalam bahasa apa pun yang paling mudah bagi Anda, mis. HTML via server http mini.
sumber
Saya tidak pernah menggunakannya, tetapi seorang teman saya bersumpah oleh Cython yang memungkinkan Anda menggunakan primitif gaya C di bagian-bagian penting kinerja kode Anda sambil menjaga sintaksis python umum dan mampu mengambil keuntungan penuh dari ular python tingkat tinggi untuk membangun pembangunan waktu di tempat lain.
sumber