Boost vs. QT
-
Eisflamme schrieb:
Was mich heute interessiert, ist, ob Boost oder QT unterschiedlich sind.
QT und Boost haben nur eine Teilüberschneidung. QT ist ein Framework was versucht alles abzubilden (von DB-Zugriffen bis Oberflächenprogrammierung), Boost ist eine Bibliothekssammlung die eher auf der Denkweise der STL, und bei weiten nicht versucht alles abzubilden.
Ich ziehe STL und Boost für die Programmlogik vor, und umfangreichere Frameworks für die Reine Datenbank- und UI-Schicht.
Gerade wenn ein Projekt Jahre oder Jahrzehnte gepflegt wird (wie die letzten beiden an denen ich gearbeitet habe), ist es zumindest in meinen Augen sinnvoll, sich nicht zu viele Abhängigkeiten zu riesigen Frameworks zu holen (Ich habe schon mehrere Frameworks sterben sehen, und Firmen die mit aller Gewalt an diesen, schon seit vielen Jahren nicht mehr unterstützten Frameworks hangen, und mit jeder OS-Generation mehr Ärger bekommen haben).
Die STL oder Boost halte ich für wesentlich "stabiler" als z.B. QT, MFC, VCL usw. Zudem kann es immer mal passieren das ein "besseres" Framework kommt, das z.B. für die UI besser geeignet ist. Bei schnelllebigen Projekten ist dies kein Problem, bei langlebigen würde ich zumindest eine grundsätzliche Austauschbarkeit als wichtig erachten.
Etwas ganz anderes habe ich zudem in Projekten erlebt die sich auf ein Framework eingeschossen haben: Häufig wird die Programmlogik früher oder später in die GUI gelagert (Das ist zwar kein Zwang, aber eine Tendenz die ich aus Projekten fest gestellt habe).
-
Ich nutze Qt nur für die Sachen, die mir die Standard-Bibliothek bzw. boost nicht liefern. Ausnahme: Netzwerk, da Nutze ich ebenfalls Qt.
Der vielbeschworene Vorteil von Qt - nämliche der schnelle Einstieg und das einfache Anwenden - sind m.E. auch dessen Fluch. Wie der Threadstarter oben bereits angedeutet hat: Da wird dann munter GUI und Netzwerkcode gemischt und, was ich am schlimmsten finde, sobald die Leute das mit signal und slot verstanden haben, fliegen unzählige Signale durchs System, weil der Mechnismus auch für nicht Qt Logik verwendet wird.
Dann ist das Framework mit dem Rest des Programms "verklebt" was die Wartung unnötig erschwert.
-
Okay, aber die Argumente der Verschmelzung von UI und Programmlogik gelten ja für den aufmerksamen Programmierer nicht, oder?
Ich mein, das kann passieren, aber kann man das als ernsthaftes Argument durchgehen lassen? Schwierig, würde ich sagen.
Mit der Langlebigkeit der Projekte stimmt das mit Boost vs QT womöglich schon. Aber ich glaube, so etwas entwickle ich zur Zeit nicht.
Na ja und sonst so? Wegen der Aufgeblähtheit wurde mir entgegnet, dass durch die Modularisierung von QT das eigentlich kein Argument sei, da sowieso immer nur das eingebunden wird, was verwendet wird. Ich bin ehrlich gesagt nicht sicher, wie viel davon eingebunden wird oder nicht, ob es, um als Windowsnutzer zu sprechen, für Teile gesonderte libs gibt und dass die Header halt auch wie üblich eben nur bestimmte Funktionalitäten einbinden.
Und dann verstehe ich nicht: Wenn QT mehr als Boost hat und man beides nutzt, wieso dann nicht nur QT? Ebenfalls Austauschbarkeitsmöglichkeit für den UI-Teil erhalten?
-
Austauschbarkeit für den GUI-Part ist ein Argument. Das andere mit der Abhängigkeit zu X hast du ganz unterschlagen
boost selbst braucht eigentlich nur die STL (in vielen Bereichen nicht mal das) und einen C++-Compiler. Plattformspezifische Sachen für asio und threads sollten sowieso vorhanden sein.
Um was für Teile geht es dir denn jetzt speziell? SQL? wirklich schwerer ist das manuelle Handhaben nicht. Einziger Vorteil: ich kann den Datenbanktreiber on-the-fly ändern. Aber ehrlich: wann machst du das?
Entweder soll die DB eine einfache Variante sein, Daten deiner Desktop-Applikation zu speichern -> sqlite.
Oder du brauchst eine komplexe DB, Zugriffe sind Zeitkritisch -> MySQL/PostgreSQL/...
Du möchtest keinen SQL-Server laufen lassen? sqlite, mysql-embedded, User-eigener mysqld.
usw.
Es ist also nur minimal bequemer mit QtSQL, dafür bindest du dich absolut an QT, denn QtSQL arbeitet mit QVariant! Dadurch werden die SQL-Typen in Qt-Typen "gecastet", was eine Verwendung in einer anderen Umgebung als Qt erschwert und ein ganzes Projekt neu geschrieben werden darf, sollte Qt wegfallen.Dass Qt modular ist ist ja schön, aber SO modular ist es auch wieder nicht. libQtCore enthält schon so viel, was man nicht unbedingt braucht - Threads, Regexp, usw. Mit boost kannst du das wenn nötig mitlinken, ansonsten lass es weg. libQtCore hat hier 2,6MB, libQtNetwork hat 1,2MB.
Macht für bissl Core-Funktionalität gleich 3,8MB! Wenn eh schon Qt läuft ist es egal...Verwende std::tr1 (oder Funktionen wie threads, die mit dem nächsten Standard kommen, aber jetzt schon von den meisten std-libs/compilern unterstützt werden) und du solltest gar kein Argument mehr für Qt haben.
Wenn du weißt, dass du nur Qt für die Gui einsetzen wirst, dann ist es natürlich absolut kein Problem, für alles andere auch gleich Qt zu nehmen - wobei ich auch hier mittlerweile genau überleg ob ich das wirklich will
-
Hi,
Okay, das sind doch Mal eine Hand voll Argumente. Ich dachte mir doch gleich, dass ich wieder nur Halbwissen-Geschwätz präsentiert bekomme, denn richtige Argumente von meinem Kollegen außer "das ist viel leichter" gab es nicht... aber hätte ich auch nicht erwartet.
Von X habe ich keine Ahnung, das wird dann unter Linux relevant sein, oder? Keine Ahnung, ob ich da X installieren würde oder nicht.
Ich glaube, dann finde ich Boost + QT tatsächlich doch ganz cool. Vielleicht weiß ich zum Teil ja nicht Mal, ob ich eine Oberfläche benutzen möchte... oder ich will die halt nachher tatsächlich Mal ersetzen. Wenn SQL so eine Abhängigkeit zu QT schafft, würde ich das wohl tatsächlich nicht benutzen.
Nagut, danke! Weitere Punkte interessieren mich natürlich nach wie vor!
-
Eisflamme schrieb:
Wenn SQL so eine Abhängigkeit zu QT schafft, würde ich das wohl tatsächlich nicht benutzen.
Grundsätzlich habe ich gegen eine QT-Abhängigkeit nichts, solange sie nur bestimmte Schichten der Anwendung betrifft (Wenn die Schnittstelle zur Datenschicht kein QT enthält, es aber in dessen Implementierung enthalten ist, kann man es dennoch leicht austauschen).
-
Eisflamme schrieb:
Nach kurzer Recherche im Internet habe ich nur wenig gefunden, allerdings u.a. einige, die QT und Boost gemischt einsetzen, was wohl heisst, dass QT fuer Oberflaechen und Boost fuer die Logik verwendet wird.
Wieso wuerden diese Leute nicht nur QT benutzen?
Weil diese Leute, wenn ihre Anwendung sowas wie eine Architektur besitzt, GUI und Programmlogik voneinander getrennt in verschiedenen Modulen/Schichten implementieren und jede Schicht die Frameworks/Bibliotheken benutzt, die für die jeweilige Aufgabe (nach Meinung des Entwicklers/Designers) am Besten geeignet ist. Also beispielsweise QT für die GUI-Schicht, einzelne boost-Bibliotheken für die Anwendungslogik usw.
-
l'abra d'or schrieb:
Dass Qt modular ist ist ja schön, aber SO modular ist es auch wieder nicht. libQtCore enthält schon so viel, was man nicht unbedingt braucht - Threads, Regexp, usw. Mit boost kannst du das wenn nötig mitlinken, ansonsten lass es weg. libQtCore hat hier 2,6MB, libQtNetwork hat 1,2MB.
Macht für bissl Core-Funktionalität gleich 3,8MB! Wenn eh schon Qt läuft ist es egal...Sag mal das ist nicht dein ernst du Hoschi? Im Zeitalter von mehreren GB RAM ist es so etwas von Schnuppe ob eine einzelne Anwendung 1MB oder 10MB schluckt. Auf das Rausgerede bin ich jetzt mal gespannt aber ich denke ich werde wieder laut lachen.
-
GigaBytes schrieb:
Sag mal das ist nicht dein ernst du Hoschi? Im Zeitalter von mehreren GB RAM ist es so etwas von Schnuppe ob eine einzelne Anwendung 1MB oder 10MB schluckt. Auf das Rausgerede bin ich jetzt mal gespannt aber ich denke ich werde wieder laut lachen.
Freut mich, dass du bei meinen miesen Kommentaren wenigstens deinen Humor behalten hast.
Es mag sein, dass DU mehrere GB hast, ich hab auf meinem Desktop nur eines, das mir leider auch immer viel zu schnell ausgeht... Du ignorierst desweiteren Geräte, die nur über beschränkte Ressourcen verfügen, bei denen macht das sicher einiges aus.
Und möglichst ressourcenschonend programmieren sollte man unbedingt! Oder legst du auch per Default immer Arrays mit zigtausend Elementen an, obwohl du in 99,9% der Fälle nur 0,1% davon brauchst, in den restlichen 0,1% evtl. 2%? "Ist ja egal, hab ja genügend Speicher". Mannmannmann, du hoschi...Außerdem, das war nur ein Punkt den ich erwähnt habe, der ins Gewicht fallen kann, also das nächste Mal den Post nochmal lesen und in angemessenem Ton dein Kontra geben.
-
pumuckl schrieb:
Eisflamme schrieb:
Nach kurzer Recherche im Internet habe ich nur wenig gefunden, allerdings u.a. einige, die QT und Boost gemischt einsetzen, was wohl heisst, dass QT fuer Oberflaechen und Boost fuer die Logik verwendet wird.
Wieso wuerden diese Leute nicht nur QT benutzen?
Weil diese Leute, wenn ihre Anwendung sowas wie eine Architektur besitzt, GUI und Programmlogik voneinander getrennt in verschiedenen Modulen/Schichten implementieren und jede Schicht die Frameworks/Bibliotheken benutzt, die für die jeweilige Aufgabe (nach Meinung des Entwicklers/Designers) am Besten geeignet ist. Also beispielsweise QT für die GUI-Schicht, einzelne boost-Bibliotheken für die Anwendungslogik usw.
Klar, ich würde das auch voneinander trennen, MVC z.B. und so.
Mir geht es jetzt aber mehr darum, wieso für die Datenschicht extra boost und nicht QT verwendet worden ist, hätte man mit QT doch nur eine Bibliothek/ein Framework einbinden müssen.
-
GigaBytes schrieb:
Sag mal das ist nicht dein ernst du Hoschi? Im Zeitalter von mehreren GB RAM ist es so etwas von Schnuppe ob eine einzelne Anwendung 1MB oder 10MB schluckt. Auf das Rausgerede bin ich jetzt mal gespannt aber ich denke ich werde wieder laut lachen.
Auweia, auf welcher Schule bekommt man denn sowas eingetrichtert?
Klar, nach der Logik kannst du arbeiten. Aber wie heißt es so schön: auch Kleinvieh macht Mist, und wenn du dein "Konzept" nur lange und konsequent genug verfolgst, hast du irgend wann eine Applikation, die für minimalen Funktionsumfang so viel Ressourcen verbraucht, dass die Anwender dann laut über dich lachen.
Mal abgesehen davon solltest du mit dieser Einstellung nie versuchen, Geld mit Software in den Bereichen
- Prozessteuerung
- Automation
- Visualisierung
- hardwarenahe Programmierung
- Embedded Systems
- Treiberentwicklung
- Echtzeitapplikationen
zu verdienen (ich habe bestimmt noch 'zig andere vergessen, das sind die, die mir auf Anhieb einfallen).
-
/edit pumuckl: das Ganze nochmal sachlich und nciht beleidigend bitte, dann lass ichs auch stehen.
-
LochimEimer schrieb:
Und nochmal für die ganz ganz Gehrinamputierten ich meine hier keine Kernel, Treiber, Dienste etc. sondern irgendwelche StandAloneSoftware.
Und wo steht das in deinem Posting? Hinterher schlau tun und behaupten so wäre es nicht gemeint gewesen kann jeder.
LochimEimer schrieb:
Ende der Kommunikation, denn ich habe kein Bock auf noch sone Idiotenantwort.
Ah, du bist also ein Freund der sachlichen und professionellen Kommunikation. Zurück in deinen Gully mit dir!
-
Don't feed the troll and don't start a side discussion about bullshit.
-
LochimEimer schrieb:
<zensiert>
Wir haben nichts zu sagen, deshlab packen wir die Aggro-Keule aus
Da du entweder wirklich keinen Peil hast, oder einfach grad auf irgendwen Sauer bist, ein kleines Beispiel aus der Praxis:
Erinnere dich an das Windows Vista-Desaster, wegen dem MS das ungeliebte XP weiter hat pflegen müssen, weil sich irgend welche Entscheider nicht um Ressourcen geschert haben, und deshalb Vista auf Netbooks unbenutzbar war. Das hat am Ende dazu geführt, dass XP-Support nochmal um einige Monate/Jahre hat verlängert werden müssen, der natürlich auch kostet (Code-Wartung, Kundensupport, ...), und garantiert ettliche Millionen $ geschluckt hat. Da hat man wohl auch gedacht "wir haben ja zig GB Arbeitsspeicher ung $MEGA-Gigahertz-Prozossoren, da muss man nicht so aufpassen was man treibt".
-
Bitte beim Thema bleiben und sachlich bleiben.
-
l'abra d'or schrieb:
LochimEimer schrieb:
<zensiert>
Wir haben nichts zu sagen, deshlab packen wir die Aggro-Keule aus
Da du entweder wirklich keinen Peil hast, oder einfach grad auf irgendwen Sauer bist, ein kleines Beispiel aus der Praxis:
Erinnere dich an das Windows Vista-Desaster, wegen dem MS das ungeliebte XP weiter hat pflegen müssen, weil sich irgend welche Entscheider nicht um Ressourcen geschert haben, und deshalb Vista auf Netbooks unbenutzbar war. Das hat am Ende dazu geführt, dass XP-Support nochmal um einige Monate/Jahre hat verlängert werden müssen, der natürlich auch kostet (Code-Wartung, Kundensupport, ...), und garantiert ettliche Millionen $ geschluckt hat. Da hat man wohl auch gedacht "wir haben ja zig GB Arbeitsspeicher ung $MEGA-Gigahertz-Prozossoren, da muss man nicht so aufpassen was man treibt".Mal im Ernst, wie soll man bei so einer Gülle ruhig bleiben? Ich schreibe etwas von einzelnen StandAloneAnwendungen und der hier kann wieder nicht lesen oder verstehen und fängt wieder mit der ganzen Grütze an die ich extra ausgeschlossen hatte. Mann mit dem ganz tollen WauWau Namen: Erst lesen dann schreiben, haste bestimmt schon einmal gehört.
-
einmal noch: beim Thema bleiben (Boost vs. QT). Gilt für alle.
-
@LochImEimer:
Ich verstehe nicht warum du dich so streubst. Es war hier nie die Rede von Desktopanwendungen, es ging darum immer gleich auf Qt zu setzen - oder eben nicht.
Man sollte sich in jedem Fall vorher Gedanken darüber machen, was die Zielplattformen sind. Ist von vornherein nicht auszuschließen, dass das Programm auch auf schwachen embedded-Systemen laufen soll, dann verzichte ich in den interessanten Bereichen von vornherein auf Qt und schau mich nach Alternativen um. Wenn boost eine schöne Alternative bietet - toll, nehm ich das!
Das schöne an boost ist ja eben, dass man explizit ein Feature anziehen kann, das man braucht, ohne gleich einen ganzen zusätzlichen Rattenschwanz (wie bei Qt) zu bekommen. Brauch ich einen XML-Parser, greif ich ja auch nicht blind zu QtXML, sondern nehm (z.B.) rapidxml oder pugixml (letzteres kann XPath, was Qt jedenfalls in 4.6.3 nicht kann). Pumuckl hat es schon gesagt: Jede Schicht das Minimum an Abhängigkeiten, die nötig sind.Das Vista-Beispiel hab ich nicht wg. meinen fehlenden Lesefähigkeiten gebracht, sondern um dir zu zeigen, dass man bei ordentlich gesteckten Zielen BEVOR man losprogrammiert, einige Probleme im Vorfeld vermeiden kann, und dazu gehört auch "Kann die Software auf System XYZ laufen?".
-
l'abra d'or schrieb:
um dir zu zeigen, dass man bei ordentlich gesteckten Zielen BEVOR man losprogrammiert, einige Probleme im Vorfeld vermeiden kann, und dazu gehört auch "Kann die Software auf System XYZ laufen?".
Ich weiß nicht, ob er es nicht kapieren kann oder will (der Nick bietet allerdings Raum für Spekulationen).
Auf alle Fälle wäre es besser, wenn er NIE Software für Geld entwickeln würde. Dann gäbe es zwei Möglichkeiten: seine Chefs bekommen mit, was er für einen Mist baut und schmeißen ihn raus (dann dürfen andere seine Designfehler ausbaden), oder sie tun es nicht und gehen mit ihrem Produkt so richtig baden.
@Pumuckl: es geht hier um das Thema Boost/Qt, auch wenn die beiden Worte derzeit nicht fallen ist exakt dieses Thema Gegenstand des Gesprächs - nur momentan halt auf Ebene grundsätzlicher Designfragen.