Overview
Please note that this web page is a work-in-progress. Some documentation, commentaries, statistics, source code, etc. will change over the course of time. If anything is updated on the Booch Components, you'll see it here first, so be sure to check from time to time.
The Ada 95 Booch Components began in late 1994 when David Weller (mail address not presently known) began a port of Grady Booch's C++ components.
A first beta release was soon available, followed by a release in February 1997.
In December of that year, David concluded that he wouldn't be able to continue with the Components and appealed on the Team Ada mailing list for a volunteer. Having already found the Components very useful, I got my employers' permission to take them on (not a speedy process); work began 18.vii.98.
Storage Management was added in August 1998 by Pat Rogers, thanks very much Pat! (you may like to visit Pat's web site).
The Components are issued under the Ada Community License. You can read David Weller's FAQ on the ACL.
(Please note, the Components are likely to change fairly dramatically between releases over the next few iterations. You'll probably need to change your source at each issue; you'll certainly need to recompile).
The current version has the following components available (the red parts, if any, are new since the last release):
See the Component Documentation for the details.
I also use the Aonix ObjectAda compiler (the Special Edition; currently I am stuck at 7.2, because of some DLL hell which prevents 7.2.1 from working! I wouldn't regard a problem with OA as a very good reason for withholding a feature, though.
The Components come with test and demonstration code samples.
There is also a collection of contributions.
Please feel free to mail me with any thoughts you may have!
This is probably not the best choice. Lists are complex entities which, I suppose, would be useful if you were implementing a list-processing engine like Lisp.
You'll be a lot better off using Collections!
This works fine except for Graphs; a Graph is a collection of Vertices (OK so far), while Vertices are connected by (not collections of) Arcs. Unless I can think of a sensible way of doing things, Graphs will remain outside the Containers hierarchy.
Although Trees come under the Container hierarchy, they aren't Containers. This is largely because of the difficulty of supporting standard Iterators in a non-linear structure like a Tree.
That said, I've tried to use a common style throughout.
However, none of GNAT 3.12p, Apex (3.0.2B for NT) or OA7.2 handles the idiom I've adopted for adding concurrency. It's such a pleasant idiom, too, and saves so much work!
GNAT 3.13p works well.