Programmation de bureau multiplateforme: C ++ vs Python [fermé]

11

D'accord, pour commencer, j'ai de l'expérience en tant que programmeur amateur Obj-C / Cocoa et Ruby w / Rails. Celles-ci sont excellentes, mais elles ne sont pas vraiment utiles pour écrire des applications multiplateformes (espérons que GNUStep sera un jour suffisamment complet pour que la première soit multi-plate-forme, mais ce jour n'est pas aujourd'hui).

Le C ++, d'après ce que je peux comprendre, est extrêmement puissant mais aussi un énorme monstre laid qui peut prendre une demi-décennie ou plus à maîtriser. J'ai également lu que vous pouvez très facilement non seulement vous tirer une balle dans le pied, mais en souffler toute la jambe car la gestion de la mémoire est entièrement manuelle. De toute évidence, tout cela est assez intimidant. Est-ce correct?

Python semble fournir la majeure partie de la puissance de C ++ et est beaucoup plus facile à récupérer au détriment de la vitesse. Quelle est la taille de ce sacrifice? Est-il significatif ou peut-il être ignoré?

Qu'est-ce qui me permettra d'écrire des applications rapides, stables et très fiables dans un délai raisonnable?

En outre, est-il préférable d'utiliser Qt pour votre interface utilisateur ou de conserver des frontaux natifs séparés pour chaque plate-forme?

EDIT: Pour plus de clarté, il y a deux types d'applications que je veux écrire: l'une est une interface de base de données extrêmement conviviale et pratique et l'autre, qui viendra sans doute beaucoup plus tard, est un éditeur de monde 3D.

John Wells
la source
Vous posez des questions auxquelles les réponses seront très subjectives - à mon humble avis, ce n'est pas constructif, votant donc pour la clôture. Vous posez également au moins 4 questions différentes en une. Comment quelqu'un d'autre que vous sait si C ++ ou Python est le meilleur choix pour vous ? Je vous suggère d'essayer de créer une petite application graphique avec Python (qui ne devrait pas vous prendre plus d'une journée), et la même application avec C ++, et de comparer par vous-même.
Doc Brown
Je suppose que ce que j'essaie vraiment de demander, c'est ce que je recherche, qui est objectivement le meilleur choix?
John Wells
Pouvez-vous donner un contexte supplémentaire - que doit faire votre application de bureau? Beaucoup de maths? Application de productivité? Accès à la base de données? Un jeu?
JBRWilkinson
Ajout d'une modification pour clarifier ce que je veux faire.
John Wells
Je choisirais d'utiliser la même langue que le système d'exploitation et / ou la bibliothèque GUI. Vous pouvez effectuer des manipulations beaucoup plus approfondies sur l'interface utilisateur plus facilement. Essayez de simuler quelque chose d'aussi simple que le plein écran (appuyez sur F11 dans votre navigateur) dans un langage de haut niveau comme Java ou C #. Je repose mon cas. Les solutions natives sont portables sur une plus grande variété d'appareils que les solutions de haut niveau comme java (ironiquement).
Lord Tydus

Réponses:

9

C / C ++ est rapide. La réalité est que la plupart des applications n'auront pas besoin de cette performance avec l'état des matériels actuels. La manière habituelle est de développer l'application dans un langage de haut niveau, comme python, que d'optimiser en cas de besoin avec des langages de niveau inférieur, comme C / C ++.

Python vous donnera une grande augmentation de la productivité, il est facile à apprendre et raisonnablement rapide. Il existe Cython , que vous pouvez utiliser pour écrire des extensions C à utiliser dans votre application python avec une syntaxe de type python pour accélérer les goulots d'étranglement.

Pour les applications GUI standard, python peut vous donner suffisamment de performances. Et python a quelque chose de très cool appelé Kivy , un framework GUI qui fonctionne sur Mac, Windows, Linux, Android et iOS, et prend en charge le multi-touch. La partie bonus est que les parties critiques pour les performances sont optimisées avec C, en utilisant Cython.

Hakan Deryal
la source
1
Vous avez probablement raison sur la vitesse. Kivy semble très capable, mais peut-il dessiner des widgets natifs du système?
John Wells
Non, il utilise son propre moteur graphique pour les widgets, en utilisant OpenGL ES. Qt sera probablement votre meilleur pari pour les widgets natifs multiplateformes.
Hakan Deryal
5

J'irais avec Python, car cela vous donne une grande augmentation de la productivité. Vous pouvez toujours écrire des parties de votre application qui ont besoin de vitesse en C ++, il existe un projet Cython qui permet d'utiliser les bibliothèques C ++ directement en Python. Si vous êtes préoccupé par la sécurité de vos sources, Cython peut également vous aider, vous pouvez l'utiliser pour compiler votre code python normal en code C ++.

Je recommanderais d'intégrer le moteur Chrome et d'utiliser des technologies telles que: HTML5 + CSS3 + Javascript + JQuery + Canvas pour l'interface utilisateur.

Il existe un cadre qui facilite l'intégration du moteur Chrome dans votre application C ++, il s'appelle CEF - Chromium Embedded Framework . Il prend en charge Windows, Linux, Mac OS.

Si vous aimez Python, jetez un œil à CEF Python , c'est un projet qui fournit des liaisons python pour le framework CEF (en utilisant Cython ). Le python CEF ne prend actuellement en charge que Windows, mais il existe des plans pour d'autres systèmes d'exploitation.

Voici une liste des applications qui ont réussi avec CEF (tirées d' ici ):

  • Adobe Brackets - éditeur de code pour le web
  • Adobe Edge - outil de création multimédia
  • AppJS - créer des applications de bureau à l'aide de Node.js
  • AOL Instant Messenger - le client Windows utilise CEF
  • Cubiez - intègre votre contenu préféré dans le bureau
  • Desura - plateforme de jeu en ligne
  • Dish World IPTV - plateforme vidéo en streaming
  • Evernote - logiciel de prise de notes
  • ExeOutput - vous permet de déployer des applications html5 / php en tant qu'applications de bureau
  • GitHub pour Windows - Logiciel client GitHub pour Windows
  • Janetter - logiciel client Twitter
  • mChef - plugin de navigateur mIRC
  • MediaMan - logiciel organisateur
  • MetaVR - logiciel de simulation géographique
  • MTG Studio - logiciel d'organisateur de jeux
  • OpenSpace3D - Plateforme de développement 3D
  • Rdio - plateforme de musique en streaming
  • Spotify - plateforme de musique en streaming
  • Steam Client - plateforme de jeu en ligne
  • Tencent QQ - programme de messagerie instantanée et navigateur Web
  • Trend Micro - logiciel de sécurité Internet
  • WBEA Desktop - vous permet de déployer des applications html5 en tant qu'applications de bureau

Jetez également un œil à cette entrée de blog: Construire une application de qualité bureau sur les technologies Web - L'équipe de l'éditeur de supports expliquant comment ils l'ont construite à l'aide du cadre CEF et des technologies Web comme: jQuery , Bootstrap , LESS CSS , requireJS , Jasmine for Unit testing , JSlint .

Avertissement: je suis l'auteur du projet CEF Python.

Czarek Tomczak
la source
Merci pour votre contribution! CEF a l'air plutôt sympa, mais j'espère offrir une expérience native sur chaque plate-forme si possible, ce qui est difficile à reproduire avec HTML, CSS et JS.
John Wells
@JohnWells, pourquoi natif? Les gens sont habitués à l'expérience Web. Regardez Windows 8, chaque prochain OS de Microsoft a moins à voir avec le natif, ils forcent les technologies Web et c'est l'avenir, il n'y a rien de tel que "l'expérience native", c'est une chose du passé.
Czarek Tomczak
Cela dépend de quel logiciel vous parlez. Les applications axées sur le consommateur peuvent convenir à une sensation de «Web», mais cela ne fonctionne pas aussi bien avec un logiciel centré sur la création de contenu. De plus, bien que Windows 8 soit axé sur la technologie Web, Mac OS est toujours fermement ancré dans le pays natal et ses utilisateurs ont tendance à ne pas aimer les logiciels qui s'écartent de cela.
John Wells
1
Tout à fait JBRWilkinson, mais je ne veux vraiment pas écrire CSS widget-mimic (dans le cas de CEF) pour chaque plate-forme si je n'ai pas à le faire.
John Wells
1
Étant moi-même un utilisateur de Mac, l'expérience native compte beaucoup pour moi. À mes yeux, rien n'est pire qu'une application qui n'apparaît pas et qui agit de manière cohérente avec le système d'exploitation sur lequel elle fonctionne. Même quelque chose comme une augmentation massive de la productivité ne suffit pas à l'emporter.
John Wells
5

La manière Qt de C ++ est excellente et propre, alors s'il vous plaît, laissez tomber la partie "laid monstre", je les ai essayés tous les deux, et personnellement je suis beaucoup plus productif / confortable avec Qt / C ++ qu'avec la liaison Qt de Python. C'est mon conseil si vous choisissez d'aller avec Qt. De plus, en plus de l'expérience native fournie par le widget Qt, Qt5 et QtQuick2 avec la technologie QML et la possibilité d'incorporer JavaScript et HTML5 dans votre application, vous offrent une apparence et une convivialité modernes, si vous choisissez de le faire.

Alors, pourquoi je n'aime pas Python dans les applications de bureau et je préfère le conserver pour les scripts ou les choses côté serveur?

  • Python brise un peu la joie multiplateforme, votre client doit installer Python pour exécuter votre application (en particulier sous Windows), et les différentes versions de Python qui sont sur le site officiel de python rendent maintenant le client confus, lequel télécharger / installer .

  • Python pour exe , faites de plus grandes applications (en termes de taille).

  • Applications Python, mangez plus de mémoire.

C'est un point de vue personnel. Le système parent de Qt, les pointeurs intelligents, ne vous laissera pas vous tirer dans le pied, ni les jambes, le C ++ 11 vous donnera encore plus de fonctionnalités.

01walid
la source
3
"votre client doit installer Python pour exécuter votre application" - vous pouvez distribuer des DLL python avec votre application, il n'est pas nécessaire que l'utilisateur installe python manuellement. Vous n'avez pas besoin d'utiliser py2exe ou d'autres fabricants d'exe buggy (d'après mon expérience), voir Intégration Python , ce ne sont que quelques lignes de code c ++, remplacez PyRun_SimpleString par PyRun_SimpleFile, vous pouvez facilement le compiler vous-même, cela ne devrait pas entraîner de frais généraux dans taille de votre application. "Applications Python, mangez plus de mémoire." - utilisez Cython pour optimiser les parties gourmandes en mémoire de votre application.
Czarek Tomczak