home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ledar34.zip / library.evaluations < prev    next >
Text File  |  2002-01-24  |  71KB  |  2,054 lines

  1. Evaluation and Comparison of C++ Class Libraries (Draft)
  2.  
  3.                       Marco Pace
  4.  
  5.                      March 30, 1992
  6.  
  7.  
  8.    Contents
  9.    ========
  10.  
  11. Introduction
  12.  
  13. Evaluation Criteria
  14.  
  15. Environment
  16.  
  17. The Object-oriented Abstract Type Hierarchy (OATH)
  18.  
  19.   Introduction
  20.  
  21.   Requirements and Availability
  22.  
  23.   Evaluation
  24.  
  25. Library of Efficient Data types and Algorithms (LEDA)
  26.  
  27.   Introduction
  28.  
  29.   Requirements and Availability
  30.  
  31.   Evaluation
  32.  
  33. C++ Object Oriented Library (COOL)
  34.  
  35.   Introduction
  36.  
  37.   Requirements and Availability
  38.  
  39.   Evaluation
  40.  
  41. National Institute of Health Class Library (NIHCL)
  42.  
  43.   Introduction
  44.  
  45.   Requirements and Availability
  46.  
  47.   Evaluation
  48.  
  49. Comparison of the Evaluated Class Libraries
  50.  
  51. References
  52.  
  53. Appendix I - Collection of Answers Got from the Network 
  54.  
  55. Appendix II - The Stack Exerciser
  56.  
  57.   The Stack Exerciser
  58.  
  59.     The Stack Exerciser - OATH version
  60.  
  61.     The Stack Exerciser - LEDA version
  62.  
  63.  
  64. ======================================================================
  65.  
  66.  
  67.  Introduction
  68.  
  69. This document is an attempt to evaluate different available C++ class
  70. libraries (to date only Public Domain (PD)/Shareware (SH) class
  71. libraries have been evaluated) and to compare them.
  72.  
  73. The focus is on  base class libraries  (such as OATH, COOL, NIHCL, etc.)
  74. and not on  UI libraries  (such as InterViews, StarViews, etc.).
  75.  
  76. The evaluation of the libraries is mainly a collection of impressions coming 
  77. from the practical experience of other people with the different class 
  78. libraries (and hopefully coming from an extensive usage of them) rather than 
  79. mainly a collection of impressions coming from a first-hand extensive usage of 
  80. the libraries themselves.  The reason for that is the limited time available 
  81. to carry out this investigation.
  82.  
  83. In fact, according to my opinion, it takes quite a long time to get a complete
  84. "feeling" of the different and multifold aspects of each library, although a
  85. "flavour" of it may be had in a shorter time.
  86.  
  87. The comments have been collected from the network after posting a request to
  88. the newsgroup comp.lang.c++.
  89.  
  90. Some direct evaluation has been done, however, to a limited extent.
  91.  
  92. To-date this has consisted in the implementation of a simple program (the Stack
  93. Exerciser) allowing to push, pop, etc. elements from a stack using the different
  94. class libraries.
  95.  
  96. The overall evaluation work has consisted first in the definition of evaluation
  97. criteria which seem of interest, then in the classification of each library 
  98. according to such criteria.
  99.  
  100. The comparison is simply a table containing a summary of the way the different
  101. class libraries satisfy or not the criteria.
  102.  
  103. The following C++ class libraries have been evaluated:
  104.  
  105. OATH (Object-oriented Abstract Type Hierarchy)
  106.  
  107. COOL (C++ Object Oriented Library)
  108.  
  109. LEDA (Library of Efficient Data types and Algorithms)
  110.  
  111. NIHCL (National Institute of Health Class Library)
  112.  
  113. All of them are available on our system and have therefore been used directly.
  114.  
  115. More information on each of the libraries is presented in the relevant sections,
  116. and a list of them is in document [10].
  117.  
  118.  Evaluation Criteria
  119.  
  120. The criteria defined are applicable to a class library in general or to its 
  121. component classes in particular.
  122.  
  123. The following have been defined:
  124.  
  125.   Documentation
  126.  
  127. The documentation of a class library is particularly important. It must be able
  128. to convey in a clear and efficient way the basics that are needed to use the 
  129. classes in the proper way.
  130.  
  131. It should be concise enough and avoid non relevant details while focussing on 
  132. the fundamental aspects of the class being described (Appendix II, (1)). 
  133.  
  134. In addition, it should be sufficient to allow use of the library in binary form 
  135. (Appendix II, (4)), i.e. it should not be necessary for the user to browse 
  136. through a class' implementation to understand how to use it.
  137.  
  138. I personally find examples important in the documentation since they provide
  139. the user (especially the beginner) with a quick, effective and practical idea 
  140. of the way the classes have to be used.
  141.  
  142.   Usability
  143.  
  144. Under this term we mean several aspects which, although difficult to quantify, 
  145. are important, such as the set of classes provided, the easiness of use of a 
  146. class, the kind of the services provided, the simpleness and clarity of the 
  147. interface.
  148.  
  149. Of course, the more the interface is simple and clear the better.
  150.  
  151.   Extendibility
  152.  
  153. The extendibility of a class library means how easy it is to derive classes 
  154. avoiding at the same time problems such as name clashes, etc.
  155.  
  156.   Performance
  157.  
  158. Given a class, its performance could be computed according to certain criteria.
  159.  
  160. An idea could be to develop some benchmarking test programs exercising
  161. selected services provided by the class.
  162.  
  163. For instance, given set, list, tree, graph, etc. classes the benchmarking 
  164. programs could check the time needed to insert, search, copy, etc. elements.
  165.  
  166. Other criteria other than time could be considered, though (main memory
  167. occupation, for instance).
  168.  
  169. According to a post made to the newsgroup comp.lang.c++, Rogue Wave Software 
  170. sells a set of foundation classes (Tools.h++) including a timer class and a 
  171. benchmarking class.
  172.  
  173. It seems that the library already comes with some of the newer version of some 
  174. compilers.
  175.  
  176. Other similar PD classes might as well be available.
  177.  
  178.   Sensibleness
  179.  
  180. It is not easy to define precisely this evaluation criterium, but a tentative 
  181. definition of it could be the common sense with which the designers of the 
  182. class library have structured it and the kind of classes provided by the library
  183.  (cf. also "Usability").
  184.  
  185. An example could be a class library providing a class for integers:
  186.  
  187. -- does it make sense to provide such a class when this basic data type is
  188. already provided by the underlying programming language (C++) ?
  189.  
  190. Should not the library provide only higher-level classes which are not present 
  191. in the language (e.g. stacks, lists, etc.) ?
  192.  
  193. Our idea is that the class library should provide higher-level classes and not 
  194. necessarily classes redefining basic data types.
  195.  
  196.   Miscellaneous
  197.  
  198. Other aspects on which an evaluation could be based are the following:
  199.  
  200. -- is the class library hierarchy structure a tree or a forest ?
  201.  
  202.      It seems common opinion that to have a forest (i.e. a number of (possibly 
  203.      small) trees) is more useful than to have a (possibly big) tree (Appendix 
  204.      II, (1); (3.1)/COOL/remarks) and one of the reasons is that the mind is 
  205.      unable to grasp more that 3 or 4 levels in any useful manner ([9]).
  206.  
  207. -- does it provide single or multiple inheritance (MI)?
  208.  
  209. -- does it provide exception handling mechanisms ?
  210.  
  211. -- does it provide templates (parameterized types) or anonymous pointers to 
  212.    achieve genericity ?
  213.  
  214. -- does it include garbage collection (GC)?
  215.  
  216.   Others
  217.  
  218. In deciding which C++ class library to use, other criteria can be defined, such
  219. as the following:
  220.  
  221. -- is it PD, shareware or commercial (do you have to pay for it, is it provided
  222.    in source or object format) ?
  223.  
  224. -- if it is provided in source format, are there problems to compile it with the
  225.    compiler I have ?
  226.  
  227. -- is the class library supported by the vendor/developer ?
  228.  
  229. Here the opinions vary, since some are inclined toward high quality commercial
  230. support (Appendix II, (2)), some don't consider it to be a major issue provided 
  231. the library is in source format, so that it can be modified if necessary 
  232. (Appendix II, (3.2)).
  233.  
  234. Of course, without vendor/developer support you have to take into account the
  235. risk of finding bugs you then have to fix yourself.
  236.  
  237. -- is it easy to install ?
  238.  
  239. -- is there a suite of tests to be run in order to make sure that no problems 
  240.    will occur when using the library ?
  241.  
  242. A criterium one could demand is to have at least one test case per method 
  243. (Appendix II, (4)).
  244.  
  245.  
  246. There is something to add to the discussion made so far. The criteria defined 
  247. till now are somehow context-independent, in the sense that they are general 
  248. criteria against which a class library can be evaluated and found to be more 
  249. or less "desirable".
  250.  
  251. However, other criteria could be defined which are more context-dependent, and 
  252. could arise from particular needs related to the kind of application that has 
  253. to use the class library, in our case SCOSII.
  254.  
  255. The definition of such criteria is not included in the scope of this document, 
  256. but ought to be considered when making the final decision on which library 
  257. (libraries) to use.
  258.  
  259.  Environment
  260.  
  261. The different libraries have been installed on atos0.
  262.  
  263. The tests have been carried out on atos1, running SunOS 4.1.1 using the AT&T 
  264. C++ compiler version 2.1.
  265.  
  266. ********
  267. * OATH *
  268. ********
  269.  
  270.  The Object-oriented Abstract Type Hierarchy (OATH)
  271.  
  272.  Introduction
  273.  
  274. OATH instantiates an approach to C++ class hierarchy design that exploits
  275. subtyping polymorphism , provides greater implementation independence, and 
  276. supports implicit memory management of its objects.
  277.  
  278. It is implemented via parallel hierarchies of internal types and accessors  
  279. (a concept similar to that of the "smart pointers", but improved compared to 
  280. them).
  281.  
  282. The internal types contain the object representation (the data members) and the
  283. virtual functions.
  284.  
  285. The accessor types contain all of the externally accessible functions of the 
  286. abstract types.
  287.  
  288. Two were the main design goals of OATH:
  289.  
  290. -- to provide a meaningful  abstract type hierarchy  that is consistent with the
  291.    concepts being modelled by utilizing a strict subtyping approach to hierarchy
  292.    design.
  293.  
  294. Starting from the the idea that a type hierarchy should be designed to reflect 
  295. the behaviour of the objects being modelled and not to reflect the most 
  296. convenient computer representation of objects, the designer of OATH gave 
  297. priority to the subtyping (inheriting functionality) aspect over the code reuse 
  298. (inheriting implementation) aspect.
  299.  
  300. Given a consistent abstract type hierarchy,  implementation classes  can be 
  301. added at the leaves of the hierarchy (see figure later on) to implement the
  302. behaviour of the abstract types. Code reuse can be exploited at this phase, 
  303. but should not enter into the design of the abstract type hierarchy.
  304.  
  305. -- to provide robust  garbage collection (GC)  of OATH objects, fully
  306.    implemented within a portable C++ class library.
  307.  
  308. The garbage collection mechanism is a hybrid  reference counting and marking  
  309. algorithm capable of collecting all garbage (including circular references).
  310.  
  311. The programmer can select one of four garbage collection modes at compile time:
  312.    no GC
  313.    incremental GC 
  314.    stop-and-collect
  315.    combined.
  316.  
  317. OATH's main features are the following:
  318.  
  319. . it provides heterogeneous container classes
  320.  
  321. . it provides dynamic type determination  in the form of "safe casts"
  322.  
  323. . it provides accessors to access OATH objects.
  324.  
  325. For each OATH type there is a corresponding accessor class (an accessor lies 
  326. between a C++ pointer and a C++ reference).
  327.  
  328. The accessors can be initialized and assigned OATH objects to access. However, 
  329. any other operation on an accessor is applied directly to the abstract object 
  330. it accesses.
  331.  
  332. The class hierarchy provided by OATH is the following:
  333.  
  334. obj
  335.   pos
  336.      pdPos
  337.     listPos
  338.        dlPos
  339.       stringPos
  340.          minStringPos
  341.   bag
  342.     set
  343.        hashSet
  344.       finiteSet
  345.         characterSet
  346.     queue
  347.       seq
  348.         lifoQueue
  349.            pdList
  350.         fifoQueue
  351.           deq
  352.             list
  353.                dlList
  354.               string
  355.                  minString
  356.                 plist
  357.         ring
  358.           grid
  359.     table
  360.         stringTable
  361.     capsule
  362.   token
  363.       character
  364.       localToken
  365.       stringToken
  366.   complex
  367.      doubleComplex
  368.      bigComplex
  369.     real
  370.        doubleReal
  371.        bigReal
  372.       rational
  373.          longRational
  374.          bigRational
  375.           integer
  376.              longInteger
  377.              bigInteger
  378.  
  379. where the items in normal fonts are  abstract types , the ones in italics are  
  380. abstract implementation types , the ones in bold are implementation types
  381. (a visually more readable version of this hierarchy can be found in
  382. [1], Figure 1.)
  383.  
  384. OATH does not provide:
  385.  
  386. parameterized types (templates)
  387.  
  388. For a more detailed description of OATH and its features, including a
  389. thorough discussion on the rationale for the design and implementation
  390. choices see [1].
  391.  
  392.  Requirements and Availability
  393.  
  394. OATH has been developed by Brian M. Kennedy, Computer Systems Laboratory,
  395. Computer Science Center, Texas Instrument.
  396.  
  397. The Reference Manual states it has only been compiled with AT&T cfront 2.1
  398. compatible compilers.
  399.  
  400. To compile with AT&T cfront 2.0 based compilers the source code has to be 
  401. modified.
  402.  
  403. OATH is available via anonymous ftp from site csc.ti.com (192.94.94.1)
  404. in the file /pub/oath.tar.Z.
  405.  
  406.  Evaluation
  407.  
  408.   Documentation
  409.  
  410. The documentation is very concise (probably too much) and lacks examples.
  411. Due to its conciseness sometimes it is not easy to understand and somehow
  412. it is cryptic.
  413.  
  414.   Usability
  415.  
  416. OATH provides a wide set of classes.
  417.  
  418. It does not seem easy to use the class services provided, especially for a
  419. beginner.
  420.  
  421. Services that you would expect to find at a given level of the hierarchy 
  422. sometimes are not there and you have to go upwards through the tree to find 
  423. them, sometimes with names not directly related to what you are using.
  424.  
  425. The services provided are not many, but their interface is simple to use.
  426.  
  427.   Extendibility
  428.  
  429. This feature was not evaluated directly.
  430.  
  431. However, a brief discussion on the way to extend the existing class library is
  432. present in the OATH Reference Manual [2] (OATH(30), section Developing New OATH 
  433. Types).
  434.  
  435.   Performance
  436.  
  437. Not evaluated.
  438.  
  439.   Sensibleness
  440.  
  441. The available classes are perhaps too abstract. I would have preferred less 
  442. abstract and more "practical" classes, but probably this would have been 
  443. against the basic assumptions their designers of OATH made.
  444.  
  445. Among the, there are classes for integers, rational, real, complex.
  446.  
  447.   Miscellaneous
  448.  
  449. The provided hierarchy is that of a tree, where only single inheritance is 
  450. supported.
  451.  
  452. No templates (parameterized types) are provided, and no exception handling as 
  453. well.
  454.  
  455. Garbage collection is supported and appears to be even sophisticated in terms 
  456. of the kinds of GC available.
  457.  
  458.   Other
  459.  
  460. OATH is a public domain C++ class library, and it is provided in source format.
  461.  
  462. It seems to be experimental. It does not seem to be supported at all.
  463.  
  464. The installation is quite easy, just follow the instructions in the README file.
  465.  
  466. The total time needed to install OATH on atos1 was 4 hours, but this was due to
  467. a couple of problems not related to the installation itself; 1.5-2 hours would 
  468. probably be enough in the majority of the cases (including a coffee pause).
  469.  
  470. No problems to compile it using the compiler available.
  471.  
  472. *********
  473. * LEDA  *
  474. *********
  475.  
  476.  Library of Efficient Data types and Algorithms (LEDA)
  477.  
  478.  Introduction
  479.  
  480. LEDA is a library of efficient data types and algorithms. Its main features are:
  481.  
  482. -- a sizable collection of data types and algorithms: this includes
  483.    stacks, queues, lists, sets, dictionaries, ordered sequences,
  484.    partitions, priority queues, directed, undirected, and planar graphs,
  485.    lines, points, planes and basic algorithms in graph and network theory
  486.    and computational geometry;
  487.  
  488. -- the precise and readable specification of data types and algorithms;
  489.  
  490. -- the inclusion of many of the most recent and efficient implementations;
  491.  
  492. -- a comfortable data type graph;
  493.  
  494. -- its extendibility;
  495.  
  496. -- its ease of use.
  497.  
  498. The library employs
  499.  
  500. -- a strict separation between abstract data types and the concrete data
  501.    structures used to implement them,
  502.  
  503. -- parameterized data types, and
  504.  
  505. -- object oriented programming.
  506.  
  507. The implementation language of LEDA is C++.
  508.  
  509. For a more detailed description of LEDA and its features see [3].
  510.  
  511.  Requirements and Availability
  512.  
  513. The library can be used under UNIX with the C++ compilers AT&T cfront 2.0, 
  514. cfront 2.1 and GNU g++ (version 1.37).
  515.  
  516. It is available from its authors for a handling charge of DM 100.
  517.  
  518. The copy we have has been got via anonymous ftp from the host
  519.           ftp.th-darmstadt.de 
  520. where it is in directory 
  521.           pub/languages/C++ 
  522. in the files 
  523.           LEDA-2.1.1.tar.Z and LEDA.README.
  524.  
  525.  Evaluation
  526.  
  527.   Documentation
  528.  
  529. After some time spent trying to format the documentation (it is available only 
  530. in TEX format), we managed to have it printed.
  531.  
  532. The documentation appears to be linear, easy to read (as promised by the 
  533. authors), concise.
  534.  
  535. It does not contain, however, examples of the way the classes have to be used.
  536.  
  537.   Usability
  538.  
  539. The set of classes provided is quite large, the classes themselves are easy to 
  540. use, the services provided sufficient (although sometimes the set is not "rich" 
  541. enough), the interface simple when the user has gone through section 1 of the 
  542. User Manual [4], which explains the basics.
  543.  
  544.   Extendibility
  545.  
  546. The extendibility has not been tested, although this seems to be one of the 
  547. features of the library, on which issue a brief discussion appears in section 
  548. IV of [3].
  549.  
  550.   Performance
  551.  
  552. Not evaluated.
  553.  
  554.   Sensibleness
  555.  
  556. The classes provided by the library are several, and they are listed here:
  557.  
  558. Simple Data Types
  559.         Boolean (bool)
  560.         Real Numbers (real)
  561.         Strings (string)
  562.         Real-valued vectors (vector)
  563.         Real-valued matrices (matrix)
  564. Basic Data Types
  565.         One Dimensional Arrays (array)
  566.         Two Dimensional Arrays (array2)
  567.         Stacks (stack)
  568.         Queues (queue)
  569.         Bounded Stacks (b_stack)
  570.         Bounded Queues (b_queue)
  571.         Lists (list)
  572.         Sets (set)
  573.         Integer Sets (int_set)
  574.         Partitions (partition)
  575.         Dynamic collections of trees (tree_collection)
  576. Priority Queues and Dictionaries
  577.         Priority Queues (priority_queue)
  578.         Bounded Priority Queues (b_priority_queue)
  579.         Dictionaries (dictionary)
  580.         Dictionary Arrays (d_array)
  581.         Hashing Arrays (h_array)
  582.         Sorted Sequences (sortseq)
  583.         Persistent Dictionaries (p_dictionary)
  584. Graphs and Related Data Types
  585.         Graphs (graph)
  586.         Undirected Graphs (ugraph)
  587.         Planar Maps (planar_map)
  588.         Parametrized Graphs (GRAPH)
  589.         Parametrized Undirected Graphs (UGRAPH)
  590.         Parametrized Planar Maps (PLANAR_MAP)
  591.         Node and Edge Arrays (node_array, edge_array)
  592.         Two Dimensional Node Arrays (node_matrix)
  593.         Node and Edge Sets (node_set, edge_set)
  594.         Node Partitions (node_partition)
  595.         Node Priority Queues (node_pq)
  596. Two-Dimensional Geometry
  597.         Two-Dimensional Dictionaries (d2_dictionary)
  598.         Sets of Points (point_set)
  599.         Sets of Intervals (interval_set)
  600.         Sets of Parallel Segments (segment_set)
  601.         Planar Subdivision (subdivision)
  602.         Graphic Windows (window)
  603.  
  604.   Miscellaneous
  605.  
  606. The class library hierarchy is a forest, and it does not seem to provide 
  607. multiple inheritance.
  608.  
  609. Some exception handling is provided, but it seems to be quite raw, in the sense 
  610. that it usually ends with the program abortion.
  611.  
  612. However, the user can write its own error handler, but its function
  613. prototype has to be
  614.  
  615.         void handler(int, char*)
  616.  
  617. where the first parameter is an error number and the second is an error message.
  618.  
  619. LEDA provides parameterized templates.
  620.  
  621. It does not seem to include garbage collection.
  622.  
  623.   Other
  624.  
  625. LEDA is a shareware library, in the sense that you should pay a fee to use it, 
  626. and is provided in object format only.
  627.  
  628. It is not clear whether it is supported in some way by the developers.
  629.  
  630. The installation of LEDA was quite simple and took a couple of hours.
  631.  
  632. One problem only was found during the execution of the makefile, namely some 
  633. include files needed for the creation of the graphics library for Sunview 
  634. (in which we were not interested).
  635.  
  636. After this the test programs were created without problems.
  637.  
  638. The execution of the test programs was carried out, but no description of what 
  639. they are supposed to do and/or what input they expected was found.
  640.  
  641. A few of them run without problems, others issued error messages, others aborted
  642. after a core dump.
  643.  
  644.  
  645. ********
  646. * COOL *
  647. ********
  648.  
  649.  C++ Object Oriented Library (COOL)
  650.  
  651.  Introduction
  652.  
  653. COOL is a collection of classes, templates, and macros for use by C++
  654. programmers writing complex applications.
  655.  
  656. It raises the level of abstraction for the programmer to concentrate on the 
  657. problem domain, not on implementing base data structures, macros, and classes.
  658.  
  659. In addition, COOL also provides a system independent software platform on top 
  660. of which applications are built, since COOL encapsulates such system specific 
  661. functionality as date/time and exception handling.
  662.  
  663. For a more detailed description of COOL and its features, including a thorough 
  664. discussion on the rationale for the design and implementation choices see [5].
  665.  
  666.  Requirements and Availability
  667.  
  668. COOL can be used with the AT&T C++ translator (cfront) version 2.0.
  669.  
  670. It is available from csc.ti.com (192.94.94.1) in file /pub/COOL.tar.Z.
  671.  
  672.  Evaluation
  673.  
  674.   Documentation
  675.  
  676. The documentation appears to be linear, easy to read, concise, accurately cared 
  677. for.
  678.  
  679. It also contains, basically for every class, examples of the way the classes 
  680. have to be used.
  681.  
  682. A glossary is also provided.
  683.  
  684.   Usability
  685.  
  686. The set of classes provided is wide, the classes themselves look easy to use, 
  687. the services provided are really a lot.
  688.  
  689. Although available in-house, I didn't manage to install COOL on my machine, so 
  690. the evaluation just collects impressions since no practical use of the classes 
  691. has been possible.
  692.  
  693.   Extendibility
  694.  
  695. The extendibility has not been tested, although this seems to be one of the 
  696. feature of the library, which issue is dealt with in part of section 14 of the 
  697. User Manual [6].
  698.  
  699.   Performance
  700.  
  701. Not evaluated.
  702.  
  703.   Sensibleness
  704.  
  705. The classes provided by the library are several, and they are listed here:
  706.  
  707. Pair 
  708. Range
  709.   Range 
  710. Rational
  711. Complex
  712. Generic
  713.   String
  714.   Gen_String
  715.   Regexp
  716.   Vector
  717.     Vector 
  718.       Association >
  719.   List_Node
  720.     List_Node 
  721.   List
  722.     List 
  723.   Date_Time
  724.   Timer
  725.   Bit_Set
  726.   Exception
  727.     Warning
  728.     Error
  729.       System_Error
  730.     Fatal
  731.     System_Signal
  732.     Verify_Error
  733.   Excp_Handler
  734.     Jump_Handler
  735.   Hash_Table
  736.     Set
  737.     Hash_Table 
  738.       Package
  739.   Matrix
  740.     Matrix 
  741.   Queue
  742.     Queue 
  743.   Random
  744.   Stack
  745.     Stack 
  746.   Symbol
  747.   Binary_Node
  748.     Binary_Node 
  749.   Binary_Tree
  750.     Binary_Tree 
  751.       AVL_Tree 
  752.   N_Node 
  753.   D_Node 
  754.   N_Tree 
  755.  
  756.   Miscellaneous
  757.  
  758. The class library hierarchy is basically forest, but it implements a rather 
  759. flat inheritance tree.
  760.  
  761. All complex classes are derived from the Generic class due to space efficiency 
  762. concerns.
  763.  
  764. COOL does not seem to provide multiple inheritance.
  765.  
  766. COOL's exception handling provides a reise, handle, and proceed mechanism.
  767.  
  768. Exception and exception handling classes are provided for this purpose.
  769.  
  770. COOL provides parameterized templates. The peculiarity of COOL is that to 
  771. allow this it extends the standard C++ preprocessor to recognize the notation 
  772. introduced to specify templates.
  773.  
  774. In other words, the programs written using COOL are not compiled using the 
  775. standard CC, but using CCC (COOL C++ Control Program), which is an extension 
  776. of the CC compiler.
  777.  
  778. It does not seem to include garbage collection.
  779.  
  780.   Other
  781.  
  782. COOL is PD, provided in source format.
  783.  
  784. It does not seem to be supported by the developers.
  785.  
  786. The installation of COOL was a tragedy: several problems were found, ranging 
  787. from files not found to compile errors to link errors, etc.
  788.  
  789. After a couple of days of trials the installation was abandoned, although a 
  790. post was made to the net to see if somebody could help on that.
  791.  
  792. I got some answers after some time and I found out that other people had 
  793. similar installation problems. They suggested some solutions which I haven't 
  794. tried yet.
  795.  
  796. It is interesting to note that the authors of COOL have written a paper on 
  797. which they analyse the lessons learned from the usage of the library, what they 
  798. would keep of it and what they would change in its design, and so on ([7]).
  799.  
  800.  
  801. *********
  802. * NIHCL *
  803. *********
  804.  
  805.  National Institute of Health Class Library (NIHCL)
  806.  
  807.  Introduction
  808.  
  809. NICHL (pronounced either N-I-H-C-L or "nickel") implements abstract data types 
  810. that have been designed to simplify object-oriented programming using C++. It 
  811. contains generally useful data types, such as String, Date, and Time, and it 
  812. provides a set of classes similar to the Smalltalk 80 collection classes 
  813. including OrderedCltn (indexed arrays), LinkedList (singly linked lists), 
  814. Set (hash tables), and Dictionary (associative arrays).
  815.  
  816. Classes Process, Scheduler, Semaphore, and SharedQueue implement multi-
  817. programming with coroutines.
  818.  
  819. The set of Vector classes and a handful of others such as Random (random number 
  820. generator) and Range (range of integers) assist in various kinds of arithmetic 
  821. and mathematical problems.
  822.  
  823. NIHCL includes an object I/O facility in its class implementation which can 
  824. make program- and machine-independent representations of arbitrarily complex 
  825. data structures comprising NIH Library and user-defined objects.
  826.  
  827. Client applications can then save these representations on disk files or move 
  828. them between programs running on the same or different (via network) machines.
  829.  
  830. For a more detailed description of NIHCL and its features see [8].
  831.  
  832.  Requirements and Availability
  833.  
  834. The NIH Class Library is intended to be portable to a UNIX system compatible 
  835. with either System V or 4.2/4.3BSD and which supports the AT&T C++ translator 
  836. Release 2.00, Release 2.1, or other compatible C++ compiler.
  837.  
  838. The library has been tested by the authors on Sun-3 with SunOS 3.5,
  839. Sun-3 with SunOS 4.0 and on Sun-4 with sunOS 4.0.
  840.  
  841. It is via anonymous ftp from alw.nih.gov (198.231.128.251) in file
  842. pub/nihcl.tar.Z.
  843.  
  844.  Evaluation
  845.  
  846.   Documentation
  847.  
  848. NIHCL is documented in [8], which is a book in data abstraction and object 
  849. oriented programming in C++ within whose framework the class library is 
  850. described.
  851.  
  852. Therefore the documentation has not the form of a reference manual, but it 
  853. provides a short description of the different classes with some examples.
  854.  
  855. This approach has the drawback that when you are developing code and you already
  856. have some knowledge of the library you would probably use more profitably a real
  857. reference manual.
  858.  
  859.   Usability
  860.  
  861. Not evaluated.
  862.  
  863.   Extendibility
  864.  
  865. This feature was not evaluated directly. However, chapter "Designing Library 
  866. Classes" of [8] is devoted to the way to extend the class library writing 
  867. user-defined classes.
  868.  
  869.   Performance
  870.  
  871. Not evaluated.
  872.  
  873.   Sensibleness
  874.  
  875. The classes provided by the library are several, and they are listed here:
  876.  
  877. NIHCL
  878.   Object
  879.     Bitset
  880.     Class
  881.     Collection
  882.       Arraychar
  883.       ArrayOb
  884.       Bag
  885.       SeqCltn
  886.         Heap
  887.         LinkedList
  888.         OrderedCltn
  889.           SortedCltn
  890.             KeySortCltn
  891.         Stack
  892.       Set
  893.         Dictionary
  894.           IdentDict
  895.         IdentSet
  896.     Date
  897.     FDSet
  898.     Float
  899.     Fraction
  900.     Integer
  901.     Iterator
  902.     Link
  903.       LinkOb
  904.       Process
  905.         HeapProc
  906.         StackProc
  907.     LookupKey
  908.       Assoc
  909.       AssocInt
  910.     Nil
  911.     Point
  912.     Random
  913.     Range
  914.     Rectangle
  915.     Scheduler
  916.     Semaphore
  917.     SharedQueue
  918.     String
  919.       Regex
  920.     Time
  921.     Vector
  922.       BitVec
  923.       ByteVec
  924.       ShortVec
  925.       IntVec
  926.       LongVec
  927.       FloatVec
  928.               DoubleVec
  929.   OIOifd
  930.   OIOin
  931.     OIOistream
  932.       OIOninhin
  933.   OIOofd
  934.   OIOout
  935.     OIOostream
  936.       OIOninhout
  937.   ReadFromTbl
  938.   StoreOnTbl
  939.  
  940. Note that, in addition to the normal general-purpose classes that are found in 
  941. other libraries as well you find a semaphore class, I/O classes, a process class
  942. and a scheduler class.
  943.  
  944.   Miscellaneous
  945.  
  946. The hierarchy provided by NIHCL is that of a tree.
  947.  
  948. Multiple inheritance is optionally supported (i.e. NIHCL can be compiled to 
  949. support multiple inheritance if desired).
  950.  
  951. No parameterized types (templates) are provided, although they can be 
  952. implemented using macros (as [8] suggests in section "Parameterized types in 
  953. the NIH class library").
  954.  
  955. An experimental exception handling mechanism is provided by NIHCL, although the 
  956. authors of the library suggest not to use it since it is unsafe and inefficient.
  957.  
  958. Garbage collection is not implemented.
  959.  
  960.   Other
  961.  
  962. NIHCL is a public domain C++ class library, provided in source format.
  963.  
  964. No idea whether it is supported or not.
  965.  
  966. The installation step was not carried out by me (the library had already been 
  967. installed on atos0), so I cannot say whether problems occurred during the 
  968. installation.
  969.  
  970.  
  971.  
  972.  
  973.  Comparison of the evaluated class libraries
  974.  
  975. The comparison of the class libraries evaluated so far is simply a
  976. table containing the different evaluation criteria.
  977.  
  978.               OATH               LEDA             COOL             NIHCL
  979. -------------------------------------------------------------------------------
  980. Author        B.M.Kennedy        K.Mehlhom        M.Fontana        Several
  981.               (TI Inc.)          S.Naeher         (TI Inc.)        (NIH)
  982. Type          PD                 SH               PD               PD
  983. Format        Source             Object           Source           Source
  984. Supported     No                 ?                No (?)           ?
  985. Installation  Easy               Easy             Problematic      N/E
  986. Compiler      AT&T 2.1           AT&T 2.1         AT&T 2.0         AT&T 1.2
  987.                                  AT&T 2.0                          AT&T 2.0
  988. Doc           Poor               Fair             Good             Fair
  989. Usability     Fair               Good             Good             N/E
  990. Extendibility Possible           Possible         Possible         Possible
  991. Performance   N/E                N/E              N/E              N/E
  992. Hierarchy     Tree               Forest           Forest           Tree
  993.                                                   (flat tree)
  994. Mult.Inherit. No                 No               No               Optional
  995. Paramet.Types No                 Yes              Yes              No
  996. Exc.Handling  No                 Yes (raw)        Yes              Yes (raw)
  997. Garb.Collec.  Yes                No               No               No
  998.  
  999. where PD = Public Domain
  1000.       SH = SHareware
  1001.       N/E = Not Evaluated
  1002.  
  1003.  
  1004.  
  1005.  References
  1006.  
  1007. [1] Brian M.Kennedy, 
  1008.       The Features of the Object-oriented Abstract Type Hierarchy, 
  1009.         Computer Systems Laboratory, Computer Science Center, Texas Instrument,
  1010.             26 August 1991
  1011.   
  1012. [2] OATH Reference Manual (OATH 0.8), 26 August 1991
  1013.  
  1014. [3] K.Mehlhorn & S.Naeher, 
  1015.       LEDA - A Library of Efficient Data Types and Algorithms
  1016.  
  1017. [4] S.Naeher, 
  1018.       LEDA User Manual (Version 2.1), 
  1019.         Max-Planck-Institut fuer Informatik, Saarbruecken
  1020.  
  1021. [5] M.Fontana et al., 
  1022.       COOL - C++ Object-Oriented Library, 
  1023.         Texas Instrument.
  1024.  
  1025. [6] COOL User Manual, 
  1026.       March 1990, Texas Instruments Inc.
  1027.  
  1028. [7] M.Fontana & M.Neath, 
  1029.       Checked Out and Long Overdue: Experiences in the Design of a C++
  1030.         Class Library, Texas Instrument Inc.
  1031.  
  1032. [8] K.E.Gorlen et al.,
  1033.       Data Abstraction and Object-Oriented Programming in C++, 
  1034.         1990, Wiley
  1035.  
  1036. [9] N.Head, SCOS II WN 10: 
  1037.       Policy issues for the use and development of Class libraries, Issue 1, 
  1038.         November 1991
  1039.  
  1040. [10] Jean-Christophe Collet (Axis Design), 
  1041.        C++ Products and Books List,
  1042.          August 1991
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048. Appendix I - Collection of Answers Got from the Network
  1049.  
  1050.  
  1051. ##############################################################################
  1052. (1)
  1053. From: jcc@gna.axis-design.fr (Jean-Christophe Collet)
  1054.  
  1055. Anyway, I did a lot of work with InterViews and I had a look to NihLib.
  1056. I Highly recommend InterViews 3.0 but found NihLib rather unusable (it's
  1057. a very big tree while we need more often a lot of small trees).
  1058.  
  1059. One very, VERY, important criteria of a class library is its documentation.
  1060. A very good library without a proper documentation is very hard to use
  1061. (if not useless). There is no need for the documentation to be thick and
  1062. verbose but it should gives all the info you need to use the class.
  1063.  
  1064. Then, there is reuse... (ako "how easy is it to derive a class ?")
  1065.  
  1066. InterViews is a VERY good example of a good library with appropriate doc.
  1067. ##############################################################################
  1068. (2)
  1069. From: fig.citib.com!kpt@fig.citib.com (Kevin P. Tyson)
  1070.  
  1071. I am in the process of reviewing/selecting C++ class libraries for our shop.
  1072. We have reviewed two todate.  The Booch Components and Tools.h++.  We started
  1073. out by deciding, loosely, what our requirements are.  They major ones boil
  1074. down to:
  1075.  
  1076. (1) High quality commercial support is very important to us.
  1077. (2) Support for multi-threaded programming is only slightly less important.
  1078. (3) Sophsiticated and extensible memory management support is our third
  1079.     requirement.
  1080.  
  1081. We are a DCE/ENCINA shop and this is what has driven our requirements.  We do
  1082. distributed transaction processing based applications.  Someone who does
  1083. scientific programming will have different requirements and someone working on
  1084. parallel processors will have their own requirements.
  1085.  
  1086. The next libraries we intend to examine are COOL and the USL C++ Components
  1087. library.  So far Booch meet the three requirements listed above but was much
  1088. too low level and lacked good documentation.  Tools.h++ could be extended to
  1089. meet our thread safe and memory management requirements, but that would have
  1090. made support difficult as it would require modifying their source code.
  1091.  
  1092. ##############################################################################
  1093. (3)
  1094. From: scott@scam.Berkeley.EDU (Scott Silvey)
  1095.  
  1096. Well, here is a summary of the responses I got from people concerning my
  1097. question about public domain C++ libraries.  Mr Chuck Noren is a big
  1098. NIHCL fan, but he appears to be the only one who is really familiar with
  1099. one of the libraries I asked about.  There is some very helpful infomation
  1100. in these letters, so if you are considering one of the public domain
  1101. library packages, I suggest you read on...  Surely though, there must be
  1102. some other people out there with opinions they'd like to voice?  You know,
  1103. for the benefit of the naive neophyte masses out there hungering for
  1104. information about C++ and free software?
  1105.  
  1106. Thank you very much to everyone who responded, I really appreciate your time
  1107. and helpfulness!
  1108.  
  1109. Scott Silvey,
  1110. scott@xcf.berkeley.edu
  1111.  
  1112.  
  1113. Long posting follows:
  1114.  
  1115. *******************************************************************************
  1116. (3.1)
  1117. % From: bergquis@gdc.com (Brett Bergquist)
  1118.  
  1119. Did you get the paper about COOL 
  1120.  
  1121. "Checked Out and Long Overdue:
  1122.     Experiences in the Design of a C++ Class Library".  
  1123.  
  1124. In this paper, the authors discuss the strengths and weaknesses of the design 
  1125. of COOL.
  1126.  
  1127. A couple of points that they mentioned that they would do differently
  1128. would be to simplify the dependencies between classes by using MI.
  1129.  
  1130. Also they would factor out the use of the symbolic and package mechanism.
  1131.  
  1132. Performance is not mentioned as an issue.
  1133.  
  1134. *******************************************************************************
  1135. (3.2)
  1136. % From: Chuck Noren 
  1137.  
  1138. I have been a big user of NIHCL.  Its not the most elegant library, but there 
  1139. are some big advantages in using it.
  1140.  
  1141. With any PD library, such as COOL (I have not looked at it), you will find 
  1142. warts and major flaws.  I have found this with NIHCL.  However, what I did 
  1143. find was that I could get major parts of the project going sooner than if I 
  1144. had to develop a class library myself.  
  1145.  
  1146. The "buyer" must beware on any of this stuff, for there will be hidden costs.  
  1147.  
  1148. The first is some bugs in the library without vendor support.  You might get 
  1149. some support from USENET, but if you really start using these packages you 
  1150. will find that you have become one of the "experts".  You will need to develop 
  1151. your in house expertise with some enthusiastic "hackers" who love to play with 
  1152. these kind of things and track down bugs as they are found.  I've been an 
  1153. enthusiastic hacker of NIHCL for our group and modified it to work with the 
  1154. Object Oriented Database (ObjectStore from Object Design, Inc.).
  1155.  
  1156. Personally, I would consider buying a class library (such as the Booch 
  1157. Componants) before getting a free copy of a class library from a private 
  1158. company (NIHCL is from the U.S. Govt).  I take a cynical (and possibly wrong) 
  1159. view of this.  If a private company has a REALLY GOOD class library, they may 
  1160. be hesistant to make it freely available, because it becomes something they 
  1161. could sell or use as a competetive advantage against other companies.  While
  1162. we have just made our version of NIHCL Public Domain, we have kept back the 
  1163. really good classes we've developed so that our company can compete better 
  1164. against others. (I would personally rather share more software for sharing 
  1165. really benifits everybody, but I was lucky to convince my company just to let 
  1166. our modified NIHCL go, because we would not get anyone to buy it and others 
  1167. will have modified their copy's of NIHCL soon to work with an OODBMS anyway).  
  1168.  
  1169. The Booch componants cost well less than $1000 (and you get source plus the 
  1170. reputation of a company behind it) and will save thousands in development time.
  1171.  
  1172. Even NIHCL is worth considering.  From experience, its not as slow as some 
  1173. people make out.  It does go against the "C++ philosophy" in some respects,
  1174. but it does have some advantages that fit well in some projects.
  1175.  
  1176. I feel that no current library will address all the needs off all applications.
  1177. Certainly NIHCL does not (and COOL, although I have not seen it).  But some 
  1178. projects will fit well with the various libraries (ours fit with NIHCL very 
  1179. well).  
  1180.  
  1181. But also be forwarned, getting a class library is like getting a new language, 
  1182. there is one hell of a learning curving, but it is well worth it.
  1183.  
  1184. *******************************************************************************
  1185. (3.3)
  1186. % From: eyckmans%imec.be@imec.be
  1187.  
  1188.  
  1189. In article , you write:
  1190. |>   Now, has anyone actually used COOL and would you have any idea why the
  1191. |>   authors expressed reservations about it's quality?  How does it compare
  1192. |>   with other public domain libraries?  Are there any good ones out there
  1193. |>   that you would like to boast about?
  1194.  
  1195. I have not used COOL (yet). As a matter of fact, I have not yet actively
  1196. used any of the libaries mentioned below, but here goes anyway...
  1197.  
  1198.  COOL
  1199.  ====
  1200.  
  1201.    advantages
  1202.    ----------
  1203.    - uses templates
  1204.    - uses exceptions
  1205.  
  1206.    disadvantages
  1207.    -------------
  1208.    - COOL templates are not 100% ARM conformant
  1209.    - no garbage collection support at all
  1210.    - common root class (Smalltalk)
  1211.    - COOL uses an exception implementation which is not even close
  1212.      to the ARM
  1213.  
  1214.    remarks
  1215.    -------
  1216.    - I have not yet tried to compile it with DEC C++ v1.0.
  1217.    - I think that the main objection the COOL authors have against
  1218.      it, is that they feel that their class hierarchy is not optimal.
  1219.      (Almost) all COOL classes either directly or indirectly inherit
  1220.      from a common root class called Generic. In their documentation,
  1221.      the authors state that if they were to redo it, they would rather 
  1222.      go for a forest of base classes.
  1223.  
  1224.  
  1225.  NIH
  1226.  ===
  1227.  
  1228.    advantages
  1229.    ----------
  1230.    - used in many applications, and therefor thoroughly tested
  1231.  
  1232.    disadvantages
  1233.    -------------
  1234.    - no garbage collection support at all
  1235.    - no templates
  1236.    - no exceptions
  1237.    - common root class (Smalltalk)
  1238.  
  1239.    remarks
  1240.    -------
  1241.    - I have not yet tried to compile it with DEC C++ v1.0.
  1242.  
  1243.  
  1244.  LEDA
  1245.  ====
  1246.  
  1247.    advantages
  1248.    ----------
  1249.    - well designed set of data types
  1250.    - looks as if it should be very efficient
  1251.    - uses some template-like construct
  1252.  
  1253.    disadvantages
  1254.    -------------
  1255.    - no exceptions
  1256.    - LEDA `templates' are not even close to the ARM
  1257.    - use is restricted to "research and education"
  1258.    - use is not for free (but it's cheap)
  1259.    - I cannot possibly get it to compile with DEC C++ v1.0
  1260.  
  1261.  
  1262.  OATH
  1263.  ====
  1264.  
  1265.    advantages
  1266.    ----------
  1267.    - garbage collection comes "for free"
  1268.    - focuses on a how to implement classes, instead of on yet another set 
  1269.      of classes
  1270.  
  1271.    disadvantages
  1272.    -------------
  1273.    - common root class (Smalltalk)
  1274.    - no templates
  1275.    - no exceptions
  1276.    - garbage collection comes "for free"
  1277.    - nobody can possibly get it to compile with DEC C++ v1.0
  1278.      without major modifications
  1279.  
  1280. *******************************************************************************
  1281. (3.4)
  1282. % From: Chuck Noren 
  1283.  
  1284. > What would you consider are NIHCL's strengths?  Perhaps a full,
  1285. > coherent system of objects?  Relatively stable and bug-free?
  1286. > Somewhat standardized because many people use it?  How is it's
  1287. > support for things like graphics and mathematics?
  1288.  
  1289. NIHCL's strengths:
  1290.  
  1291.  1.  Provides a coherent system of objects (I like your words).
  1292.      There are collections, date/time classes, variety of
  1293.      scaler types, string classes, and light-weight processing.
  1294.      Almost all the classes work interchangeably in the various
  1295.      collections, such as sets, bags, dictionaries.  You can use
  1296.      a string as an key to a dictionary, as well as time, date, even
  1297.      another collection.
  1298.  
  1299.  2.  It is relatively bug free and stable.  We have encountered
  1300.      very few bugs, and most of them dealt with bugs in the
  1301.      particular C++ compiler we were using.
  1302.  
  1303.  3.  A fair number of people are using it.  You can appeal to the
  1304.      Internet and get timely help on questions and problems.
  1305.      Keith Gorlen himself (one of the authors of NIHCL) will
  1306.      assist time to time.
  1307.  
  1308.  4.  Run time type identification.  While this is not always
  1309.      useful or even advantageous to use, there are certain
  1310.      times when run time type identification greatly simplifies
  1311.      the design and use of certain capabilities.  One of these
  1312.      is being able to send heterogenious Inter-Process
  1313.      Communication objects.  Sometimes applications need
  1314.      truely dynamic objects at run time (e.g., in some database
  1315.      applications or applications where the operator needs
  1316.      to manipulate and create lots of very flexible objects).
  1317.      [soap box: this feature would be useful in the C++ language 
  1318.       itself, in certain very limited situations, but one reason 
  1319.       it is not included is that programmers would be tempted to 
  1320.       abuse it.  I feel that the philosophy of C and C++ is to give 
  1321.       you the power and you are responsible to learn how to use it 
  1322.       right.]
  1323.  
  1324.  5.  "Safe" virtual base castdowns.  These classes can be used
  1325.      in a multiple inheritence design (again, this has limited
  1326.      use in good designs, but when you need it, its very useful!).
  1327.      There is a consistent set of member functions that allow you 
  1328.      to safely castdown from a virtual base class pointer to a 
  1329.      derived class pointer.  Normally you want to use the virtual 
  1330.      member function mechanism, but in certain limited situations 
  1331.      (e.g., where you are forced to use heterogenous collections)
  1332.      this can be very useful.
  1333.  
  1334.  
  1335.  6.  Support for shallow and deep copies.  If you follow the
  1336.      discipline of NIHCL classes, your objects will be able
  1337.      to de shallow and deep copies of itself and all of its
  1338.      member pointers.  Previously copied objects will be handled
  1339.      "automatically".
  1340.  
  1341.  7.  Stream and file I/O.  You can use the NIHCL I/O features
  1342.      to make a "poor man's database".  If you follow the NIHCL
  1343.      discipline, all your objects can be written to a flat file
  1344.      (and read in) very easily.  You can also send your objects
  1345.      via Inter-Process Communcation (IPC) very easily.  All you
  1346.      have to do is create a simple IPC mechanism.
  1347.  
  1348.  8.  A variety of polymorphic heterogenous collections.
  1349.  
  1350.  9.  Good documentation.  First, understand that there is never
  1351.      enough documentation in any package!  But given this, Gorlen
  1352.      and company have published a book and have a good
  1353.      reference manual on the class library.
  1354.  
  1355. 10.  Complete source code.
  1356.  
  1357. 11.  Portable code.  It can be built on a wide variety of systems
  1358.      with a wide variety of C++ compilers.
  1359.  
  1360. 12.  No copyright or license (but beware of Regex).  All of the
  1361.      NIHCL library is public domain except Regex.  There is some
  1362.      controversy about Regex (since it has the GNU Copyleft
  1363.      agreement).  Some, like myself believe the simple removal
  1364.      of Regex gets around the Copyleft problem.  Others say
  1365.      that is not enough.  Check your legal counsel to be sure.
  1366.  
  1367. There are some disadvantages to NIHCL, to be sure.  However there
  1368. has been a lot of NIHCL bashing around.  As I stated, no class
  1369. library is a perfect fit for every application and care should
  1370. be taken not to force fit a class library into an application
  1371. not well suited for it.  Some disadvantages of NIHCL include:
  1372.  
  1373.  1.  Name clashes with existing libraries.  Names like "Object",
  1374.      and "String" are used in other places (such as X-Windows and
  1375.      Motif).  We had to modify our copy of NIHCL so that the
  1376.      classes were prepended with the letters "Nih", so Object and
  1377.      String, for instance, became NihObject and NihString.  This
  1378.      eliminated the clash.  There was a close call with the typedef
  1379.      of bool in NIHCL, since X-Windows/Motif have a Bool, but
  1380.      fortunatly the case is different.  New class libraries
  1381.      should consider how they can minimize name clashes.
  1382.  
  1383.  2.  The polomorphic single class hierarchy style of classes evades
  1384.      compile time type checking.  This means your bugs are caught
  1385.      more often in run time than if you had a library which used the 
  1386.      derived classes more often.  This is a trade-off.  The single 
  1387.      class hierarchy provides a number of advantages, but at a cost.
  1388.  
  1389.  3.  A class ultimately derived from the NIHCL Object class
  1390.      (which is every class) cannot be defined as a template
  1391.      class.  This does not prevent you from having its member
  1392.      be intances of template classes (which we have done a number
  1393.      of times).  There are many reasons this cannot be done,
  1394.      part of which is the dynamic run time type identification
  1395.      mechanism.  Again, there is a trade-off.
  1396.  
  1397.  4.  There are some single-theaded (non-reentrant) sections of
  1398.      code (such as in the deep copy mechanism).  This is something
  1399.      to watch for in any class library.
  1400.  
  1401.  5.  The NIHCL discipline.  Many people think of NIHCL as hard to
  1402.      work with and hard to learn.  This is in part due to the
  1403.      things you must do in creating a class to work inside the
  1404.      NIHCL framework.  However, the discipline is not that difficult,
  1405.      and following it pays off with NIHCL's advantages.
  1406.  
  1407.  6.  Some execution inefficiencies.  Due to the polymorhic, single
  1408.      inheretence style of NIHCL, some things are done that other
  1409.      class libraries would avoid (such as castdown and checking
  1410.      an object's type before proceeding to do what you want in
  1411.      some of the code).  This does cost some execution overhead, but
  1412.      we found for us that the library is fast enough).  Again, these
  1413.      are tradeoff issues.
  1414.  
  1415. *******************************************************************************
  1416. (3.5)
  1417. % From: Chuck Noren 
  1418.  
  1419. I forgot to answer a couple of questions...
  1420.  
  1421.  You also asked if NIHCL provided good graphics support and math support.
  1422.  The answer is no on both counts.  We evaluated InterViews over a year ago 
  1423.  and rejected it (because we were familiar with X-Windows and want to hack 
  1424.  it directly).  NIHCL does provide some vector classes which we have not 
  1425.  looked at because I could not get them to build with an older version of 
  1426.  our compiler.  NIHCL doesn't have any math matrix classes and some of the 
  1427.  other useful mathematics classes.
  1428.  
  1429. *******************************************************************************
  1430. (3.6)
  1431. % From: eyckmans%imec.be@imec.be
  1432.  
  1433. Hello,
  1434.  
  1435. First of all, let me start by giving you a bit of background information
  1436. on what my organisation is (and intends to be) doing. This will allow you
  1437. to read my answers to your questions in the correct context.
  1438.  
  1439.  IMEC is a research institute focusing on the (automation of the) design
  1440.  of VLSI chips. Part of the support we offer to the people who are doing
  1441.  research into the area of high level synthesis, currently consists of a
  1442.  C++ libary, written on top of NIH. At the moment, this libary is being
  1443.  redesigned from scratch (for various reasons), and this is where I (as
  1444.  a software expert) enter the picture. I should also add that we have to
  1445.  be able to distribute source code which ideally should run on different
  1446.  types of hardware. As you can see, using commercial class libraries is
  1447.  somewhat out of the question (although that may change).
  1448.  
  1449.  So, one of the many things I am doing now, is to investigate what C++
  1450.  libaries are available to build upon, and whether they at least partially
  1451.  fit our needs. My problem is that, although I do have some experience with
  1452.  OO, I have never used C++ for "real applications", so my current knowledge
  1453.  of C++ is limited (but growing rapidly).
  1454.  
  1455.  
  1456. Having said all that, here is what you are really after :
  1457.  
  1458. > How is it the various libraries won't with with DEC's C++?  Are they non
  1459. > standard C++ or do they just not comply with C++ 3.0?  How do you know
  1460. > that they do not work with DEC C++?
  1461.  
  1462. To my knowledge, DEC C++ v1.0 is *very* ARM compliant, while most other
  1463. C++ compilers are not. This is one of the reasons why we are switching
  1464. to the DEC compiler. Here is a list of what we have tried to compile
  1465. with it until now :
  1466.  
  1467.  - InterViews
  1468.  - LEDA
  1469.  - OATH
  1470.  - SPOOK (don't ask)
  1471.  - some of our own tools
  1472.  
  1473. Basically, in all cases we have discovered things which are not allowed
  1474. by the ARM, but somehow did compile on previous compilers (g++ as well as
  1475. various derivatives of cfront 2.0 and 2.1). Some of these were easy to fix,
  1476. but some weren't. As a matter of fact, the SPOOK tool set is the only thing
  1477. in the above list which, after modification, did make it all the way to
  1478. executable code.
  1479.  
  1480.  
  1481. > Are these notes impressions that you've gotten from people who have used
  1482. > these various libraries?
  1483.  
  1484. That depends on what libary we are talking about, so let's make a list :
  1485.  
  1486.  NIH  : As I have said, this has been used in the previous version of
  1487.         our Synthesis Backbone. In addition, I picked up some info on
  1488.         comp.lang.c++.
  1489.  
  1490.  COOL : This has not been used at our site, but I have received some
  1491.         info from other people (isn't usenet great?). I also looked at
  1492.         the manual.
  1493.  
  1494.  LEDA : I have looked at the manual, and have actually tried to compile
  1495.         it with DEC C++ v1.0.
  1496.  
  1497.  OATH : I have looked at the manual, and have actually tried to compile
  1498.         it with DEC C++ v1.0.
  1499.  
  1500.  
  1501. > Do you intend to get involved with one of these packages in the future?
  1502.  
  1503. I guess I've already answered this in my introduction.
  1504.  
  1505.  
  1506. > Does this mean that you've tried to get it to work with cxx but it
  1507. > won't compile?  Or do you just know that it won't work becuase it uses
  1508. > non standard C++?
  1509.  
  1510. This question was about LEDA, so here are the gory details of what happened :
  1511.  
  1512.  1: When compiling LEDA in its pure form, the compiler threw lots of
  1513.     warning and error messages at me.
  1514.  
  1515.  2: I was able to solve most (but not yet all) of these, but now each
  1516.     compilation ends with the following message (provided that it does
  1517.     not report syntax errors) :
  1518.  
  1519.      11, fatal: A bugcheck occurred in the compiler.
  1520.  
  1521.     This is true even for the smallest of files, so I suspect there
  1522.     must be some very ugly stuff in the header files, but I have
  1523.     no idea what this might be.
  1524.  
  1525.     Because of this, I just gave up. So I can't tell you whether the
  1526.     remaining syntax errors are solvable or not.
  1527.  
  1528.  
  1529. While I'm at it, allow me to elaborate a little bit on my statement
  1530. about compiling OATH with DEC C++ v1.0. The first time round, the
  1531. compiler flagged lots of errors. I was able to solve this, but than
  1532. I ran into an illegal downcast upon which, unfortunately, a large part
  1533. of the OATH library depends. This is why I said that major changes to
  1534. the code would be needed. However, after sending my mail, I realized
  1535. that there is a small possibility that this second problem (although
  1536. present in the code from the beginning) was actually activated by the
  1537. changes I made. So it looks like I will have to try again.
  1538.  
  1539. ##############################################################################
  1540. (4)
  1541. From: dsr@bnr.co.uk
  1542. Subject: Summary - Class Libraries
  1543.  
  1544. In article <5307@stl.co.uk> I wrote:
  1545. >I'd like to know what libraries for C++ are available both
  1546. >commercially and public domain.  If possible, an opinion of
  1547. >the library would be nice.
  1548. >
  1549.  
  1550. This is a summary of the responses to my query.  Each library name
  1551. has a tag field called "Name:" for easy extraction.  This response is
  1552. sectioned into Public Domain and Commercial/Private domain.  Any
  1553. library whose domain was unknown has been placed in the Commercial/Private
  1554. domain.
  1555.  
  1556. The following class libraries are mentioned in this summary:-
  1557.  
  1558. Name: OATH (Object-oriented Abstract Type Hierarchy)
  1559. Name: COOL (C++ Object-Oriented Library)
  1560. Name: NIHCL (National Institute of Health's C++ Library)
  1561. Name: libg++ (GNU's C++ library)
  1562. Name: InterViews
  1563. Name: Unidraw
  1564. Name: ET++
  1565. Name: Classix
  1566. Name: NIHCL
  1567. Name: Linpack.h++
  1568. Name: Matrix.h++
  1569. Name: LEDA (Part 1)
  1570. Name: LEDA (Part 2)
  1571. Name: USL (UNIX System Laboratories Europe Ltd.)
  1572. Name: Rational
  1573. Name: Booch Components
  1574. Name: Open Dialogue
  1575. Name: Zinc Interface Library (Iconic user interface)
  1576. Name: C++/Views (Iconic user interface)
  1577. Name: MacApp (application development toolkit)
  1578. Name: ICpak101
  1579. Name: ICpak201
  1580. Name: NeXTStep (application development toolkit)
  1581. Name: CommonView (Iconic user interface)
  1582. Name: Analyst (Information Centre)
  1583. Name: Humble  (Expert system package)
  1584.  
  1585. When choosing a library, perhaps the following should be used as a
  1586. guideline to the library's "goodness":-
  1587.  
  1588.         1) Demand at least one test case per method
  1589.         2) Documentation should be sufficient to allow use in binary
  1590.         form.
  1591.         3) All "improvements" should be sent to supplier for
  1592.         integration into standard product (gets rid of maintenance :-)
  1593.         4) Cloning is not reusing.
  1594.  
  1595.  
  1596. Public Domain Libraries
  1597. ~~~~~~~~~~~~~~~~~~~~~~~
  1598.  
  1599. Name: OATH (Object-oriented Abstract Type Hierarchy) was designed
  1600. as an experiment in increasing object-oriented reuse.
  1601. It has a fairly high learning curve, but potentially
  1602. higher gains if you are looking for a more flexible and
  1603. robust abstraction.  It is completely unsupported.
  1604.  
  1605.         anonymous ftp from csc.ti.com (192.94.94.1)
  1606.         in the file pub/oath.tar.Z
  1607. ---------------------------------------------------------
  1608.  
  1609. Name: COOL (C++ Object-Oriented Library) was designed as an
  1610. experiment in templates and exception handling.  Templates
  1611. are implemented via a preprocessor with an advanced macro
  1612. capability.  It displays a different set of trade-offs
  1613. from OATH.  It is also completely unsupported.
  1614.  
  1615.         anonymous ftp from csc.ti.com (192.94.94.1)
  1616.         in the file pub/COOL.tar.Z
  1617. ---------------------------------------------------------
  1618.  
  1619. Name: NIHCL (National Institute of Health's C++ Library) is
  1620. essentially a mapping of part of Smalltalk's library
  1621. into C++.  It lies somewhere between OATH and COOL.
  1622. It is a little better supported and there is a textbook
  1623. by the author, Keith Gorlen, that is fairly good documentation.
  1624. However, the Smalltalk hierarchy is not completely
  1625. consistent (IMO) with the C++ strong typing nature.
  1626. It is weakly supported.
  1627.  
  1628.         anonymous ftp from alw.nih.gov (198.231.128.251)
  1629.         in the file pub/nihcl.tar.Z
  1630. ---------------------------------------------------------
  1631.  
  1632. Name: libg++ (GNU's C++ library) is probably only relevant if
  1633. you are using g++; and if so, you already know about it.
  1634. It does have some good implementations of bignum's and
  1635. of regular expressions and strings.
  1636.  
  1637.         anonymous ftp from aeneas.mit.edu (18.71.0.38)
  1638.         in pub/gnu/libg++-*
  1639. ---------------------------------------------------------
  1640.  
  1641. Name: InterViews is an excellent GUI class library (IMO, the best)
  1642. developed by Stanford University.  Make sure you get v3.0 or
  1643. later (it is significantly improved from 2.6).  V3.1 should
  1644. be out in March, basically rounding out and solidifying the
  1645. 3.0 approach.  This library contains excellent examples of
  1646. multiple inheritance used profitably.
  1647.  
  1648.         anonymous ftp from interviews.stanford.edu
  1649. ---------------------------------------------------------
  1650.  
  1651. Name: Unidraw is a graphical editor building library based on top
  1652. of Unidraw.  I would suggest waiting to V3.1's release.
  1653.  
  1654.         anonymous ftp from interviews.stanford.edu
  1655. ---------------------------------------------------------
  1656.  
  1657. Name: ET++ is a large GUI library and other C++ tools developed
  1658. in Europe
  1659.  
  1660.         anonymous ftp from apple.com
  1661.         in pub/ArchiveVol2/et++/*
  1662.  
  1663.         or nuri.inria.fr
  1664.         in gnu/et++-2.0.tar.Z
  1665. ---------------------------------------------------------
  1666.  
  1667.  
  1668. Name: Classix
  1669.  
  1670. In addition to Rogue Wave, Empathy offers a good general-purpose
  1671. library called Classix.
  1672.  
  1673. ----------------------------
  1674.  
  1675. Name: NIHCL
  1676.  
  1677. If you really want Public Domain, there is NIHCL, which is public domain
  1678. in the US, and apparently outside as well. Here's some information; if
  1679. no one mails you ftp directions for it, let me know and I'll see what I
  1680. can find.
  1681.  
  1682. ------------------------------------
  1683.  
  1684. Commercial/Private Libraries
  1685. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1686.  
  1687. Name: Linpack.h++
  1688. Name: Matrix.h++
  1689.  
  1690.   N E W    P R O D U C T    R E L E A S E
  1691.  
  1692.    C++ Version of Linpack Announced
  1693.  
  1694. Rogue Wave Software, Inc., November 1, 1991.  Rogue Wave Software,
  1695. Inc. announces today that it has started shipping two new C++ class
  1696. libraries, Matrix.h++ and Linpack.h++.  These new C++ class libraries
  1697. extend the C++ language to include numerical algorithms that were
  1698. previously available only in Fortran.
  1699.  
  1700. Linpack.h++ is an object-oriented C++ version of the widely used Fortran
  1701. library.  Linpack.h++ includes 100% of the functionality of the Fortran
  1702. version, plus much more.  Because Linpack.h++ is written in C++ it has
  1703. capabilities that far exceed the Fortran version.
  1704.  
  1705. C++'s unique position as an extensible object-oriented language that is
  1706. extremely efficient makes it one of the best languages for solving
  1707. complex  numerical problems.  Rogue Wave's new libraries take full
  1708. advantage of C++'s strengths:  operator overloading, object-orientation,
  1709. and speed.  Programmer productivity is boosted because you work with
  1710. whole objects that represent numerical data rather than low-level "DO"
  1711. loops.  The result is fewer, but more expressive, lines of code.  But,
  1712. because these libraries are based on highly-optimized low-level assembly
  1713. routines, they are extremely fast, frequently faster than the equivalent
  1714. Fortran.
  1715.  
  1716. Dr. Thomas Keffer, President of Rogue Wave Software, Inc. says
  1717. "Matrix.h++ and Linpack.h++ both represent major milestones for the
  1718. C++ and numerical communities.  Engineers, scientists, and financial
  1719. analysts now have the C++ tools needed to make their job easy.  The lack
  1720. of these tools has kept them chained to Fortran."
  1721.  
  1722. Charlie Finan of CRAY Research had this to say of Linpack.h++:
  1723. "Looks like you wrote the classes just the way I would...and my job is to
  1724. write fast code!  You did it right!"
  1725.  
  1726. Both Matrix.h++ and Linpack.h++ are completely compatible with Rogue
  1727. Wave's other C++ class libraries, Tools.h++ and Math.h++, which are
  1728. accepted standards in the industry.  Matrix.h++ and Linpack.h++ are
  1729. available for most machines, from MS-DOS to UNIX, including a
  1730. vectorized version for the CRAY.
  1731.  
  1732. Matrix.h++ includes all the funtionality of Math.h++.  For example:
  1733. general matrices, vectors, statistics, complex numbers, Fast Forier
  1734. Transformation (FFT's), etc.  Matrix.h++ adds specialized matrix classes
  1735. such as banded, symmetric, positive-definite, Hermitian, tridiagonal, etc.
  1736. Because Matrix.h++ includes Math.h++, it can take advantage of
  1737. Math.h++'s highly optimized low-level assembly routines, making it fast
  1738. as well as graceful.
  1739.  
  1740. Linpack.h++ is the jewel of C++ math classes.  Linpack.h++ includes all
  1741. of Matrix.h++, plus all of the functionality in the original and well-
  1742. established Fortran version; including solutions of systems of equations
  1743. for a variety of matrix types, solutions of over- and under-determined
  1744. systems of equations, incremental least squares solvers, etc.  But,
  1745. Linpack.h++ is a tru object-oriented library, not just a C version that
  1746. compiles under C++:  the traditional messiness of the Fortran version has
  1747. been replaced with high-level, yet efficient, objects that make code far
  1748. easier to write and maintain.
  1749.  
  1750. The classes are available now.  Prices range from $199 to $995 for
  1751. Matrix.h++ and $299 to $1195 for Linpack.h++.
  1752.  
  1753. Rogue Wave Software Inc. is a software company that develops and sells
  1754. high quality C++ class libraries.  Its customers include end users and C++
  1755. compiler manufacturers such as Borland, JPI, Oregon Software, Liant
  1756. Software, and others.  Rogue Wave Software Inc. is located at 1325 NW
  1757. 9th Street, Corvallis, OR, 97330, (503) 754-2311.
  1758.  
  1759. ---------------------------------------
  1760.  
  1761. Name: LEDA (Part 1)
  1762.  
  1763. There is LEDA, Library of Efficient Datatypes and Algorithms, by Stefan
  1764. N"aher from Germany. It is available for educational purposes but its NOT in
  1765. the public domain.
  1766.  
  1767. Provides basic data-types like lists, stacks, queues, trees, sets,
  1768. partitions, priority queues and a few others. These are parameterizable
  1769. classes, you may add your own datatype and have a priority queue ...
  1770. An important datatype is a graph, these are also parameterizable and there
  1771. are useful algorithms for them like shortest path, transitive closure,
  1772. matching, maximum flow, spanning tree and others, we have implemented a few
  1773. algorithms for dealing with perfect graphs, but these ar not part of the
  1774. standard library.
  1775. The latest part deals with computational geometry, as we are a graph theory
  1776. group I have not looked at that part yet.
  1777.  
  1778. Opinion : very useful, has saved me a lot of work when messing around with
  1779. basic datastructures and simplifies notation quite a bit. It provides
  1780. exactly those things which you would need, but do not have the time to mess
  1781. around with when you need to solve a problem. It takes fairly little time
  1782. to know how to use it, but due to the implementation of generics as
  1783. preprocessor macros its not as flexible as a full blown class library with
  1784. templates for instance. (besides : which compiler has templates ?)
  1785.  
  1786. ----------------------------------------------------
  1787.  
  1788. Name: USL (UNIX System Laboratories Europe Ltd.)
  1789.  
  1790.  
  1791.    UNIX System Laboratories Europe Ltd.
  1792.    International House
  1793.    Ealing Broadway
  1794.    London W5 5DB England
  1795.    +11-44-81-587-7711
  1796.  
  1797. It appears quite complete (unless you have some specific, uncommon
  1798. needs); Booch may have an edge in supporting concurrency. USL may have
  1799. more installations and greater maturity.
  1800.  
  1801. ----------------------------------------------------
  1802.  
  1803. Name: LEDA (Part 2)
  1804.                                   LEDA
  1805.  
  1806.              A Library of Efficient Data Types and Algorithms
  1807.  
  1808.                              Stefan Naeher
  1809.                    Max-Planck-Institut fuer Informatik
  1810.                   Im Stadtwald, 6600 Saarbruecken, FRG
  1811.  
  1812.                         (stefan@mpi-sb.mpg.de)
  1813.  
  1814.  
  1815. LEDA is a library of the data types and algorithms of combinatorial computing.
  1816. The main features are:
  1817.  
  1818. 1.  LEDA provides a sizable collection of data types and algorithms in a form
  1819.     which allows them to be used by non-experts. In the current version, this
  1820.     collection includes most of the data types and algorithms described in the
  1821.     text books of the area.
  1822.  
  1823. 2.  LEDA gives a precise and readable specification for each of the data types
  1824.     and algorithms mentioned above.  The specifications are short (typically,
  1825.     not more than a page), general (so as to allow several implementations),
  1826.     and abstract (so as to hide all details of the implementation).
  1827.  
  1828. 3.  For many efficient data structures access by position is important. In
  1829.     LEDA, we use an item concept to cast positions into an abstract form. We
  1830.     mention that most of the specifications given in the LEDA manual use this
  1831.     concept, i.e., the concept is adequate for the description of many data
  1832.     types.
  1833.  
  1834. 4.  LEDA contains efficient implementations for each of the data types, e.g.,
  1835.     Fibonacci heaps for priority queues, red-black trees and dynamic perfect
  1836.     hashing for dictionaries, ...
  1837.  
  1838.  
  1839. 5.  LEDA contains a comfortable data type graph. It offers the standard
  1840.     iterations such as ``for all nodes v of a graph G do'' or ``for all
  1841.     neighbors w of v do'', it allows to add and delete vertices and edges
  1842.     and it offers arrays and matrices indexed by nodes and edges,...
  1843.     The data type graph allows to write programs for graph problems in a
  1844.     form close to the typical text book presentation.
  1845.  
  1846. 6.  LEDA is implemented by a C++ class library. It can be used with the C++
  1847.     compilers cfront 2.0, cfront 2.1, g++-1.37.1 or g++-1.40.3. It is
  1848.     distributed via anonymous ftp from
  1849.  
  1850.           sbsvax.cs.uni-sb.de (134.96.252.31),    
  1851.           file: /pub/LEDA/LEDA-.tar.Z
  1852.  
  1853. ---------------------------------------------------
  1854.  
  1855. Name: USL (UNIX System Laboratories Europe Ltd.)
  1856.  
  1857.  
  1858.    UNIX System Laboratories Europe Ltd.
  1859.    International House
  1860.    Ealing Broadway
  1861.    London W5 5DB England
  1862.    +11-44-81-567-7711
  1863.  
  1864. It appears quite complete (unless you have some specific, uncommon
  1865. needs); Booch may have an edge in supporting concurrency. USL may have
  1866. more installations and greater maturity.
  1867.  
  1868. ------------------------------------------------------
  1869.  
  1870. Name: Rational
  1871. Name: Booch Components
  1872.  
  1873. Rational markets the C++ Booch objects which are a somewhat bizarre,
  1874. but possibly quite innovative, set of library objects.
  1875.  
  1876. The US phone number for Rational is: Rational OO products 408-496-3700
  1877.  
  1878. It appears quite complete (unless you have some specific, uncommon
  1879. needs); Booch may have an edge in supporting concurrency. USL may have
  1880. more installations and greater maturity.
  1881.  
  1882. ------------------------------
  1883.  
  1884. Name : StarView (long)
  1885.  
  1886. A Portable C++ Class Library for Graphical User Interfaces
  1887.  
  1888. Author:     Andreas Meyer, STAR DIVISION
  1889.  
  1890. Contact:    STAR DIVISION GmbH
  1891.             Andreas Junge
  1892.             Zum Elfenbruch 5-11
  1893.             D-2120 Lueneburg
  1894.  
  1895.             Phone: ++49 4131 700943
  1896.             Fax:   ++49 4131 700921
  1897.             Email: ...!unido!starlab!aj
  1898.  
  1899. The development of large applications for Graphical User Interfaces
  1900. (GUI's) like MS-WINDOWS, MS Presentation Manager or OSF/Motif is a very
  1901. time consuming job. In addition, the application programming interfaces
  1902. (API's) of the different GUI's are totally incompatible making a direct
  1903. port of source code to another GUI platform impossible, almost all code
  1904. driving the user's interface must be re-written by the programmer.
  1905.  
  1906. Two years ago, STAR DIVISION decided to develop a set of new applications
  1907. for GUI's which should fulfill the requirements of modern software
  1908. standards this entails:
  1909.  
  1910. -   portability between the operating systems MS-DOS, OS/2, Macintosh
  1911.     and different UNIX flavours
  1912. -   at  least portable between  the  GUI's MS-WINDOWS, MS-Presentation
  1913.     Manager, MacApp and OSF/Motif
  1914. -   fulfillment of the requirements of the different GUI Style
  1915.     Guide's
  1916. -   data  exchange and direct communication between the applications in
  1917.     homogeneous and heterogeneous networks (groupware approach)
  1918.  
  1919. Because of the indifferent "political" situation (i.e. MS-DOS or OS/2 or
  1920. UNIX or everything, WINDOWS or PM or X.11 or everything) we decided to
  1921. develop a set of tools which helps us to be mostly independent from the
  1922. decisions of the OS and hardware vendors. In addition tools help to
  1923. improve productivity and are the base for a successful software project.
  1924. C++ is the programming language of our choice because we could use our
  1925. large experiences in C programming and C++ provides all major advantages
  1926. of Object Oriented Programming (OOP) that is - from our point of view -
  1927. the best available paradigm for complex software development today.
  1928.  
  1929. In this report we want to introduce StarView, a portable C++ Class
  1930. Library for Graphical User Interfaces. StarView is one of the major parts
  1931. of our total Object Oriented programming environment (we call it SOLAR
  1932. system) and to give you an impression of the other tools of the SOLAR
  1933. system we will give you a short overview about the Object Management
  1934. System ObjectServer at the end of the report. But first we will take a
  1935. brief look on Star View
  1936.  
  1937.  
  1938. < See file StarView in current directory    zxl >
  1939.  
  1940. ----------------------------
  1941.  
  1942. Name: Open Dialogue
  1943.  
  1944. HP/Apollo
  1945.  
  1946. ------------------------------
  1947.  
  1948. Name: Zinc Interface Library (Iconic user interface)
  1949.  
  1950. Zinc
  1951.  
  1952. ------------------------------
  1953.  
  1954. Name: C++/Views (Iconic user interface)
  1955.  
  1956. CNS : Windows/Mac/Motif/OS2
  1957. Nice clean interface, powerful and cheap.
  1958.  
  1959. ------------------------------
  1960.  
  1961. Name: MacApp (application development toolkit)
  1962.  
  1963. Apple
  1964.  
  1965. ------------------------------
  1966.  
  1967. Name: ICpak101
  1968. Name: ICpak201
  1969.  
  1970. Stepstone
  1971.  
  1972. -------------------------------
  1973.  
  1974. Name: NeXTStep (application development toolkit)
  1975.  
  1976. NeXT
  1977.  
  1978. --------------------------------
  1979.  
  1980. Name: CommonView (Iconic user interface)
  1981.  
  1982. Glockenspiel
  1983.  
  1984. --------------------------------
  1985.  
  1986. Name: Analyst (Information Centre)
  1987. Name: Humble  (Expert system package)
  1988.  
  1989. Xerox SIS : Smalltalk classes
  1990.  
  1991. ======================================================
  1992.  
  1993. END OF THIS SUMMARY
  1994.    Dave Riches
  1995.    PSS:    David.S.Riches@bnr.co.uk
  1996.    Smail:  BNR Europe Ltd, London Road,
  1997.            Harlow, Essex. CM17 9NA.  England
  1998.    Phone:  +44 (0)279-429531 x2496
  1999.    Fax:    +44 (0)279-454187
  2000. =========================================================================
  2001. ----- End Included Message -----
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007.  
  2008. Appendix II - The Stack Exerciser
  2009.  
  2010.  
  2011.  The Stack Exerciser
  2012. As a first program to develop in order to have a "flavour" of the different
  2013. class libraries I have chosen to implement a very basic stack exerciser,
  2014. providing such operations as push, pop, print stack, return number of
  2015. items in the stack, etc.
  2016. This program has been written in several versions, one for OATH, one for COOL,
  2017. one for LEDA, etc.
  2018. For each of the libraries the manual page explaining the usage of the
  2019. stack data type is presented, followed by the source code of the
  2020. program, so
  2021. that the reader may get acquainted with each library's
  2022. notation, followed by some personal impressions on the specific part
  2023. of the library used to implement the program.
  2024.  
  2025.  The Stack Exerciser - OATH version
  2026. As a first, natural action you look at the manual looking for a class with a
  2027. name similar to "stack" in order to see which methods are provided to work
  2028. with it.
  2029. After some browsing I discovered that what I was looking for was actually
  2030. named "lifoQueue".
  2031. When I came to the manual page for lifoQueue I found that a single method was
  2032. provided, called "insert", which is the push method.
  2033. A bit puzzled (I was expecting to find all the methods related to the
  2034. stack management in the class)
  2035. I had to look for the pop and top methods.
  2036. In class Queue (the grand
  2037. father of lifoQueue) I found the "remove" (pop) method, the top method
  2038. does not exist, and to access the top element you probably have to
  2039. "make" a position in the stack and access it dereferencing the
  2040. pointer.
  2041. I didn't really like all of this. I found the process of writing the
  2042. Stack Exerciser program lenghty, complicated, and non linear using
  2043. this class.
  2044.  The Stack Exerciser - LEDA version
  2045. I had a look at the manual page for the stack, declared and created it
  2046. according to the recommended syntax and I found available, in the
  2047. class, all the operations you would expect to find when dealing with
  2048. such a data structure.
  2049. Push, pop, top, clear, size and empty were there, easily available for
  2050. use, and it took moments to complete the program.
  2051.  
  2052.  
  2053. =======================================================
  2054.