Saya melihat bahwa sebagian besar aplikasi yang menyertakan konten GUI berat biasanya dikembangkan di C ++. Sebagian besar game / browser diberi kode dalam C ++.
Tidak bisakah kita mengembangkan aplikasi GUI yang lebih baik dengan bahasa dinamis terbaru? Saya tahu java tidak akan menjadi pilihan yang bagus. Tapi bagaimana dengan bahasa seperti python yang secara bawaan dibangun di atas C? Bukankah bahasa terbaru seharusnya lebih baik dari nenek moyang mereka? Mengapa kita masih harus memilih C ++ yang lebih tua daripada bahasa terbaru?
Dan saya juga ingin tahu, apa yang bertanggung jawab dalam C ++, untuk kecepatan pemrosesan GUI yang lebih baik? Di sisi lain, apa yang tidak dimiliki oleh bahasa-bahasa terbaru lainnya?
programming-languages
c++
Vamsi Emani
sumber
sumber
Jawaban:
Saya salah satu dari orang-orang yang menulis aplikasi C ++ GUI (kebanyakan untuk windows). Dengan Qt, tepatnya. Alasan saya:
new
, saya jarang melakukandelete
apa pun secara eksplisit, karena saya menggunakan smart pointer atauQObject
hierarki.Seperti yang Anda lihat, ini sebagian besar adalah preferensi pribadi. Saya merasa penting agar pekerjaan saya menyenangkan dan C ++ menyediakannya untuk saya.
sumber
Karena kecepatan itu penting.
Game menggunakan C ++ untuk tugas inti, di mana kinerjanya penting. Mereka menggunakan bahasa dinamis untuk tugas skrip di mana fleksibilitas penting.
Aplikasi Desktop GUI : Visual Studio, misalnya, ditulis dalam .NET dan bukan asli C ++. Tampaknya bekerja cukup baik untuk suatu IDE, karena IDE itu sendiri tidak perlu melakukan banyak tugas kinerja yang intensif. (Kompiler, tautan, dan alat-alat lain tidak harus ditulis dalam .NET - meskipun seperti yang ditunjukkan oleh wawa dalam komentar, beberapa tampaknya (misalnya VB.NET))
Browser juga harus cepat. Lagi pula mereka semacam OS sekunder. Di sisi lain, Anda dapat berargumen bahwa sebagian besar Firefox sebenarnya "ditulis dalam" javascript, karena kerangka kerja Mozilla tampaknya sangat bergantung pada javascript.
Singkatnya: Saya tidak akan mengatakan C ++ lebih disukai tetapi jika Anda memiliki hambatan kinerja Anda harus lebih dekat ke logam dan kemudian Anda bertemu C ++ (well, atau C). Kadang-kadang hanya akan lebih mudah untuk melakukan semuanya dalam C ++ - satu bahasa.
sumber
Aplikasi GUI yang Anda lihat tertulis dalam C ++ umumnya dilakukan karena alasan warisan. Python (dengan Qt atau Gtk) sangat memungkinkan untuk aplikasi GUI, seperti halnya C # jika Anda bekerja di rumah Windows. Ketika memulai sesuatu yang baru, baik yang sangat jauh lebih suka C ++ karena kurangnya pipa pekerjaan yang harus dilakukan.
sumber
Karena tidak peduli berapa banyak tes kinerja .NET dan sejenisnya menunjukkan, tidak peduli seberapa dekat mereka datang dalam tolok ukur, pada akhirnya, aplikasi C ++ keluar di atas. Lebih cepat saat boot dingin, lebih cepat, dan memiliki lebih banyak cara untuk ditingkatkan.
Saya telah mendengar banyak bukti di fase awal proyek bahwa .NET adalah cara untuk pergi, tetapi setelah itu dipilih, mereka selalu berakhir dengan dendam berat.
Juga, C ++ saat ini cukup aman dan cukup mudah digunakan, terutama dengan kerangka kerja seperti Qt atau WTL.
sumber
Sebagian besar mesin gim dikodekan dalam C ++. Juga banyak mesin peramban yang dikodekan dalam C ++. Tetapi browser GUI sering dikodekan menggunakan beberapa skrip ringan (JavaScript, Python). Dengan pengecualian dari Source Engine, kebanyakan mesin game juga menggunakan bahasa scripting (seperti Lua atau Python). [untuk referensi: daftar game yang ditulis Lua ]
Juga ambil pustaka C ++ GUI populer seperti Qt. Dalam versi saat ini (4.7) menggunakan QML untuk GUI. QML pada dasarnya adalah JavaScript dengan binding Qt.
Jadi benar-benar tidak ada bahasa C ++ vs dinamis, itu campuran.
sumber
Alasan pertama adalah: kebiasaan (lama)
Alasan kedua: lebih sedikit keandalan pada Mesin Virtual, juru bahasa yang perlu diinstal, dll.
Dan masih ada beberapa IDE yang bagus untuk mengembangkan kode di C ++.
sumber
Alasannya adalah Anda memiliki kendali lebih besar atas semua yang terjadi. Jika Anda akan menulis photoshop di C #, Anda akan memiliki masalah kinerja yang serius untuk beberapa tugas. Dalam bahasa tingkat rendah dengan lebih banyak kontrol, Anda dapat mengambil jalan pintas, mengoptimalkan di mana diperlukan untuk hal-hal yang lebih intens. Tentu saja ini mengasumsikan Anda menggunakan C ++ dalam kode yang tidak dikelola, bukan C ++ di .NET.
Lihat di sini untuk contoh cepat.
sumber
C ++ diketik secara statis. Ini memungkinkan untuk mengoptimalkan eksekusi kode sebelumnya dengan memiliki kompiler yang sesuai dengan abstraksi Anda untuk proses sistem yang tersedia pada platform tertentu. Hingga kini, bahasa dinamis memerlukan lapisan perangkat lunak tambahan (= penerjemah) yang memperlambat akses ke sumber daya sistem.
sumber
Sebagian besar alasan yang diberikan adalah teknis atau "di atas meja" ... berikut adalah alasan bisnis atau "di bawah meja":
mendistribusikan kode yang dikompilasi vs mendistribusikan kode sumber. ketika mengembangkan c / c ++ Anda mendistribusikan binari. jika Anda berkembang dalam salah satu bahasa modern, Anda mendistribusikan sumbernya. sulit untuk menjual ide obfuscator kepada manajemen yang harus menjawab kepada pemegang saham / investor jadi jangan repot-repot.
pengguna bodoh: setidaknya di benak manajemen. mereka masih menganggap pengguna mereka nyaris tidak dapat mengklik dua kali "setup.exe". Jika Anda memasukkan instalasi juru bahasa sebagai bagian dari pengaturan, mereka akan menggelengkan kepala mereka dari sisi ke sisi.
pengembang lama: kebanyakan orang dengan pengalaman sudah ada sejak lama, dan belum memperbarui diri. mereka memprogram dalam C ++ dan bukan dalam bahasa yang lebih baru, karena mereka tidak tahu bahasa yang lebih baru.
sumber
Saya akan memperluas cakupan masalah dari GUI ke perangkat lunak yang diharapkan kompetitif. C ++ tidak mengenakan pajak pada platform target karena menyangkut kekuatan pemrosesan, runtime yang diinstal, kerangka kerja dll. Jadi itu akan bekerja pada perangkat keras pelanggan yang lebih terbatas daripada solusi serupa yang ditulis dalam bahasa yang dikelola / ditafsirkan. Dalam kasus perangkat lunak komersial yang sukses, biaya pengembangan (berpotensi lebih tinggi dalam kasus C ++) diamortisasi dengan jumlah penjualan.
Selain itu, C ++ biasanya menawarkan akses langsung ke sistem apis (seperti GUI) yang memberikan peluang terbaik untuk mengoptimalkan pemanfaatan dan membedakan dirinya dari solusi serupa.
sumber
Saya pikir banyak yang harus dilakukan dengan API untuk toolkit GUI. Semua dari mereka memiliki C / C ++ API, tetapi tidak semua dari mereka memiliki (katakanlah) binding Python. Dan kadang-kadang toolkit sendiri ditulis dengan C ++ dalam pikiran, jadi bahkan jika mereka memiliki dukungan untuk bahasa lain mereka tidak sepenuhnya mendukung mereka (misalnya, mereka tidak akan mendukung Python
tuple
sebagai argumen).sumber
Anda menyebut peramban dan permainan sebagai contoh. Keduanya adalah aplikasi yang cukup penting untuk kinerja, sehingga membuatnya dalam bahasa tingkat rendah untuk kecepatan masuk akal.
Banyak aplikasi lain yang kurang terikat kinerja dan dapat dengan mudah ditulis dalam bahasa lain. C # khususnya tampaknya banyak digunakan. (Dan Obj-C, tapi itu tidak benar-benar memenuhi syarat sebagai tingkat tinggi kurasa. Lebih baik daripada C ++.)
Namun, ada beberapa kerangka kerja untuk bahasa pemrograman terbaru. Misalnya, tidak ada perpustakaan GUI asli yang layak untuk Python, sungguh. Tentu, Anda dapat menggunakan PyQt atau PyGtk dan mereka bekerja dengan baik, tetapi pada akhirnya, itu hanya berinteraksi dengan kode C lagi. Sekali lagi, C # (dan bisa dibilang Obj-C) tampaknya menjadi pengecualian dan mungkin, MacRuby atau IronPython dapat mengubah permainan itu.
sumber
Agar suatu bahasa dapat menggantikan C ++ atau Java, ia harus melakukan apa yang sangat dirindukan dalam bahasa-bahasa ini selain tampil dengan kekuatan mereka sendiri. Juga, investasi besar telah masuk ke dalam bahasa-bahasa ini. Itu berarti ada pustaka C ++ standar pada banyak platform, yang dapat dengan mudah digunakan browser, permainan, dan program semacam itu. Jadi pasti ada beberapa inersia. Bahasa cenderung lepas landas secara perlahan tidak seperti perangkat lunak lain.
Jika Anda melihatnya, Anaconda (program penginstal RedHat) telah ada selama sekitar 10 tahun, ditulis dengan Python sejak awal. Python tidak sepopuler ini ketika Anaconda masih baru.
Google's Go (golang.org) berkembang sangat cepat. Kompiler belum di-bootstrap. Agar popularitasnya lepas landas, perpustakaannya harus stabil, compiler harus di-bootstrap, dan, lebih banyak orang harus menggunakannya. Saya telah mendengar satu program produksi di luar Google ditulis dalam Go dan dilaporkan tidak memiliki waktu istirahat dalam waktu lebih dari setahun.
sumber