Pemrograman desktop lintas platform: C ++ vs. Python [ditutup]

11

Baiklah, untuk memulai, saya memiliki pengalaman sebagai programmer amatir Obj-C / Cocoa dan Ruby w / Rails. Ini bagus, tetapi mereka tidak terlalu membantu untuk menulis aplikasi lintas platform (semoga GNUStep suatu hari nanti akan cukup lengkap untuk yang pertama menjadi multi platform, tetapi hari itu bukan hari ini).

C ++, dari apa yang bisa saya kumpulkan, sangat kuat tetapi juga raksasa, jelek besar yang bisa memakan waktu setengah dekade atau lebih untuk dikuasai. Saya juga membaca bahwa Anda dapat dengan mudah tidak hanya menembak diri sendiri di kaki, tetapi meledakkan seluruh kaki Anda karena manajemen memori semuanya manual. Jelas, ini semua sangat menakutkan. Apakah itu benar?

Python tampaknya memberikan sebagian besar kekuatan C ++ dan jauh lebih mudah untuk diambil dengan mengorbankan kecepatan. Seberapa besar pengorbanan ini? Apakah ini bermakna atau dapatkah diabaikan?

Yang mana yang membuat saya menulis aplikasi yang cepat, stabil, dan sangat andal dalam jumlah waktu yang wajar?

Juga, apakah lebih baik menggunakan Qt untuk UI Anda atau malah mempertahankan ujung depan asli yang terpisah untuk setiap platform?

EDIT: Untuk kejelasan ekstra, ada dua jenis aplikasi yang ingin saya tulis: satu adalah basis data yang sangat ramah dan nyaman dan yang lainnya, yang tidak diragukan lagi akan datang kemudian, adalah editor dunia 3D.

John Wells
sumber
Anda mengajukan pertanyaan yang jawabannya akan sangat subyektif - IMHO itu tidak konstruktif, sehingga memberikan suara untuk ditutup. Anda juga mengajukan setidaknya 4 pertanyaan berbeda dalam satu pertanyaan. Bagaimana orang lain tetapi Anda tahu apakah C ++ atau Python adalah pilihan yang lebih baik untuk Anda ? Saya sarankan Anda mencoba untuk membangun aplikasi GUI kecil dengan Python (yang seharusnya membawa Anda tidak lebih dari sehari), dan aplikasi yang sama dengan C ++, dan bandingkan sendiri.
Doc Brown
Saya kira apa yang sebenarnya saya coba tanyakan diberikan apa yang saya cari, yang secara obyektif merupakan pilihan yang lebih baik?
John Wells
Bisakah Anda memberikan beberapa konteks tambahan - apa yang perlu dilakukan aplikasi desktop Anda? Banyak matematika? Aplikasi produktivitas? Akses basis data? Permainan?
JBRWilkinson
Menambahkan edit untuk menjelaskan yang ingin saya lakukan.
John Wells
Saya akan memilih untuk menggunakan bahasa yang sama dengan sistem operasi dan / atau pustaka GUI. Anda dapat melakukan lebih banyak manipulasi mendalam ke UI dengan lebih mudah. Coba simulasikan sesuatu yang sederhana seperti layar penuh (tekan F11 di browser Anda) di bahasa tingkat tinggi seperti Java atau C #. Saya mengistirahatkan koper saya. Solusi asli portabel untuk berbagai perangkat yang lebih luas daripada solusi tingkat tinggi seperti java (ironisnya).
Lord Tydus

Jawaban:

9

C / C ++ cepat. Kenyataannya adalah, sebagian besar aplikasi tidak akan membutuhkan kinerja dengan keadaan hardware saat ini. Cara biasa adalah mengembangkan aplikasi dalam bahasa tingkat tinggi, seperti python, daripada mengoptimalkan bila diperlukan dengan bahasa tingkat rendah, seperti C / C ++.

Python akan memberi Anda dorongan produktivitas yang besar, mudah dipelajari dan cukup cepat. Ada Cython , yang dapat Anda gunakan untuk menulis ekstensi C untuk digunakan dalam aplikasi python Anda dengan sintaks seperti python untuk mempercepat kemacetan.

Untuk aplikasi GUI standar, python dapat memberi Anda kinerja yang cukup. Dan python memiliki sesuatu yang sangat keren yang disebut Kivy , kerangka kerja GUI yang berjalan di Mac, Windows, Linux, Android dan iOS, dan mendukung multi touch. Bagian bonusnya adalah, bagian kritis kinerja dioptimalkan dengan C, menggunakan Cython.

Hakan Deryal
sumber
1
Anda mungkin benar tentang kecepatan. Kivy tampaknya sangat mampu, tetapi bisakah ia menggambar widget sistem-asli?
John Wells
Tidak, itu menggunakan mesin grafis itu sendiri untuk widget, menggunakan OpenGL ES. Qt mungkin akan menjadi taruhan terbaik Anda untuk widget asli lintas platform.
Hakan Deryal
5

Saya akan menggunakan Python, karena memberi Anda peningkatan produktivitas yang besar. Anda masih dapat menulis bagian dari aplikasi Anda yang membutuhkan kecepatan dalam C ++, ada proyek Cython yang memungkinkan untuk menggunakan pustaka C ++ secara langsung dalam Python. Jika Anda khawatir tentang keamanan sumber Anda, Cython juga dapat membantu dengan itu, Anda dapat menggunakannya untuk mengkompilasi kode python normal Anda ke kode C ++.

Saya akan merekomendasikan untuk menanamkan mesin Chrome dan menggunakan teknologi seperti: HTML5 + CSS3 + Javascript + JQuery + Canvas untuk UI.

Ada kerangka kerja yang membuatnya mudah untuk menyematkan mesin Chrome di aplikasi C ++ Anda, ini disebut CEF - Chromium Embedded Framework . Ini mendukung Windows, Linux, Mac OS.

Jika Anda suka Python, lihat CEF Python , ini adalah proyek yang menyediakan binding python untuk kerangka CEF (dengan menggunakan Cython ). CEF python saat ini hanya mendukung Windows, tetapi ada rencana untuk OS'es lainnya.

Berikut adalah daftar aplikasi yang telah berhasil menggunakan CEF (diambil dari sini ):

  • Adobe Brackets - editor kode untuk web
  • Adobe Edge - alat pembuat multimedia
  • AppJS - membangun aplikasi desktop menggunakan Node.js
  • AOL Instant Messenger - klien windows menggunakan CEF
  • Cubiez - mengintegrasikan konten favorit Anda ke dalam desktop
  • Desura - platform game online
  • Dish World IPTV - platform video streaming
  • Evernote - mencatat perangkat lunak
  • ExeOutput - memungkinkan Anda untuk menggunakan aplikasi html5 / php sebagai aplikasi desktop
  • GitHub untuk Windows - Perangkat lunak klien GitHub untuk Windows
  • Janetter - perangkat lunak klien twitter
  • mChef - plugin browser mIRC
  • MediaMan - perangkat lunak penyelenggara
  • MetaVR - perangkat lunak simulasi geografis
  • MTG Studio - perangkat lunak pengatur permainan
  • OpenSpace3D - platform pengembangan 3D
  • Rdio - platform streaming musik
  • Spotify - streaming platform musik
  • Steam Client - platform game online
  • Tencent QQ - program pengiriman pesan instan dan browser web
  • Trend Micro - perangkat lunak keamanan internet
  • WBEA Desktop - memungkinkan Anda untuk menggunakan aplikasi HTML5 sebagai aplikasi desktop

Lihat juga entri blog ini: Membangun Aplikasi Desktop-Kualitas pada Teknologi Web - Tim editor kurung menjelaskan bagaimana mereka membangunnya menggunakan kerangka kerja CEF dan teknologi web seperti: jQuery , Bootstrap , KURANG CSS , membutuhkan JS , Jasmine , untuk pengujian Unit , JSlint .

Penafian: Saya penulis proyek CEF Python.

Czarek Tomczak
sumber
Terima kasih atas masukan Anda! CEF terlihat cukup bagus, tetapi saya berharap dapat memberikan pengalaman asli pada setiap platform jika memungkinkan, yang sulit untuk direproduksi dengan HTML, CSS, dan JS.
John Wells
@ JohnWells, mengapa asli? Orang-orang terbiasa dengan pengalaman web. Lihatlah Windows 8, masing-masing OS berikutnya dari microsoft tidak ada hubungannya dengan asli, mereka memaksa teknologi web dan ini adalah masa depan, tidak ada yang namanya "pengalaman asli", itu adalah sesuatu dari masa lalu.
Czarek Tomczak
Tergantung pada perangkat lunak apa yang Anda bicarakan. Aplikasi yang berorientasi konsumen mungkin baik-baik saja dengan nuansa "web", tetapi itu tidak berjalan baik dengan perangkat lunak yang berpusat di sekitar pembuatan konten. Juga, sementara Windows 8 mungkin diarahkan untuk teknologi web, Mac OS masih dengan kuat didasarkan pada tanah asli dan penggunanya cenderung tidak menyukai perangkat lunak yang menyimpang jauh dari itu.
John Wells
1
Cukup JBRWilkinson, tapi saya benar-benar tidak ingin menulis CSS widget-mimic (dalam kasus CEF) untuk setiap platform jika saya tidak perlu.
John Wells
1
Menjadi pengguna Mac sendiri, pengalaman asli sangat berarti bagi saya. Di mata saya, tidak ada yang lebih buruk daripada aplikasi yang tidak muncul dan bertindak konsisten dengan OS yang sedang berjalan. Bahkan sesuatu seperti peningkatan produktivitas besar-besaran tidak cukup untuk melebihi itu.
John Wells
5

Cara Qt dari C ++ bagus dan bersih, jadi tolong, lepaskan bagian "jelek", saya sudah mencoba keduanya, dan secara pribadi saya jauh lebih produktif / nyaman dengan Qt / C ++ daripada dengan mengikat Qt Python. Itu saran saya jika Anda memilih untuk menggunakan Qt. Ditambah dan di samping pengalaman asli yang disediakan widget Qt, Qt5 dan QtQuick2 dengan teknologi QML dan kemampuan untuk menanamkan JavaScript dan HTML5 dalam aplikasi Anda, memberi Anda tampilan & nuansa seperti web modern, jika Anda memilih untuk melakukannya.

Jadi, mengapa saya tidak suka Python di aplikasi desktop dan saya lebih suka menyimpannya untuk skrip atau hal-hal sisi server?

  • Python memecah sedikit kegembiraan lintas-platform, klien Anda harus menginstal Python untuk menjalankan aplikasi Anda (terutama pada Windows), dan berbagai versi Python yang ada di situs resmi python sekarang membuat klien bingung, yang mana untuk diunduh / instal .

  • Python untuk exe , membuat aplikasi yang lebih besar (dalam hal ukuran).

  • Aplikasi Python, makan lebih banyak memori.

Itu sudut pandang pribadi. Sistem induk Qt, smart pointer, tidak akan membiarkan Anda menembak diri sendiri, tidak juga kaki, C ++ 11 akan memberi Anda lebih banyak fitur.

01walid
sumber
3
"klien Anda harus menginstal Python untuk menjalankan aplikasi Anda" - Anda dapat mendistribusikan dll python dengan aplikasi Anda, tidak perlu bagi pengguna untuk menginstal python secara manual. Anda tidak perlu menggunakan py2exe atau pembuat exe buggy lainnya (dari pengalaman saya), lihat Python Embedding , itu hanya beberapa baris kode c ++, ganti PyRun_SimpleString dengan PyRun_SimpleFile, Anda dapat dengan mudah mengkompilasi sendiri, yang seharusnya tidak membuat overhead dalam ukuran aplikasi Anda. "Aplikasi Python, makan lebih banyak memori." - Gunakan Cython untuk mengoptimalkan memori yang menuntut bagian dari aplikasi Anda.
Czarek Tomczak