Boost vs. QT
-
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.
-
Um nochmal zum Thema zurück zu kommen:
Der Linker linkt bei Qt natürlich nur die Teile, die genutzt werden. Wenn Du nur die QTConainter nutzen willst, werden die Threads nicht gelinkt - auch wenn die in derselben lib stehen.
Zum Speicherbedarf: Das hat nicht nur Platz sondern auch Laufzeitgründe. S. "What every programmer should know about memory". Es spielt heute umso mehr eine Rolle, wenn Apps Multithreaded auf Multicores laufen. Eine über den gesamten Hauptspeicher "verschmierte" Datenstruktur läßt sich nur schwer multithreaded und performant verarbeiten weil ständig die caches geflusht werden müssen.
Jedes MB zählt! Und das gilt für C++ genauso wie für Java, für den Client und den Server, ...
-
Also ich kann dir nur raten Qt für GUI und boost für die anderen Sachen das mach ich genau so weil es einfach besser ist wenn man später mal eine andere GUI benutzen möcht kann man sie einfacher wechseln. Boost ist in meinen Augen nützlicher als die Libs von Qt.
Das ist jetzt meine Meinung.
Grüße,
Nico
-
Boost ist in meinen Augen nützlicher als die Libs von Qt.
Okay. Wieso?
-
Es ist klar, dass Qt bei weitem der Boost Bibliothek überlegen ist, da sie eine vollständige und einheitliche Lösung von Standardaufgabenstellungen liefert. Dabei ist Qt seit langer Zeit keine Framework für GUI Entwicklungen, sondern ein Applikationsframework, während Boost eine Ansammlung von diveresen Bibliotheken ist. Qt ist einfacher zu verwenden, weil sie Polymorphismus, und nicht wie bei Boost, den generischen Ansatz verfolgt, was für die meisten Programmierer einfacher ist. Gerade Missachtung bzw. Nichtverwendung von Polymorphismus bei Boost ist für mich ein K.o. Kriterium für eine moderne objekt-orientierte Bibliothek. Durch den modularen Aufbau lässt sich Qt sehr gezielt verwenden, ist, was Portabilität angeht, auf jedem Fall auf dem Niveau von Boost, ist offen, liefert ein absolut vollständiges Packet für Anwendungsentwicklung und nicht zuletzt spricht nichts dagegen, Boost innerhalb der Qt-Applikation zu verwenden...
-
lepsai schrieb:
Es ist klar, dass Qt bei weitem der Boost Bibliothek überlegen ist
Es ist nicht klar sondern deine Meinung
da sie eine vollständige und einheitliche Lösung von Standardaufgabenstellungen liefert.
Die da wären? Qt bastelt halt (aus historischen Gründen) recht viel selber an der STL vorbei. Eigene Streams, eigener String, eigene Container (die beiden letzten nutzen im Gegensatz zur STL implicit sharing, war aber nicht der Hauptgrund für eigene Container/Strings).
Dabei ist Qt seit langer Zeit keine Framework für GUI Entwicklungen, sondern ein Applikationsframework, während Boost eine Ansammlung von diveresen Bibliotheken ist.
Ja, aber boost hat bestimmte Coding-Guidelines, so dass es beim Verwenden nicht auffällt, dass die einzelnen Teile von verschiedenen Programmieren stammen. Außerdem kann man problemlos einzelne Komponenten miteinander verbinden.
Qt ist einfacher zu verwenden, weil sie Polymorphismus, und nicht wie bei Boost, den generischen Ansatz verfolgt, was für die meisten Programmierer einfacher ist. Gerade Missachtung bzw. Nichtverwendung von Polymorphismus bei Boost ist für mich ein K.o. Kriterium für eine moderne objekt-orientierte Bibliothek.
Auch boost setzt auf Polymorphie! Während es bei Qt die Laufzeit-Polymorphie (LP) ist, setzt boost auf Compilezeit-Polymorphie (CP). Dass LP jetzt besser ist als CP ist mir neu! LP hat einen gewissen Laufzeit-Overhead, den CP vermeidet. Vor allem versteh ich nicht, dass LP modern und CP dann wohl überholt ist - schau mal was für templates alles an neuen wunderbaren Sachen in C++0x kommen wird (leider hat es concepts nicht geschafft, AFAIK) - setzt C++ auf ein totes Pferd?
virtual muss genauso wie templates erstmal verstanden werden. Wenn man voll in die Metaprogrammierung einsteigen will, ist das sicher härter als mit virtual rumzubasteln, aber der normale Anwender sollte bei der Verwendung von boost nicht wirklich viel vertehen müssen. Aber auch virtual gehört verstanden, kann lustige Probleme verursachenDurch den modularen Aufbau lässt sich Qt sehr gezielt verwenden
In meinen Augen ein größeres Plus für boost, denn dort kann ich mir aus den vielen "Mini"-Libs die aussuchen die ich will, bei Qt muss ich immer das komplette Modul (core/gui/xml(patterns)/...) mitschleppen - boost ist "gezielter" als Qt.
Ein Blick in die boost/qt-Doku verrät: die Schnittmenge der beiden ist recht gering (wurde auch schon gesagt). Deshalb kann Qt eigentlich nicht besser sein als boost. Qt zieht aber einiges an zusätzlichen Abhängigkeiten an. Wenn klar ist dass das ein reines Qt-Projekt wird, ist es mMn. auch kein Problem, gleich alles mit QSocket, QString usw. zu durchziehen. Ist das nicht sicher, sollte ein Blick in Richtung boost (oder sonst eine Lib) gewagt werden, dann braucht das Programm später nicht Qt und wxWidgets oder einen kompletten rewrite.
-
Boost vs QT:
Qt-Container setz ich nur ein, wenn ich die QT(Als GUI) in dem Modul eh scho verwende.
Nur wegen den QT-Containern ein ansonsten unabhängiges Modul von den QT dlls abhaengig machen, das wird von der Pflege her fast Selbstmord.
Wenn mal Module programmiert hasst, mit QT abhaengigkeiten, die mit anderen Modulen im Selben Programm residieren, die von anderen entwicklern kommen, und auch QT Abhaengigkeiten haben, und die Anwendung selber Implementiert auch noch die Gui mit QT, dann weisst wovon ich red
Iss ganz lustig wenn sich mehrere Firmen zusammensetzen muessen um sich ueber eine globale QT version inclusive zu vermeidende Compilerflags zu einigen.QT Versionen sind nicht 100% binaerkompatibel. Sobald Du nen groesseren Sprung drinne hasst, 4.5.x auf 4.6.x z.b. wars dass ... und die dlls heissen trotzdem gleich !
Und nen update auf ne hoehere Version kann nem Unternehmen schon mal paar Euronen kosten.Spaetestens ab dann liebst du QT freie Module oder linkst die QT nur noch statisch ^^
boost, zumindest die meisten teile die ich oefters brauch, sind header implementiert, und werden beim includieren meist automatisch statisch zucompiliert und gelinkt, also fast problemlos.Ansonsten:
Der Vorteil der Qt ist das "userfreundlichere" "java like" Interface.
Der Nachteil, zu gunsten besserer Performance einer naiven verwendbarkeit, ist das das Verhalten der Qt weniger genau spezifiziert und vorhersehbar ist.Implizietes sharing der Daten z.b.
Fuer naive verwendung bringt das nen massiven Performance schub in gewissen situationen.
Der Nachteil, es werden weniger Zusagen gemacht, so ist laufzeitverhalten oft nicht genau definierbar.
Wenn man also mehr lowlevel und mehr mit multithreading und mehr selber auf bestimmte faelle optimieren muss, ist die boost und die stl besser geeignet.Ciao ...
-
@l'abra d'or
zum Thema Vollständige und einheitliche Lösung:
1. Basiskonstrukte (Strings, Filesystem, Time, Threading, Object-Interkommunikation, Metainfos, Bestriebssystem-Services, usw.)
2. High-Level Abstraktionen z.B. Datenbankwrapper, Netzwerk, XML support, Test-Framework
3. Vollständiges GUI-Framework, inkl. UI-Designer, Meta-Compiler und volle Palette von StandardwidgetsDie Qt API ist sehr elegant und sehr einheitlich, man sieht, dass darauf großer Wert gelegt wird.
Was Polymorphie angeht, habe ich nicht gesagt, dass LP besser oder moderner ist als CP (was sowieso subjektiv wäre), sondern dass Boost nur eine Variante, nähmilch CP verwendet. Und das ist falsch, weil je nach Use-Case bietet die Mischung aus beiden Möglichkeiten das optimale Ergebnis. Zu sagen, dass "das richtige" C++ soll nur CP verwenden, ist Quatsch, weil LP der wichtigste Baustein einer OO-Sprache ist. Man könnte sogar sagen, dass Anwendung von LP ist ein Grundvoraussetzung beim objekt-orientierten Design.
Übrigens, auch der Vorwurf, Qt entwickelt sich an STL vorbei, kann man nicht wirklich gelten lassen, da z.B. Qt-Container STL-kompatibel gehalten werden.
Ausserdem muss ich anmerken, dass Qt STL komplett überflüssig macht, aber das nur am Rande. Sicherlich kann man spezifische Boost-Bibilotheken in Qt-Kontext verwenden - es spricht sicherlich nichts dagegen, aber komplett auf Boost aufzubauen, halte ich persönlich für falsch.Gruß