it-swarm.dev

Warum wird C ++ immer noch bevorzugt, um schwere GUI-Apps gegenüber den neuesten dynamischen Sprachen zu erstellen?

Ich sehe, dass die meisten Apps, die umfangreiche GUI-Inhalte enthalten, normalerweise in C++ entwickelt werden. Die meisten Spiele/Browser sind in C++ codiert.

Können wir nicht einfach bessere GUI-Apps mit den neuesten dynamischen Sprachen entwickeln? Ich weiß, dass Java keine gute Wahl wäre. Aber was ist mit Sprachen wie python, die nativ auf C basieren? Sind nicht die neuesten Sprachen gedacht? besser sein als ihre Vorfahren? Warum müssen wir immer noch das uralte C++ den neuesten Sprachen vorziehen?

Und ich würde auch gerne wissen, was in C++ für die bessere Verarbeitungsgeschwindigkeit der Benutzeroberfläche verantwortlich ist. Auf der anderen Seite, was fehlt den anderen neuesten Sprachen?

47
Vamsi Emani

Ich bin einer von denen, die C++ - GUI-Apps schreiben (hauptsächlich für Windows). Mit Qt, um genau zu sein. Meine Gründe:

  • Ich mag C++. Ich bin freiberuflich tätig und kann normalerweise meine Werkzeuge auswählen (Glück gehabt!)
  • In einer verwalteten Umgebung kann es schwierig sein, nicht verwalteten Code zu verwenden (langwierige WinAPI-Deklarationen in C #, irgendjemand?).
  • Weniger Abhängigkeiten, die einfacher bereitgestellt werden können
  • Mehr Kontrolle über alles.
  • RAII (vs. GC). Und selbst wenn ich new zuordne, habe ich selten etwas explizit delete, weil ich intelligente Zeiger oder die Hierarchie QObject verwende.
  • C++ ist heutzutage sehr aufregend. Ich kann es kaum erwarten, dass ein Compiler den neuen Standard vollständig unterstützt.
  • Geschwindigkeit (nur am Ende der Liste. Ich weiß, dass es für die GUI selbst nicht so wichtig ist, aber es ist tendenziell schneller, weil C++ - Programme dies nicht tun. t leiden unter dem Overhead, den Laufzeiten, JIT-Kompilierung von Bytecode und ähnliche Technologien dem Programm hinzufügen.)

Wie Sie sehen können, sind dies meist persönliche Vorlieben. Ich finde es wichtig, dass meine Arbeit Spaß macht, und C++ bietet mir das.

58
Tamás Szelei

Weil Geschwindigkeit wichtig ist.

  • Spiele Verwenden Sie C++ für Kernaufgaben, bei denen die Leistung wichtig ist. Sie verwenden dynamische Sprachen für Skriptaufgaben, bei denen Flexibilität wichtig ist.

  • Desktop-GUI-Apps: Visual Studio ist beispielsweise in .NET und nicht in nativem C++ geschrieben. Es scheint für eine IDE recht gut zu funktionieren, da die IDE selbst) nicht viele leistungsintensive Aufgaben ausführen muss. (Der Compiler, der Linker und andere Tools sind nicht unbedingt in .NET geschrieben - obwohl, wie wawa in einem Kommentar hervorhebt, einige zu sein scheinen (z. B. VB.NET))

  • Browser müssen auch schnell sein. Immerhin sind sie eine Art sekundäres Betriebssystem. Auf der anderen Seite können Sie argumentieren, dass große Teile von Firefox tatsächlich in Javascript "geschrieben" sind, da das Mozilla-Framework stark von Javascript abhängig zu sein scheint.

Zusammenfassend: Ich würde nicht sagen, dass C++ unbedingt bevorzugt ist, aber wenn Sie einen Leistungsengpass haben, müssen Sie näher an das Metall heranrücken und dann treffen Sie auf C++ (gut oder C). Manchmal ist es einfach einfacher, alles in C++ zu erledigen - eine Sprache.

32
Martin Ba

Die in C++ geschriebenen GUI-Apps werden in der Regel aus älteren Gründen ausgeführt. Python (mit Qt oder Gtk) ist für GUI-Anwendungen sehr nützlich, ebenso wie C #, wenn Sie in einem Windows-Haus arbeiten. Wenn Sie etwas Neues starten, ist entweder sehr Sehr bevorzugt gegenüber C++, da keine Installationsarbeiten durchgeführt werden müssen.

18
Demian Brecht

Denn egal wie viele Leistungstests .NET und ähnliche Menschenmengen zeigen, egal wie nahe sie den Benchmarks kommen, am Ende hat die C++ - App die Nase vorn. Es ist schneller beim Kaltstart, schneller und bietet mehr Möglichkeiten zur Verbesserung.

Ich habe in den Projektstartphasen zahlreiche Beweise dafür gehört, dass .NET der richtige Weg ist, aber wenn es einmal ausgewählt wurde, waren sie immer ein schwerer Cludge.

Außerdem ist C++ heutzutage ziemlich sicher und recht einfach zu verwenden, insbesondere mit Frameworks wie Qt oder WTL.

16
Coder

Die meisten Spiel-Engines sind in C++ codiert. Auch viele Browser-Engines sind in C++ codiert. Die Benutzeroberfläche des Browsers wird jedoch häufig mit einem einfachen Skript (JavaScript, Python) codiert. Mit Ausnahme der Source Engine verwenden die meisten Spiele-Engines auch Skriptsprachen (wie Lua oder Python). [als Referenz: Liste der Spiele mit Lua-Skripten ]

Nehmen Sie auch beliebte C++ GUI-Bibliothek wie Qt. In der aktuellen Version (4.7) wird QML für die GUI verwendet. QML ist im Grunde JavaScript mit Qt-Bindungen.

Es gibt also wirklich keine dynamischen C++ vs Sprachen, es ist gemischt.

10
vartec

Erster Grund wird sein: (alte) Gewohnheit

Zweiter Grund: weniger Zuverlässigkeit auf virtuellen Maschinen, zu installierenden Dolmetschern usw.

Und es gibt immer noch einige ausgezeichnete IDEs, um Code in C++ zu entwickeln.

6
Roalt

Der Grund ist, dass Sie viel mehr Kontrolle über alles haben, was passiert. Wenn Sie Photoshop in C # schreiben würden, hätten Sie bei einigen Aufgaben ernsthafte Leistungsprobleme. In einer niedrigeren Sprache mit mehr Kontrolle können Sie Verknüpfungen verwenden und bei Bedarf für intensivere Dinge optimieren. Dies setzt natürlich voraus, dass Sie C++ in nicht verwaltetem Code verwenden, nicht C++ in .NET.

Siehe hier für ein kurzes Beispiel.

6
richard

C++ ist statisch typisiert. Auf diese Weise können Sie die Codeausführung im Voraus optimieren, indem ein Compiler Ihre Abstraktionen an den verfügbaren Systemprozess auf einer bestimmten Plattform anpasst. Bisher benötigen dynamische Sprachen eine zusätzliche Softwareschicht (= den Interpreter), die den Zugriff auf Systemressourcen verlangsamt.

6
poseid

Die meisten der angegebenen Gründe sind technischer Natur oder "über dem Tisch" ... hier sind geschäftliche Gründe oder "unter dem Tisch":

verteilen von kompiliertem Code v.s. Quellcode verteilen. Bei der Entwicklung in c/c ++ verteilen Sie die Binärdateien. Wenn Sie in einer der modernen Sprachen entwickeln, verteilen Sie die Quelle. Es ist schwierig, die Idee der Verschleierung an das Management zu verkaufen, das den Aktionären/Investoren antworten muss.

dumme Benutzer: zumindest in den Köpfen des Managements. Sie nehmen immer noch wahr, dass ihre Benutzer kaum in der Lage sind, auf eine "setup.exe" zu doppelklicken. Wenn Sie die Installation eines Dolmetschers als Teil des Setups einbeziehen, schütteln diese den Kopf von einer Seite zur anderen.

alte Entwickler: Die meisten Leute mit Erfahrung gibt es schon lange und sie haben sich nicht auf dem Laufenden gehalten. Sie programmieren in C++ und nicht in den neueren Sprachen, da sie die neueren Sprachen nicht kennen.

4
Kinjal Dixit

Ich würde den Umfang des Problems von der grafischen Benutzeroberfläche auf Software ausweiten, von der erwartet wird, dass sie wettbewerbsfähig ist. C++ erhebt keine Steuern auf die Zielplattform, da es sich um Verarbeitungsleistung, installierte Laufzeit, Frameworks usw. handelt. Daher funktioniert es auf eingeschränkterer Kundenhardware als eine ähnliche Lösung, die in einer verwalteten/interpretierten Sprache geschrieben ist. Bei einer erfolgreichen kommerziellen Software werden die Entwicklungskosten (möglicherweise höher bei C++) durch die Anzahl der Verkäufe abgeschrieben.

Zusätzlich bietet C++ normalerweise direkten Zugriff auf System-APIs (wie die GUI), was die beste Möglichkeit bietet, die Auslastung zu optimieren und sich von ähnlichen Lösungen abzuheben.

4
jszpilewski

Ich denke, viel davon hat mit den APIs für GUI-Toolkits zu tun. Alle von ihnen haben eine C/C++ - API, aber nicht alle haben (sagen wir) Python Bindungen. Und manchmal wurden die Toolkits selbst unter Berücksichtigung von C++ geschrieben, auch wenn sie Unterstützung haben für andere Sprachen unterstützen sie sie nicht vollständig (z. B. unterstützen sie kein Python Tuple als Argument).

3
TMN

Sie erwähnen Browser und Spiele als Beispiele. Beide sind ziemlich leistungskritische Anwendungen, daher ist es sinnvoll, sie aus Gründen der Geschwindigkeit in einer einfachen Sprache zu haben.

Viele andere Anwendungen sind weniger leistungsgebunden und können leicht in anderen Sprachen geschrieben werden. Insbesondere C # scheint häufig verwendet zu werden. (Und Obj-C, aber es ist nicht wirklich als High-Level zu qualifizieren, denke ich. Besser als C++.)

Es gibt jedoch einen gewissen Mangel an Frameworks für die neuesten Programmiersprachen. Zum Beispiel gibt es für Python wirklich keine brauchbare native GUI-Bibliothek. Sicher, Sie können PyQt oder PyGtk verwenden und sie funktionieren gut, aber am Ende ist das nur eine erneute Schnittstelle mit C-Code. Auch hier scheint C # (und wohl Obj-C) die Ausnahme zu sein, und vielleicht könnten MacRuby oder IronPython dieses Spiel ändern.

2
bastibe

Damit eine Sprache C++ oder Java ersetzen kann, muss sie das tun, was in diesen Sprachen schmerzlich vermisst wird, und sie nicht aus eigener Kraft ausführen. Auch in diese Sprachen wurden enorme Investitionen getätigt. Das bedeutet, dass es auf vielen Plattformen eine Standard-C++ - Bibliothek gibt, die Browser, Spiele und solche Programme problemlos verwenden können. Es muss also eine gewisse Trägheit geben. Sprachen neigen dazu, sich im Gegensatz zu anderen Softwareteilen langsam zu entwickeln.

Wenn Sie es sich ansehen, gibt es Anaconda (RedHats Installationsprogramm) seit ungefähr 10 Jahren, geschrieben in Python von Anfang an. Python war das nicht beliebt, als Anaconda neu war.

Googles Go (golang.org) entwickelt sich sehr schnell. Der Compiler muss noch gebootet werden. Damit seine Popularität zunimmt, muss sich seine Bibliothek stabilisieren, der Compiler sollte gebootet werden und mehr Leute müssen ihn verwenden. Ich habe gehört, dass ein Produktionsprogramm außerhalb von Google in Go geschrieben ist und Berichten zufolge in seinem Leben von etwas mehr als einem Jahr noch keine Ausfallzeit hatte.

0
vpit3833