[C++] Feedback op "inhoudsopgave" van CD

Pagina: 1
Acties:

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
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.
8) 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


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Netjes hoor, echter volgende puntjes als ik de mier toch ga pentereren:

1) Vermeld de licency die aan de boost libs hangt (BSD als ik het zo zie), en gooi een link naar deze licency
2) In je uitleg over de libs ga je opeens te technisch over als je het vergelijkt naar de introductie. Ik zou kort daar de hoofdgroepen vermelden (bij Iteratoren: libraries om gemakkelijker met stl iteratoren te werken en om makkelijk zelf iteratoren te maken) en er verder niet technisch op in gaan (dus niet uitleggen wat een smartpointer is bijv)
3)
is het onmogelijk om alle boost
libraries hier te vermelden. De Boost documentatie op CD bevalt wel de completep
Complete wat?
4) Waarom geef je dat voorbeeld van die smart pointers. Ik denk dat dat mensen afschrikt. Je geeft nl. een beetje een idee dat het 'half af' is. Probeer het zo te vertellen dat jullie technische vernieuwing nastreven en daardoor het niet altijd backwards compatible is. Je zou ook kunnen vertellen dat vele vrijwilligers dagelijks werken aan het product om het nog beter te maken. Dit kan er voor zorgen dat er dingen veranderen in de structuur van Boost. Voordat u dus een nieuw project met Boost begint, wees er dan zeker van dat u de nieuwste versie gebruikt.
5) Ga niet suggereren dat de documentatie onvoldoende kan zijn. Dat kan 2 dingen betekenen: de persoon is dom :) of de documentatie zuigt. Schrijf dan ook liever: 'Mocht u problemen hebben, dan kunt u voor hulp altijd terecht op www.boost.org [...]'
6) Bij 'Boost en C++0x' twijfel ik of dat er in moet. Misschien integren bij 'wat is boost' (het is toch een soort reclame?' maar ik zou het iig niet op die plek zetten (na de hulp, die altijd als laatste!)

Verwijderd

Is (de met Boost meegeleverde mirror van) boost.org niet duidelijk genoeg voor jouw doelgroep? Een kleine readme.txt van een halve kilobyte meeleveren lijkt me nog redelijk, maar is een hele extra Nederlandstalige inleiding/inhoudsopgave echt nodig :?