Kennt jemand die Boost Library und was man damit anfangen kann? http://www.boost.org/ Wird die viel verwendet oder läuft das Projekt eher aus?
:
Verschoben durch Admin
Das ist die mithin bekannteste C++ library neben der STL. Sie gilt als das Experimentierfeld in dem Dinge definiert und getestet werden, um später in den C++-Standard einzufliessen. Damit kann man eigentlich nichts falsch machen. Außerdem kann man in die Implementierung schauen, wenn man daran interessiert ist, was alles mit Templates geht (werden heftigst verwendet).
chris_ schrieb: > Kennt jemand die Boost Library und was man damit anfangen kann? Wie wäre es mit Wikipedia?: http://de.wikipedia.org/wiki/Boost_%28C%2B%2B-Bibliothek%29 > Wird die viel verwendet oder läuft das Projekt eher aus? Das eine hat mit dem anderen wenig zu tun. Das Projekt wird kontinuierlich betreut und Teile davon wurden schon zum Standard. Und was heisst "viel verwendet"? Entweder kann man sie gebrauchen oder eben nicht. Oder geht es Dir um Statistiken?
:
Bearbeitet durch Moderator
>Das ist die mithin bekannteste C++ library neben der STL. Klingt interessant. Obwohl ich mich jetzt schon einige Jahre auf dem Embedded Gebiet bewege, habe ich von beiden bis jetzt noch nichts gehört. Sind die Libraries eher für PC's gedacht? Oder, das Du Physiker bist: Werden diese Libraries eher im wissentschaftlichen Bereich verwendet? Ich habe gerade mal bei Wikipedia zur STL nachgesehen: http://de.wikipedia.org/wiki/Standard_Template_Library und da steht Folgendes: "Inoffiziell hat die Bezeichnung STL weite Verbreitung. Die unterschiedlichen Vorstellungen über die Bedeutung dieses Begriffs führen aber bisweilen zu Missverständnissen"
Hier gibt es ein Video zur STL: http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Standard-Template-Library-STL-/C9-Lectures-Introduction-to-STL-with-Stephan-T-Lavavej Kennt jemand ein Boost-Demo-Projekt für das STM32F4 Discovery?
chris_ schrieb: > Boost-Demo-Projekt Wofür? Wenn du seit Jahren C++ programmierst, ohne daß dir jemals der Begriff STL oder boost begegnet ist, brauchst du daß jetzt auch nicht. Ansonsten ist boost eine bunte Wundertüte. Das allermeiste darin ist als Sourcecode in reinen headerfiles implementiert, und damit unabhängig vom target. Doku lesen, runterladen, installieren, benutzen, fertig. Templates sollten dir aber schon irgendwie ein Begriff sein. Oliver
:
Bearbeitet durch User
Mal an die Mitleser: Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) gehört oder damit gearbeitet? Ich schätze, dass es eher weniger Leute sind, aber um das mal ein wenig zu quantifizieren, würde mich eure Antwort interessieren. Als bitte z.B. auch mit "nie" antworten.
chris_ schrieb: > Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) > gehört oder damit gearbeitet? also STL verwende ich ständig, boost war mir bekannt aber noch nie verwendet weil mir "irgendwie" zu groß. Aber auf meinen kleinen µC verwende ich auch STL nicht. Das ist etwas für den PC, Templates erzeugen große Dateien.
Boost schon ausprobiert und einiges zu Templates abgeschaut. Da zeigt sich was C++ kann, abseits des üblichen "viel zu kryptisch, versteh ich nicht" Gejammers. BTW, KiCad benutzt Boost.
Jeder Programmierer, der behauptet C++ zu können, sollte schonmal mit der STL und wahrscheinlich auch Boost in Kontakt gekommen sein. Wenn nicht, dann glaubt derjeniger vermutlich immer noch, dass C++ nur C mit Klassen sei.
chris_ schrieb: > Mal an die Mitleser: > > Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) > gehört oder damit gearbeitet? > Ich schätze, dass es eher weniger Leute sind, aber um das mal ein wenig > zu quantifizieren, würde mich eure Antwort interessieren. Als bitte z.B. > auch mit "nie" antworten. Jeden Tag. Grüsse, R.
Oliver S. schrieb: > Wofür? Wenn du seit Jahren C++ programmierst, ohne daß dir jemals der > Begriff STL oder boost begegnet ist, brauchst du daß jetzt auch nicht. Genau, wer brauchst schon strings, arrays, Integer-Typen... Wie schon bemerkt ist der Begriff "STL" irreführend. Heutzutage™ ist er quasi gleich gesetzt mit "C++ Standard Library", und enthält damit alles von C++, was nicht Teil der Sprache selbst ist, auch die Dinge die keine templates sind. Dazu gehören eben zB Dinge wie * die Integer-Typen uint32_t etc., * strings (std::string) * I/O (std::cout, std::cin) * Arrays (std::vector, std::array) * Algorithmen (std::find, std::max, ...) * Threads (std::thread) * Datum/Zeit-Berechnung (std::chrono) ... etc. etc. Wer C++ programmiert ohne davon schonmal gehört zu haben macht etwas falsch (oder verwendet ein Framework wie Qt was ähnliche Dinge enthält). chris_ schrieb: > Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) > gehört oder damit gearbeitet? STL sollten 100% der C++ Entwickler gehört haben, Boost 95%. Wobei "C++ Entwickler" natürlich nicht Kiddies beinhaltet die ein bisschen Source copy&pasten können... Peter II schrieb: > Das ist etwas > für den PC, Templates erzeugen große Dateien. Sieht man zB hieran:
1 | int test (int a, int b) { |
2 | return std::max<int> (a, b); |
3 | }
|
Ergibt auf Cortex-M3:
1 | 0: 4288 cmp r0, r1 |
2 | 2: bfb8 it lt |
3 | 4: 4608 movlt r0, r1 |
4 | 6: 4770 bx lr |
3 Instruktionen! Viel mehr als wenn man klassisch in C Makros verwendet:
1 | #define max(a,b) ((a) > (b) ? (a) : (b))
|
2 | |
3 | int test (int a, int b) { |
4 | return max (a, b); |
5 | }
|
ergibt:
1 | 0: 4288 cmp r0, r1 |
2 | 2: bfb8 it lt |
3 | 4: 4608 movlt r0, r1 |
4 | 6: 4770 bx lr |
Selbst Arduino verwendet die C++ Standard Library ("STL").
Dr. Sommer schrieb: > Peter II schrieb: >> Das ist etwas >> für den PC, Templates erzeugen große Dateien. > Sieht man zB hieran: dann verwende doch mal ein paar Container mit unterschiedlichen Datentypen und dann ein sort darauf. für jedes Template und jeden Datentype wird eine Instance der Klasse angelegt und das sogar für jedes Sourcefile (das kann man aber mittlerweile ändern). Klar es ist dann schön bequem, aber leider auf kosten der Programmgröße.
Dr. Sommer schrieb: > 3 Instruktionen! Viel mehr als wenn man klassisch in C Makros verwendet: Ich habe mir wirklich viel Mühe beim Zählen gegeben, komme trotzdem jedesmal auf 4. Und der Unterschied zur "Makro-Version" will mir auch nicht so recht aufgehen???
Peter II schrieb: > für jedes Template und jeden Datentype wird eine Instance der Klasse > angelegt und das sogar für jedes Sourcefile (das kann man aber > mittlerweile ändern). Auch wenn die Begriffe falsch verwendet sind, ist diese Aussage richtig. Aber nur weil sort komplex ist und groß wird, heißt das noch lange nicht dass man grundsätzlich keine templates verwenden darf. Man muss nur wie immer wissen, wo sie geeignet sind und wo nicht. Peter II schrieb: > Klar es ist dann schön bequem, aber leider auf kosten der Programmgröße. Bequem und vor allem sicher. Der Code wird groß, aber schnell... (ca doppelt so schnell wie das normale sort() in C, habe ich mal verglichen).
Markus F. schrieb: > Ich habe mir wirklich viel Mühe beim Zählen gegeben, komme trotzdem > jedesmal auf 4. Die 4. ist "bx lr", das gehört nicht zum "max" sondern ist der Funktionsrücksprung, daher nicht gezählt. > Und der Unterschied zur "Makro-Version" will mir auch nicht so recht > aufgehen??? Das war der Sinn des Vergleichs. Das template ist an der Stelle angemessen eingesetzt und macht den Code nicht größer.
sebi707 schrieb: > Jeder Programmierer, der behauptet C++ zu können, sollte schonmal mit > der STL und wahrscheinlich auch Boost in Kontakt gekommen sein Nun ja, die Frage, was der TO mit "STL" eigentlich meint, ist ja noch offen. Vieles von dem, was ursprünglich als STL entwickelt wurde, ist ja seit langem Bestandteil der C++-Standardlibrary, wird aber immer noch landläufig als "STL" bezeichnet. Die Frage, ob die irgend jemand die C++-Standardlib schon mal benutzt hat, ist allerdings wirklich sinnfrei. Und mit boost läuft das ähnlich, der aktuelle C++-Standard hat ja einiges davon in die Sprache aufgenommen. Oliver
Peter II schrieb: > dann verwende doch mal ein paar Container mit unterschiedlichen > Datentypen und dann ein sort darauf. Ein int sortiert sich nunmal anders als ein string. Dein Argument ist sicherlich nicht komplett falsch, aber im nicht embedded Bereich macht eine größere Executable nicht so viel.
Oliver S. schrieb: > Die Frage, ob die irgend jemand die > C++-Standardlib schon mal benutzt hat, ist allerdings wirklich sinnfrei. Es gibt sicherlich Leute, die vorher C programmiert haben, aber zu C++ wechseln, weil sie mal irgendwo gehört haben, dass Klassen toll sind. Statt dann auch die C++ Standardbibliothek zu benutzen, bleiben so manche Leute in ihrer "C-Mentalität" und basteln nur ein paar Klassen um ihren C-Code. Das ist dann in meinen Augen aber auch kein wirkliches C++.
sebi707 schrieb: > Ein int sortiert sich nunmal anders als ein string. Dein Argument ist > sicherlich nicht komplett falsch, aber im nicht embedded Bereich macht > eine größere Executable nicht so viel. deswegen, habe ich geschrieben das es nur bei µC darauf verzichte.
>deswegen, habe ich geschrieben das es nur bei µC darauf verzichte.
Also insgesammt eine Sache für den PC und nicht für den uC.
Allerdings: Ein STM32F4 ist ja nun auch nicht mehr so klein.
chris_ schrieb: > Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) > gehört oder damit gearbeitet? STL: Mein taeglich Brot (aber nicht Embedded, sondern auf PCs) Boost: Kenne ich, verwende ich aber (bislang) nicht. Oliver S. schrieb: > Vieles von dem, was ursprünglich als STL entwickelt wurde, ist ja > seit langem Bestandteil der C++-Standardlibrary, wird aber immer noch > landläufig als "STL" bezeichnet. Ja, normalerweise bezeichnet man mit STL den Teil der STL, der in die Standardbibliothek aufgenommen wurde. Ist aber meines Wissens der ueberwiegende Teil. Halte es durchaus fuer korrekt das weiterhin STL zu nennen.
chris_ schrieb: > Mal an die Mitleser: > > Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) > gehört oder damit gearbeitet? > Ich schätze, dass es eher weniger Leute sind, aber um das mal ein wenig > zu quantifizieren, würde mich eure Antwort interessieren. Als bitte z.B. > auch mit "nie" antworten. Bis. ca. 2008 mit beiden gearbeitet.
Vielen Dank für eure Antworten. Bis jetzt haben nur Leute geantwortet, die Boost irgendwie kennen. Das könnte aber auch an der Überschrift des Threads liegen. Diejenigen, die mit dem Begriff nichts anfangen können, werden diesen Thread wohl auch nicht lesen.
Peter II schrieb: > sebi707 schrieb: >> Ein int sortiert sich nunmal anders als ein string. Dein Argument ist >> sicherlich nicht komplett falsch, aber im nicht embedded Bereich macht >> eine größere Executable nicht so viel. > > deswegen, habe ich geschrieben das es nur bei µC darauf verzichte. Templates auf Mikrocontrollern grundsätzlich nicht zu benutzen, ist nicht unbedingt klug. Man muss sich nur immer vor Augen halten, was ein Template ist bzw. was es tut, und was nicht. Das Template-System von C++ ist nichts anderes als ein Makro-Prozessor, allerdings ein in vielerlei Hinsicht sehr viel leistungsfähigerer als der C-Präprozessor. Viele Dinge, die man in C mit Makros realisieren würde, gehen in C++ elegenater und sicherer mit Templates. Mitunter schreibt man in C zwei oder mehr Funktionen mit ähnlicher Funktionalität, aber unterschiedlichen Argumenttypen, unterschiedlichen fest eingestellten Parametern oder sonstigen kleineren Unterschieden. Zwar könnte man diese Funktionen auch zu einer einzigen zusammenfassen, müsste dann aber die Unterschiede zur Laufzeit mit eine entsprechenden Zahl von if-Abfragen behandeln. Aus Effizienzgründen kann es manchmal sinnvoll sein, statt einer einzelnen generischen Funktion mehrere spezifische Funktionen zu schreiben. Genau hier sind Templates von Vorteil: Der Compiler generiert daraus automatisch die gewünschten spezifischen Funktionen, trotzdem tauchen diese im Quellcode nur als eine einzelne Funktion (genauer: als einzelnes Funktionstemplate) auf, was die Sache übersichtlicher macht und spätere Änderungen erleichtert. Meist dienen Templates dazu, weniger Quellcode schreiben zu müssen oder den ausgeführten Code von Laufzeit-Overhead zu befreien. Insbesondere letzteres ist auch (und gerade) bei kleinen Mikrocontrollern oft ein wichtiger Aspekt. Zurück zum Thread-Thema: Ja, auch ich benutze sowohl die STL als auch die Boost-Bibliotheken. Letztere haben für mich folgende Vorteile: - Man installiert sie einmal als großes Paket und bekommt dafür eine riesige Vielfalt an Funktionalität für sehr unterschiedliche Anwendungsbereiche. Früher musste man sich dafür mühevoll zig Einzelbibliotheken im Netz zusammensuchen. - Die Qualität (sowohl des Codes als auch der Dokumentation) ist sehr gut. - Sie sind für alle gängigen Betriebssysteme verfügbar und unterstützen damit das Schreiben von portablem Code. - Die enthaltenen Klassen und Funktionen sind sehr generisch gehalten und lassen sich deswegen in vielen unterschiedlichen Fällen einsetzen. Dadurch ist die Einarbeitung in die einzelnen Bibliotheken i.Allg. eine gute Investition. - Wenn ein neues C++ kommt (wie vor einiger Zeit C++11), sind mir Teile der Erweiterungen der Standardbibliothek schon geläufig, weil ich sie vorher schon in der Boost gesehen habe. Wenn ich auf der Suche nach einer Klasse bin, die ich nicht selber programmieren möchte, schaue ich immer zuerst nach, ob es sie in der Standardbibliothek von C++ gibt. Wenn nicht, suche ich sie in den Boost-Bibliotheken. Erst wenn ich auch dort nicht fündig werde, suche ich im Netz danach. chris_ schrieb: > Bis jetzt haben nur Leute geantwortet, die Boost irgendwie kennen. Ich muss gestehen, dass ich (bisher) nur einen recht kleinen Teil der Boost-Bibliotheken benutze (etwa 10 der 131) und mich immer wieder dabei ertappe, dass ich Code selber geschrieben habe, den ich in besserer Qualität der Boost entnehmen hätte können. Insofern zähle ich mich auch zu den Leuten, die die Boost nicht kennen ;-)
ok, dann kenne ich die STL auch nicht - weil ich sie nur zum Teil nutze, ebenso wie boost.
Also ich benutze auch ständig boost und STL und kann mir ehrlich gesagt absolut nicht vorstellen, wie man für längere Zeit ohne auskommt. Selbst wenn man Qt verwendet, welches ja sehr viele eigene Klassen mitbringt, kommt man nicht immer um boost herum. Was C++ auf Microcontroller angeht, schließe ich mich der Meinung von Yalu und Dr. Sommer an. Wenn man es mit Bedacht einsetzt, kommt man viel schneller ans Ziel und muss sich auch weniger Gedanken um Speicherlöcher und Buffer Overflows machen, und gerade für letztere sind Microcontroller mit ihrem kleinen RAM eher anfällig. Und was nutzt es dir wenn Du nur 30% von verfügbaren Speicher nutzt anstatt 40%, solange der Code macht was er soll? Dafür kriegst du kein Geld zurück! Auf dem STM32 (Discovery-Board), nutze ich viele Features von C++11, die urspünglich aus boost stammen, insbesondere smart pointers und std::function und bind() für Callbacks kann ich mir nicht mehr wegdenken. Ich habe für 1MB Flash und 192kb RAM bezahlt, also will ich die auch nutzen und den Code so schreiben können, dass er auf anderen Controllern und aufm PC mit geringstmöglicher Anpassung verwendet werden kann. - jgdo -
chris_ schrieb: > Wer von euch hat schon eimal den Begriff "Boost" oder "STL" ( Software ) > gehört oder damit gearbeitet? > Ich schätze, dass es eher weniger Leute sind, *Don't feed the troll!!!*
Ich kenne Beides und meide Beides. Aber die Diskussion darum ist fruchtlos - boost hat mittlerweile ein so grosses Momentum erreicht, dass es schon viele Entwickler gibt, die C++ ohne gar nicht mehr kennen und sich auch nicht vorstellen koennen, dass es anders besser sein koennte.
Quack+ schrieb: > Ich kenne Beides und meide Beides. Aber die Diskussion darum ist > fruchtlos - boost hat mittlerweile ein so grosses Momentum erreicht, > dass es schon viele Entwickler gibt, die C++ ohne gar nicht mehr kennen > und sich auch nicht vorstellen koennen, dass es anders besser sein > koennte. Und genau das ist eigentlich die Idee von Boost. In fortgeschrittener Literatur, und die ist bei C++ im Gegensatz zu anderen Sprachen bitter notwendig, liest man oft, dass C++ aus vier Teilen besteht: 1. Grundlegendes C++ (praktisch identisch mit C) 2. Objektorientierung 3. Templates 4. Die STL Und Boost ist im Prinzip nichts weiter als die "Aussenbezirke" der STL. Boost bietet das, was in die STL (noch) nicht ganz reinpasst, vieles wird später "eingemeindet" und die Entwicklung verläuft in enger Kooperation.
Kai S. schrieb: > Ja, normalerweise bezeichnet man mit STL den Teil der STL, der in die > Standardbibliothek aufgenommen wurde. Ist aber meines Wissens der > ueberwiegende Teil. Halte es durchaus fuer korrekt das weiterhin STL zu > nennen. moin, ist ja auch klar, denn STL steht ja auch für Standard Template Library. Sollte wohl logisch sein, dass die zum C++ Standard gehört oder? Wenn ein Compiler die STL nicht unterstützt, dann unterstützt er auch nicht die komplette C++ Standart (kleiner Joke :)
nicht"Gast" schrieb: > Sollte wohl logisch sein, dass die zum C++ Standard gehört oder? Nein. Das "Standard" bedeutet dass HP in den 80ern meinte dass jeder diese Library benutzen müsse oder so. Das heißt aber nicht, dass diese Library Teil von ISO/IEC 14882 - dem C++ Standard - ist (egal welcher Version des Standards). Tatsächlich ist die von HP entwickelte und von SGI weiterentwickelte Library namens "STL" nicht kompatibel zu der vom ISO-Standard vorgeschriebenen C++ Standard Library, und auch kein Teil davon. nicht"Gast" schrieb: > Wenn ein Compiler die STL nicht unterstützt kann er sehr wohl dem C++ Standard entsprechen. Alles hier nachzulesen: http://de.wikipedia.org/wiki/Standard_Template_Library
verwende sowohl STL als auch boost täglich. Vor allem die Smart Pointer aus boost sind spitze.
boostinger schrieb: > Vor allem die Smart Pointer aus boost sind spitze. Die müssten aber mittlerweile auch in der STL angekommen sein, oder? (siehe unique_ptr, shared_ptr, weak_ptr)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.