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ß, Java wäre keine gute Wahl. Aber was ist mit Sprachen wie Python, die ursprünglich auf C aufgebaut sind? Sollen die neuesten Sprachen nicht besser sein als ihre Vorfahren? Warum müssen wir immer noch das uralte C ++ den neuesten Sprachen vorziehen?
Und ich möchte auch wissen, was in C ++ für die bessere Geschwindigkeit der GUI-Verarbeitung verantwortlich ist. Auf der anderen Seite, was fehlt den anderen neuesten Sprachen?
programming-languages
c++
Vamsi Emani
quelle
quelle
Antworten:
Ich gehöre zu den Leuten, die C ++ - GUI-Apps schreiben (hauptsächlich für Windows). Mit Qt, um genau zu sein. Meine Gründe:
new
, habe ich seltendelete
etwas explizit, weil ich intelligente Zeiger oder dieQObject
Hierarchie verwende.Wie Sie sehen, handelt es sich meist um persönliche Vorlieben. Ich finde es wichtig, dass meine Arbeit Spaß macht, und das bietet mir C ++.
quelle
Weil Geschwindigkeit zählt.
Spiele verwenden 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 ziemlich gut für eine IDE zu funktionieren, da die IDE selbst nicht viele leistungsintensive Aufgaben erledigen muss. (Der Compiler, der Linker und andere Tools sind nicht unbedingt in .NET geschrieben - obwohl, wie wawa in einem Kommentar hervorhebt, einige davon zu sein scheinen (z. B. VB.NET))
Browser müssen auch schnell sein. Immerhin sind sie eine Art sekundäres Betriebssystem. Andererseits 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.
Fazit: Ich würde nicht sagen, dass C ++ unbedingt bevorzugt wird, aber wenn Sie einen Leistungsengpass haben, müssen Sie näher an das Metall heranrücken und dann treffen Sie C ++ (oder C). Manchmal ist es einfacher, alles in C ++ - einer Sprache - zu erledigen.
quelle
Die GUI-Apps, die Sie in C ++ sehen, werden im Allgemeinen aus älteren Gründen erstellt. Python (mit Qt oder Gtk) ist für GUI-Anwendungen sehr nützlich, ebenso wie C #, wenn Sie in einem Windows-Haus arbeiten. Wenn etwas Neues beginnen, entweder sehr viel zu C ++ bevorzugt , weil der Mangel an Klempnerarbeiten , die getan werden muss.
quelle
Denn egal wie viele Leistungstests .NET und ähnliche Massen zeigen, egal wie nahe sie an den Benchmarks liegen, am Ende hat die C ++ - App die Nase vorn. Beim Kaltstart ist es schneller, es ist schneller und es gibt mehr Möglichkeiten, es zu verbessern.
Ich habe in den Startphasen des Projekts zahlreiche Beweise dafür gehört, dass .NET der richtige Weg ist, aber wenn es einmal ausgewählt wurde, waren sie immer ein schwerer Klumpen.
Außerdem ist C ++ heutzutage sehr sicher und einfach zu bedienen, insbesondere mit Frameworks wie Qt oder WTL.
quelle
Die meisten Spiele- Engines sind in C ++ codiert. Auch viele Browser- Engines sind in C ++ codiert. Die GUI 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 Lua-Skriptspiele ]
Nehmen Sie auch beliebte C ++ - GUI-Bibliothek wie Qt. In der aktuellen Version (4.7) wird QML für die GUI verwendet. QML ist grundsätzlich JavaScript mit Qt-Bindungen.
Es gibt also wirklich kein C ++ gegen dynamische Sprachen, es ist gemischt.
quelle
Erster Grund wird sein: (alte) Gewohnheit
Zweiter Grund: geringere Zuverlässigkeit für virtuelle Maschinen, zu installierende Interpreter usw.
Und es gibt immer noch einige hervorragende IDEs, um Code in C ++ zu entwickeln.
quelle
Der Grund ist, dass Sie viel mehr Kontrolle über alles haben, was passiert. Wenn Sie Photoshop in C # schreiben, treten bei einigen Aufgaben schwerwiegende Leistungsprobleme auf. In einer niedrigeren Sprache mit mehr Kontrolle können Sie Verknüpfungen verwenden und bei Bedarf die Optimierung für Dinge vornehmen, die intensiver sind. Dies setzt natürlich voraus, dass Sie C ++ in nicht verwaltetem Code verwenden, nicht C ++ in .NET.
Sehen Sie hier ein kurzes Beispiel.
quelle
C ++ ist statisch typisiert. Dies ermöglicht die Optimierung der Codeausführung im Voraus, indem ein Compiler Ihre Abstraktionen an die verfügbaren Systemprozesse auf einer bestimmten Plattform anpasst. Bisher benötigen dynamische Sprachen eine zusätzliche Softwareschicht (= den Interpreter), die den Zugriff auf Systemressourcen verlangsamt.
quelle
Die meisten Gründe sind technisch oder "über dem Tisch" ... hier sind geschäftliche Gründe oder die "unter dem Tisch":
Verteilen von kompiliertem Code vs. Verteilen von Quellcode. Bei der Entwicklung in C / C ++ verteilen Sie die Binärdateien. Wenn Sie in einer der modernen Sprachen entwickeln, vertreiben Sie die Quelle. Es ist schwierig, die Idee der Verschleierung an das Management zu verkaufen, das gegenüber Aktionären / Investoren vorgehen muss.
Dumme User: Zumindest in den Köpfen des Managements. Sie nehmen immer noch an, dass ihre Benutzer kaum in der Lage sind, auf eine "setup.exe" zu doppelklicken. Wenn Sie die Installation eines Interpreters als Teil des Setups einschließen, schütteln sie den Kopf von einer Seite zur anderen.
Alte Entwickler: Die meisten Leute mit Erfahrung sind schon lange dabei und haben sich nicht mehr auf dem Laufenden gehalten. Sie programmieren in C ++ und nicht in den neueren Sprachen, weil sie die neueren Sprachen nicht kennen.
quelle
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 Steuer auf die Zielplattform, da es sich um Verarbeitungsleistung, installierte Laufzeit, Frameworks usw. handelt. Daher funktioniert es auf einer eingeschränkteren Kundenhardware als eine ähnliche Lösung, die in einer verwalteten / interpretierten Sprache geschrieben ist. Bei einer erfolgreichen kommerziellen Software werden die Entwicklungskosten (bei C ++ möglicherweise höher) durch die Anzahl der Verkäufe amortisiert.
Zusätzlich bietet C ++ normalerweise direkten Zugriff auf System-APIs (wie GUI), was die beste Gelegenheit bietet, die Auslastung zu optimieren und sich von ähnlichen Lösungen zu unterscheiden.
quelle
Ich denke, viel davon hat mit den APIs für GUI-Toolkits zu tun. Alle haben eine C / C ++ - API, aber nicht alle haben (sagen wir) Python-Bindungen. Und manchmal wurden die Toolkits selbst mit Blick auf C ++ geschrieben. Selbst wenn sie andere Sprachen unterstützen, unterstützen sie diese nicht vollständig (z. B. unterstützen sie kein Python
tuple
als Argument).quelle
Sie nennen Browser und Spiele als Beispiele. Beide sind ziemlich leistungskritische Anwendungen, daher ist es sinnvoll, sie in einer einfachen Sprache für Geschwindigkeit zu haben.
Viele andere Anwendungen sind weniger leistungsgebunden und können problemlos in anderen Sprachen geschrieben werden. Insbesondere scheint C # häufig verwendet zu werden. (Und Obj-C, aber es eignet sich nicht wirklich als High-Level, denke ich. Besser als C ++.)
Für die neuesten Programmiersprachen fehlen allerdings gewisse Frameworks. Zum Beispiel gibt es für Python keine brauchbare native GUI-Bibliothek. Sicher, Sie können PyQt oder PyGtk verwenden und sie funktionieren gut, aber am Ende ist dies nur eine erneute Verbindung 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.
quelle
Damit eine Sprache C ++ oder Java ersetzen kann, muss sie das tun, was in diesen Sprachen schmerzlich vermisst wird, und sie muss nicht nur aus eigener Kraft ausgeführt werden. Auch in diese Sprachen wurden enorme Investitionen getätigt. Das bedeutet, dass es auf vielen Plattformen eine Standard-C ++ - Bibliothek gibt, die von Browsern, Spielen und solchen Programmen problemlos verwendet werden kann. Es muss also eine gewisse Trägheit geben. Sprachen nehmen im Gegensatz zu anderen Software-Programmen tendenziell langsam ab.
Wenn Sie es sich ansehen, gibt es Anaconda (RedHats Installationsprogramm) schon seit ungefähr 10 Jahren und es wurde von Anfang an in Python geschrieben. Python war nicht so beliebt, als Anaconda neu war.
Googles Go (golang.org) entwickelt sich sehr schnell. Der Compiler muss noch gebootet werden. Damit die Popularität zunimmt, muss sich die Bibliothek stabilisieren, der Compiler muss gebootet werden und es müssen mehr Benutzer damit arbeiten. Ich habe gehört, dass ein Produktionsprogramm außerhalb von Google in Go geschrieben wurde, und es wird berichtet, dass es in seinem Leben von etwas mehr als einem Jahr noch keine Ausfallzeit hatte.
quelle