Ik ben bezig met een CD distributie van de boost library www.boost.org en had daar de volgende inhoudsopgave/inleiding/etc. bij. 't Is nog een draft, dus graag feedback.
Boost
-----
* Wat is Boost?
Boost is een gratis verzameling libraries voor C++. De collectie is
begonnen is 1998, toen de C++ standaard beschikbaar kwam. De Boost
libraries zijn gemaakt om samen met de C++ standaard library
gebruikt te worden en zijn dus ook bijzonder portable. Bovendien
zijn alle libraries gereviewed voordat ze opgenomen werden.
Boost is ook de informele vereniging van ontwikkelaars van deze
libraries. Lid worden kan door zich aan te melden voor de developers
mailing list [1]. Inmiddels zijn er zo'n 2000 developers actief binnen
Boost. Sommgie van deze developers zijn bekende C++ auteurs, maar
de meesten zijn "in the trenches" developers
* Voor wie is Boost?
Boost is er voor alle C++ developers. Alle libraries binnen Boost
mogen zonder kosten gebruikt worden binnen zowel commerciele als
Open-Source projecten.
* Wat voor libraries zitten er in Boost?
Boost bevat inmiddels meer dan 40 libraries. Grofweg vallen deze
uiteen in de volgende categorieen :
1) Tekst en string libraries, met een POSIX gebaseerde regex class en tokenizers,
om een string als een STL-compatible container van tokens te kunnen behandelen.
2) Containers, varierend van een STL-compatible fixed array class ( niet meer dan
een verzameling class members die een T[N] array beschrijven ) tot een uitgebreide
wiskundige graaf-library, met veel van de gangbare graaf algoritme's zoals
Dijkstra's kortse pad algoritme. De complete documentatie van alleen deze
graaf library is al een boek op zich [2].
3) Iterator libraries, om het werken met de STL iterators te vergemakkelijken
en zelf iterators te maken voor eigen object verzamelingen. Schrijf een
enkele Policy class en deze libraries zorgen voor alle classes, types, en
operatoren die nodig zijn om STL en Boost algoritmen te gebruiken.
4) Functie object libraries, om snel functie objecten te maken geschikt voor gebruik
in de STL en andere boost libraries. Ook bestaande functies, inclusief
class methods kunnen nu eenvoudig als functie objects in de STL gebruikt
worden.
5) Generic programming, libraries voor het omgaan met complexe compile-time
functies en data structuren. Dit maakt het bijvoorbeeld mogelijk om
een compile-time lijst met types te maken, en een class template die dit
(variabele) aantal members heeft. Ook de compile-time assert is bijzonder
bruikbaar, om bij het compileren van template functies de template
parameters te kunnen checken.
6) Threads, portable tussen Windows, Unix en Mac. Alhoewel deze categorie nog
maar een library bevat, is deze hard op weg om een van de meest populaire
libraries te worden.
7) Mathematisch, met betere en makkelijkere random-number classes, breuken,
CRC functies, grootste gemene deler/kleinste gemene veelvoud functies.
Ook voor de implementatie van eigen numerieke types zijn er support functies.
Data structuren, met een "tuples" class als std::pair<> te klein is en
compressed_pair voor als std::pair<> te groot is en any, een typesafe variant class
9) Geheugen management, met een smart pointer library en memory pool library. "Smart
pointers" zijn de manier om eenvoudig exception-safe code te schrijven zonder
memory leaks, en het belangrijkste alternatief voor Garbage Collection. Memory
pools zijn geheugen managers die gespecialeerd zijn in het managen van fixed-size
blokken die allemaal tegelijkertijd worden vrijgegeven, met minimale overhead.
10) utilities, libraries die veel voorkomende oplossigen in library vorm aanbieden,
zoals een string naar int conversie en vice versa, en een noncopyable base class.
Ook de timer class met bijbehorende display functies is beschikbaar.
Aangezien iedere C++ developer libraries kan aandragen, ook als ze niet in
een van bovenstaande categorieen vallen, is het onmogelijk om alle boost
libraries hier te vermelden. De Boost documentatie op CD bevalt wel de complete
* Hoe kan ik Boost gebruiken in mijn programma?
Boost development gebeurt door vrijwilligers. Dat betekent dat er regematig nieuwe
versies van libraries uitkomen. Die versies niet noodzakelijkerwijs compatible zijn
met vorige versies. Daarom is het verstandig om bij de start van elke nieuwe versie
van een programma de Boost libraries te updaten naar de meest recente versie, en
deze tussentijds bevroren te houden. Omdat alle libraries in source-form worden
aangeboden, kunnen bugfixes individueel toegepast worden.
Een voorbeeld van zo'n wijziging zijn de smart pointer classes. Nu zijn dit nog 5
template classes. Dit zijn er tegelijkertijd te weinig, want lang niet alle
varianten, en teveel, omdat andere libraries nu 5 overloads moeten aanbieden.
Op het moment wordt er gewerkt aan het opnemen van Loki's smart pointers[3].
Code die nu een van de bestaande smart pointers gebruikt kan deze blijven
gebruiken, maar beter is het om een typedef te gebruiken en deze mettertijd
aan te passen.
* Waar kan ik hulp krijgen?
Als de documentatie bij Boost onvoldoende is, biedt de Boost website
www.boost.org meer informatie. Daarna kunnen Boost users terecht bij
de Boost user mailing list[4].
* Boost en C++0x
De ISO C++ commissie heeft recent de eerste stappen genomen naar een
nieuwe C++ standaard, informeel aangeduid als C++0x. De belangrijkste
vernieuwingen zullen daarbij in de C++ library te vinden zijn.
Aangezien de voorkeur uitgaat naar standaardisatie van bestaande en
beproefde libraries is er binnen de ISO C++ commissie veel
belangstelling voor de Boost libraries. Inmiddels zijn er al 7 Boost
libraries voorgedragen voor opname in de volgende C++ standaard.
--
MSalters is .....
---------- Noten ---------
[1] news://news.gmane.org/gmane.comp.lib.boost.devel
[2] The Boost Graph Library, Jeremy Siek, ISBN 0-201-72914-8
[3] Modern C++ Design, Andrei Alexandrescu, ISBN 0-201-70431-5
[4] news://news.gmane.org/gmane.comp.lib.boost.user
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein