Forum: PC-Programmierung Boost Library


von chris_ (Gast)


Lesenswert?

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
von physiker (Gast)


Lesenswert?

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).

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

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
von chris_ (Gast)


Lesenswert?

>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"

von chris_ (Gast)


Lesenswert?

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?

von Oliver S. (oliverso)


Lesenswert?

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
von chris_ (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Bastler (Gast)


Lesenswert?

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.

von sebi707 (Gast)


Lesenswert?

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.

von Rene H. (Gast)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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").

von Peter II (Gast)


Lesenswert?

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.

von Markus F. (mfro)


Lesenswert?

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???

von Dr. Sommer (Gast)


Lesenswert?

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).

von Dr. Sommer (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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

von sebi707 (Gast)


Lesenswert?

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.

von sebi707 (Gast)


Lesenswert?

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++.

von Peter II (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

>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.

von Kai S. (zigzeg)


Lesenswert?

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.

von Klaus P (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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
;-)

von Klaus W. (mfgkw)


Lesenswert?

ok, dann kenne ich die STL auch nicht - weil ich sie nur zum Teil nutze, 
ebenso wie boost.

von jgdo (Gast)


Lesenswert?

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 -

von Olga (Gast)


Lesenswert?

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!!!*

von Quack+ (Gast)


Lesenswert?

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.

von booster (Gast)


Lesenswert?

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.

von nicht"Gast" (Gast)


Lesenswert?

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 :)

von Dr. Sommer (Gast)


Lesenswert?

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

von boostinger (Gast)


Lesenswert?

verwende sowohl STL als auch boost täglich.
Vor allem die Smart Pointer aus boost sind spitze.

von Borislav B. (boris_b)


Lesenswert?

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
Noch kein Account? Hier anmelden.