Programmazione desktop multipiattaforma: C ++ vs. Python [chiuso]


11

Bene, per cominciare, ho esperienza come programmatore dilettante di Obj-C / Cocoa e Ruby con Rails. Questi sono fantastici, ma non sono davvero utili per scrivere applicazioni multipiattaforma (si spera che un giorno GNUStep sarà abbastanza completo da essere il primo a essere multipiattaforma, ma quel giorno non lo è oggi).

Il C ++, da quello che posso raccogliere, è estremamente potente ma anche un enorme e brutto colosso che può richiedere mezzo decennio o più per dominarlo. Ho anche letto che puoi facilmente spararti nel piede, ma anche soffiarti tutta la gamba poiché la gestione della memoria è tutto manuale. Ovviamente, tutto questo è abbastanza intimidatorio. È corretto?

Python sembra fornire la maggior parte della potenza del C ++ ed è molto più facile da raccogliere a costo della velocità. Quanto è grande questo sacrificio? È significativo o può essere ignorato?

Chi mi farà scrivere applicazioni veloci, stabili e altamente affidabili in un ragionevole lasso di tempo?

Inoltre, è meglio usare Qt per l'interfaccia utente o invece mantenere front-end nativi separati per ciascuna piattaforma?

EDIT: Per maggiore chiarezza, ci sono due tipi di applicazioni che voglio scrivere: uno è un frontend di database estremamente amichevole e conveniente e l'altro, che senza dubbio arriverà molto più avanti, è un editor mondiale 3D.


Stai ponendo domande a cui le risposte saranno altamente soggettive - IMHO che non è costruttivo, quindi vota per chiudere. Fai anche almeno 4 domande diverse in una. Come può chiunque altro se non sapere se C ++ o Python è la scelta migliore per te ? Ti suggerisco di provare a creare una piccola applicazione GUI con Python (che dovrebbe durare non più di un giorno) e la stessa applicazione con C ++ e confrontarla da solo.
Doc Brown,

Immagino che ciò che sto davvero cercando di chiedere sia dato quello che sto cercando, che è oggettivamente la scelta migliore?
John Wells,

Puoi fornire un contesto aggiuntivo: cosa deve fare la tua app desktop? Un sacco di matematica? App di produttività? Accesso al database? Un gioco?
JBR Wilkinson,

Aggiunta modifica per chiarire che voglio fare.
John Wells,

Opterei per l'utilizzo della stessa lingua del sistema operativo e / o della libreria della GUI. Puoi apportare più facilmente manipolazioni più approfondite all'interfaccia utente. Prova a simulare qualcosa di semplice come lo schermo intero (premi F11 nel browser) in un linguaggio di alto livello come Java o C #. Non ho niente da aggiungere. Le soluzioni native sono portatili su una più ampia varietà di dispositivi rispetto a soluzioni di alto livello come java (ironicamente).
Lord Tydus,

Risposte:


9

C / C ++ è veloce. La realtà è che la maggior parte delle app non avrà bisogno di tali prestazioni con lo stato degli attuali software. Il solito modo è di sviluppare l'applicazione in un linguaggio di alto livello, come Python, che ottimizzarlo quando necessario con linguaggi di livello inferiore, come C / C ++.

Python ti darà una grande spinta alla produttività, è facile da imparare e ragionevolmente veloce. C'è Cython , che puoi usare per scrivere estensioni C da usare nella tua app Python con sintassi simile a Python per accelerare i colli di bottiglia.

Per le app con interfaccia grafica standard, python può offrire prestazioni sufficienti. E Python ha qualcosa di molto interessante chiamato Kivy , un framework GUI che funziona su Mac, Windows, Linux, Android e iOS e supporta il multi touch. La parte bonus è che le parti critiche per le prestazioni sono ottimizzate con C, usando Cython.


1
Probabilmente hai ragione sulla velocità. Kivy sembra molto capace, ma può disegnare widget nativi di sistema?
John Wells,

No, utilizza il proprio motore grafico per i widget, usando OpenGL ES. Qt sarà probabilmente la soluzione migliore per i widget nativi multipiattaforma.
Hakan Deryal,

5

Vorrei andare con Python, in quanto ti dà un grande aumento della produttività. Puoi ancora scrivere parti della tua app che richiedono velocità in C ++, esiste un progetto Cython che consente di utilizzare le librerie C ++ direttamente in Python. Se sei preoccupato per la sicurezza delle tue fonti, Cython può anche aiutarti, puoi usarlo per compilare il tuo normale codice Python in codice C ++.

Consiglierei di incorporare il motore Chrome e utilizzare tecnologie come: HTML5 + CSS3 + Javascript + JQuery + Canvas per l'interfaccia utente.

Esiste un framework che semplifica l'integrazione del motore Chrome nella tua app C ++, si chiama CEF - Chromium Embedded Framework . Supporta Windows, Linux, Mac OS.

Se ti piace Python, dai un'occhiata a CEF Python , è un progetto che fornisce collegamenti python per il framework CEF (usando Cython ). Python CEF attualmente supporta solo Windows, ma ci sono piani per altri sistemi operativi.

Ecco un elenco di applicazioni che hanno avuto successo utilizzando CEF (preso da qui ):

  • Adobe Brackets - editor di codice per il web
  • Adobe Edge - strumento di creazione multimediale
  • AppJS: crea applicazioni desktop usando Node.js
  • AOL Instant Messenger: il client Windows utilizza CEF
  • Cubiez: integra i tuoi contenuti preferiti nel desktop
  • Desura - piattaforma di gioco online
  • Dish World IPTV - piattaforma di streaming video
  • Evernote - software per notare
  • ExeOutput: consente di distribuire applicazioni html5 / php come applicazioni desktop
  • GitHub per Windows - Software client GitHub per Windows
  • Janetter - software client twitter
  • mChef - plugin per browser mIRC
  • MediaMan - software organizer
  • MetaVR - software di simulazione geografica
  • MTG Studio - software per l'organizzazione di giochi
  • OpenSpace3D - Piattaforma di sviluppo 3D
  • Rdio - piattaforma musicale in streaming
  • Spotify - piattaforma musicale in streaming
  • Steam Client - piattaforma di gioco online
  • Tencent QQ - programma di messaggistica istantanea e browser web
  • Trend Micro: software di sicurezza per Internet
  • Desktop WBEA: consente di distribuire applicazioni HTML5 come applicazioni desktop

Dai un'occhiata anche a questo post di blog: Creazione di un'app di qualità desktop su tecnologie Web - Team di redattori di parentesi che spiega come l'hanno costruita utilizzando il framework CEF e le tecnologie web come: jQuery , Bootstrap , LESS CSS , requestJS , Jasmine for Unit testing , JSlint .

Disclaimer: sono l'autore del progetto CEF Python.


Grazie per il tuo contributo! CEF sembra piuttosto carino, ma spero di offrire un'esperienza nativa su ogni piattaforma, se possibile, che è difficile da riprodurre con HTML, CSS e JS.
John Wells,

@JohnWells, perché nativo? Le persone sono abituate all'esperienza web. Guarda Windows 8, ogni prossimo SO di microsoft ha meno a che fare con i nativi, stanno forzando le tecnologie web e questo è il futuro, non esiste qualcosa come "esperienza nativa", è un ricordo del passato.
Czarek Tomczak,

Dipende dal software di cui stai parlando. Le applicazioni orientate al consumatore potrebbero andare bene con una sensazione "web", ma questo non vola così bene con il software incentrato sulla creazione di contenuti. Inoltre, mentre Windows 8 potrebbe essere orientato verso la tecnologia Web, Mac OS è ancora saldamente radicato nella terra natia e i suoi utenti tendono a non gradire il software che si discosta da quello.
John Wells,

1
Giustamente JBRWilkinson, ma non voglio davvero scrivere CSS simil widget (nel caso di CEF) per ogni piattaforma se non devo.
John Wells,

1
Essendo anch'io un utente Mac, l'esperienza nativa conta molto per me. Ai miei occhi, niente è peggio di un'applicazione che non appare e agisce in modo coerente con il sistema operativo su cui è in esecuzione. Anche qualcosa come un enorme aumento della produttività non è sufficiente per superarlo.
John Wells,

5

Il modo Qt di C ++ è fantastico e pulito, quindi per favore, lascia cadere la parte "brutto behemoth", li ho provati entrambi e personalmente sono molto più produttivo / a mio agio con Qt / C ++ che con l'associazione Qt di Python. Questo è il mio consiglio se scegli di andare con Qt. Inoltre, oltre all'esperienza nativa fornita dal widget Qt, Qt5 e QtQuick2 con tecnologia QML e la possibilità di incorporare JavaScript e HTML5 nella tua app, ti offrono un aspetto moderno simile a un web, se scegli di farlo.

Quindi, perché non mi piace Python nelle app desktop e preferisco tenerlo per gli script o cose lato server?

  • Python rompe un po 'la gioia multipiattaforma, il tuo client deve installare Python per eseguire la tua app (soprattutto su Windows) e le diverse versioni di Python che si trovano sul sito Web ufficiale di Python ora rendono il client confuso, quale scaricare / installare .

  • Python per exe , crea app più grandi (in termini di dimensioni).

  • App Python, mangia più memoria.

Questo è un punto di vista personale. Il sistema genitore di Qt, i puntatori intelligenti, non ti lasceranno sparare ai piedi, né alle gambe, il C ++ 11 ti darà ancora più funzionalità.


3
"il tuo client deve installare Python per eseguire la tua app": puoi distribuire dlls Python con la tua app, non è necessario che l'utente installi manualmente Python. Non è necessario utilizzare py2exe o altri produttori di buggy exe (dalla mia esperienza), vedi Python Incorporamento , sono solo poche righe di codice c ++, sostituisci PyRun_SimpleString con PyRun_SimpleFile, puoi facilmente compilarlo da solo, che non dovrebbe farci carico dimensione della tua app. "App Python, mangia più memoria." - usa Cython per ottimizzare le parti della tua app che richiedono memoria.
Czarek Tomczak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.