Plattformübergreifende Desktop-Programmierung: C ++ vs. Python [geschlossen]

11

Okay, zu Beginn habe ich Erfahrung als Amateur-Obj-C / Cocoa und Ruby mit Rails-Programmierer. Diese sind großartig, aber sie sind nicht wirklich hilfreich für das Schreiben plattformübergreifender Anwendungen (hoffentlich wird GNUStep eines Tages vollständig genug sein, damit die erste plattformübergreifend sein kann, aber dieser Tag ist nicht heute).

Soweit ich weiß, ist C ++ extrem mächtig, aber auch ein riesiger, hässlicher Gigant, dessen Beherrschung ein halbes Jahrzehnt oder länger dauern kann. Ich habe auch gelesen, dass Sie sich sehr leicht nicht nur in den Fuß schießen, sondern Ihr gesamtes Bein damit abblasen können, da die Speicherverwaltung vollständig manuell erfolgt. Offensichtlich ist das alles ziemlich einschüchternd. Ist es richtig?

Python scheint den größten Teil der Leistung von C ++ zu bieten und ist auf Kosten der Geschwindigkeit viel einfacher zu erlernen. Wie groß ist dieses Opfer? Ist es sinnvoll oder kann es ignoriert werden?

Was bringt mich dazu, in angemessener Zeit schnelle, stabile und hochzuverlässige Anwendungen zu schreiben?

Ist es auch besser, Qt für Ihre Benutzeroberfläche zu verwenden oder stattdessen separate native Frontends für jede Plattform zu verwalten?

BEARBEITEN: Für zusätzliche Klarheit gibt es zwei Arten von Anwendungen, die ich schreiben möchte: Eine ist ein äußerst benutzerfreundliches und praktisches Datenbank-Frontend und die andere, die zweifellos viel später erscheinen wird, ist ein 3D-Welteditor.

John Wells
quelle
Sie stellen Fragen, auf die die Antworten höchst subjektiv sind - meiner Meinung nach ist das nicht konstruktiv, also stimmen Sie ab, um zu schließen. Sie stellen auch mindestens 4 verschiedene Fragen in einer. Wie kann jemand anderes als Sie wissen, ob C ++ oder Python die bessere Wahl für Sie ist ? Ich schlage vor, Sie versuchen, eine kleine GUI-Anwendung mit Python (die nicht länger als einen Tag dauern sollte) und dieselbe Anwendung mit C ++ zu erstellen und selbst zu vergleichen.
Doc Brown
Ich denke, was ich wirklich zu fragen versuche, ist gegeben, wonach ich suche, was objektiv die bessere Wahl ist?
John Wells
Können Sie einen zusätzlichen Kontext angeben - was muss Ihre Desktop-App tun? Viel Mathe? Produktivitäts-App? Datenbankzugriff? Ein Spiel?
JBRWilkinson
Bearbeiten hinzugefügt, um zu verdeutlichen, was ich tun möchte.
John Wells
Ich würde mich dafür entscheiden, dieselbe Sprache des Betriebssystems und / oder der GUI-Bibliothek zu verwenden. Sie können die Benutzeroberfläche viel einfacher und ausführlicher bearbeiten. Versuchen Sie, etwas so Einfaches wie den Vollbildmodus (drücken Sie in Ihrem Browser F11) in einer höheren Sprache wie Java oder C # zu simulieren. Ich ruhe meinen Fall aus. Native Lösungen sind auf eine größere Vielfalt von Geräten portierbar als High-Level-Lösungen wie Java (ironischerweise).
Lord Tydus

Antworten:

8

C / C ++ ist schnell. Die Realität ist, dass die meisten Apps diese Leistung mit dem Status der aktuellen Hardware nicht benötigen. Der übliche Weg besteht darin, die Anwendung in einer höheren Sprache wie Python zu entwickeln und sie dann bei Bedarf mit niedrigeren Sprachen wie C / C ++ zu optimieren.

Python bietet Ihnen einen großen Produktivitätsschub, ist einfach zu erlernen und relativ schnell. Es gibt Cython , mit dem Sie C-Erweiterungen für Ihre Python-App mit pythonähnlicher Syntax schreiben können, um Engpässe zu beschleunigen.

Für Standard-GUI-Apps bietet Python ausreichend Leistung. Und Python hat etwas sehr Cooles namens Kivy , ein GUI-Framework, das auf Mac, Windows, Linux, Android und iOS läuft und Multi-Touch unterstützt. Der Bonus ist, dass die leistungskritischen Teile mit C unter Verwendung von Cython optimiert werden.

Hakan Deryal
quelle
1
Sie haben wahrscheinlich Recht mit der Geschwindigkeit. Kivy scheint sehr fähig zu sein, aber kann es systemeigene Widgets zeichnen?
John Wells
Nein, es verwendet eine eigene Grafik-Engine für Widgets, die OpenGL ES verwendet. Qt ist wahrscheinlich die beste Wahl für plattformübergreifende native Widgets.
Hakan Deryal
5

Ich würde mit Python gehen, da es Ihnen einen großen Produktivitätsschub gibt. Sie können weiterhin Teile Ihrer App schreiben, die in C ++ Geschwindigkeit benötigen. Es gibt ein Cython- Projekt, mit dem C ++ - Bibliotheken direkt in Python verwendet werden können. Wenn Sie sich Sorgen um die Sicherheit Ihrer Quellen machen, kann Cython Ihnen auch dabei helfen. Sie können damit Ihren normalen Python-Code in C ++ - Code kompilieren.

Ich würde empfehlen, die Chrome-Engine einzubetten und Technologien wie HTML5 + CSS3 + Javascript + JQuery + Canvas für die Benutzeroberfläche zu verwenden.

Es gibt ein Framework, das das Einbetten der Chrome-Engine in Ihre C ++ - App erleichtert. Es heißt CEF - Chromium Embedded Framework . Es unterstützt Windows, Linux, Mac OS.

Wenn Sie Python mögen, werfen Sie einen Blick auf CEF Python , ein Projekt, das Python-Bindungen für das CEF-Framework bereitstellt (mithilfe von Cython ). CEF Python unterstützt derzeit nur Windows, es gibt jedoch Pläne für andere Betriebssysteme.

Hier ist eine Liste der Anwendungen, die mit CEF erfolgreich waren (von hier übernommen ):

  • Adobe Brackets - Code-Editor für das Web
  • Adobe Edge - Multimedia-Authoring-Tool
  • AppJS - Erstellen Sie Desktop-Anwendungen mit Node.js.
  • AOL Instant Messenger - Windows-Client verwendet CEF
  • Cubiez - Integriert Ihre Lieblingsinhalte in den Desktop
  • Desura - Online-Spielplattform
  • Dish World IPTV - Streaming-Videoplattform
  • Evernote - Notetaking-Software
  • ExeOutput - Ermöglicht die Bereitstellung von HTML5 / PHP-Anwendungen als Desktop-Anwendungen
  • GitHub für Windows - GitHub-Client-Software für Windows
  • Janetter - Twitter Client Software
  • mChef - mIRC Browser Plugin
  • MediaMan - Organizer-Software
  • MetaVR - geografische Simulationssoftware
  • MTG Studio - Game Organizer Software
  • OpenSpace3D - 3D-Entwicklungsplattform
  • Rdio - Streaming-Musikplattform
  • Spotify - Musikplattform streamen
  • Steam Client - Online-Spielplattform
  • Tencent QQ - Instant Messaging-Programm und Webbrowser
  • Trend Micro - Internet-Sicherheitssoftware
  • WBEA Desktop - Ermöglicht die Bereitstellung von HTML5-Anwendungen als Desktop-Anwendungen

Schauen Sie sich auch diesen Blogeintrag an: Erstellen einer Desktop-Qualitäts-App für Webtechnologien - Brackets-Redaktionsteam, das erklärt, wie sie mithilfe von CEF-Frameworks und Webtechnologien wie jQuery , Bootstrap , WENIGER CSS , requireJS , Jasmine for Unit-Tests , JSlint erstellt wurden .

Haftungsausschluss: Ich bin der Autor des CEF Python-Projekts.

Czarek Tomczak
quelle
Danke für deinen Beitrag! CEF sieht ganz gut aus, aber ich hoffe, dass ich auf jeder Plattform eine native Erfahrung bieten kann, wenn dies überhaupt möglich ist, was mit HTML, CSS und JS schwer zu reproduzieren ist.
John Wells
@ JohnWells, warum einheimisch? Menschen sind an Web-Erfahrungen gewöhnt. Schauen Sie sich Windows 8 an, jedes nächste Betriebssystem von Microsoft hat weniger mit nativen zu tun, sie erzwingen Webtechnologien und dies ist die Zukunft, es gibt keine "native Erfahrung", es gehört der Vergangenheit an.
Czarek Tomczak
Es hängt davon ab, von welcher Software Sie sprechen. Verbraucherorientierte Anwendungen mögen mit einem "Web" -Gefühl in Ordnung sein, aber das funktioniert mit Software, die sich auf die Erstellung von Inhalten konzentriert, nicht so gut. Auch wenn Windows 8 möglicherweise auf Web-Technologie ausgerichtet ist, ist Mac OS immer noch fest im Heimatland verankert, und seine Benutzer neigen dazu, Software, die davon abweicht, nicht zu mögen.
John Wells
1
Ganz richtig, JBRWilkinson, aber ich möchte wirklich nicht Widget-imitierendes CSS (im Fall von CEF) für jede Plattform schreiben, wenn ich nicht muss.
John Wells
1
Als Mac-Benutzer ist mir die native Erfahrung sehr wichtig. In meinen Augen ist nichts schlimmer als eine Anwendung, die nicht angezeigt wird und mit dem Betriebssystem übereinstimmt, auf dem sie ausgeführt wird. Selbst eine massive Produktivitätssteigerung reicht nicht aus, um sie aufzuwiegen.
John Wells
5

Die Qt-Methode von C ++ ist großartig und sauber. Lassen Sie also bitte den Teil "Hässlicher Gigant" fallen. Ich habe beide ausprobiert und persönlich bin ich mit Qt / C ++ viel produktiver / komfortabler als mit Pythons Qt-Bindung. Das ist mein Rat, wenn Sie sich für Qt entscheiden. Neben der nativen Erfahrung, die das Qt-Widget bietet, bieten Qt5 und QtQuick2 mit QML-Technologie und der Möglichkeit, JavaScript und HTML5 in Ihre App einzubetten, ein modernes webähnliches Erscheinungsbild , wenn Sie dies wünschen.

Warum mag ich Python in Desktop-Apps nicht und bevorzuge es, es für Skripte oder serverseitige Dinge zu behalten?

  • Python bricht ein wenig die plattformübergreifende Freude, Ihr Client muss Python installieren, um Ihre App auszuführen (insbesondere unter Windows), und die verschiedenen Python-Versionen auf der offiziellen Website von Python machen den Client jetzt verwirrt, welche heruntergeladen / installiert werden soll .

  • Python zu exe , machen größere Apps (in Bezug auf die Größe).

  • Python-Apps, essen mehr Speicher.

Das ist eine persönliche Sichtweise. Das übergeordnete System von Qt, intelligente Zeiger, lässt Sie nicht in den Fuß oder in die Beine schießen. Das C ++ 11 bietet Ihnen noch mehr Funktionen.

01walid
quelle
3
"Ihr Client muss Python installieren, um Ihre App auszuführen" - Sie können Python-DLLs mit Ihrer App verteilen. Der Benutzer muss Python nicht manuell installieren. Sie müssen weder py2exe noch andere fehlerhafte Exe-Hersteller verwenden (meiner Erfahrung nach), siehe Python Embedding , es sind nur ein paar Zeilen C ++ - Code, ersetzen Sie PyRun_SimpleString durch PyRun_SimpleFile, Sie können es einfach selbst kompilieren, das sollte keinen Overhead verursachen Größe Ihrer App. "Python-Apps, essen mehr Speicher." - Verwenden Sie Cython, um speicherintensive Teile Ihrer App zu optimieren.
Czarek Tomczak