home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / cplus / 12876 < prev    next >
Encoding:
Text File  |  1992-08-25  |  73.0 KB  |  1,982 lines

  1. Newsgroups: comp.lang.c++
  2. Path: sparky!uunet!decwrl!concert!accura_nc!news
  3. From: chandra@bongoaisg.com (Periannan Chandrasekaran)
  4. Subject: C++ Product List - Version 2.03 - PART 4/5
  5. Message-ID: <1992Aug25.212839.3237@aisg.com>
  6. Sender: news@aisg.com
  7. Reply-To: chandra@bongoaisg.com (Periannan Chandrasekaran)
  8. Organization: Accura Innovative Services Inc.
  9. Date: Tue, 25 Aug 92 21:28:39 GMT
  10. Lines: 1970
  11.  
  12.  
  13.  
  14. 3.  Libraries
  15. _   _________
  16.  A List of Class Libraries are available below. Refer to the
  17. individual  items  for  detail descriptions. The description
  18. includes evaluation criteria on these libraries.  Evaluation
  19. is based on Documentation, Usability, Extensibility, Permor-
  20. mance, Sensibleness etc.
  21.  
  22. 3.1.  OATH - Object-oriented Abstract Type Hierarchy.
  23. _ _   ____   ______ ________ ________ ____ _________
  24.  
  25. +    Written by: Brian M. Kennedy
  26.  
  27.      Freeware  available  via  anonymous   ftp   from   site
  28.      csc.ti.com (192.94.94.1) in the file /pub/oath.tar.Z.
  29.  
  30. +    The Reference Manual states it has only  been  compiled
  31.      with AT&T cfront 2.1 compatible compilers. No templates
  32.      and no exception handling.
  33.  
  34. +    OATH  (Object-oriented  Abstract  Type  Hierarchy)  was
  35.      designed as an experiment in increasing object-oriented
  36.      reuse.  It has a fairly high learning curve, but poten-
  37.      tially higher gains if you are looking for a more flex-
  38.      ible and robust abstraction.  It is  completely  unsup-
  39.      ported.
  40.  
  41.      Please refer to the menu below to  get  to  the  detail
  42.      information about OATH features.
  43.  
  44. +    Information provided by Marco Pace  (MPACE@ESOC.BITNET)
  45.      and Brian Kennedy (kennedy@intellection.com)
  46.  
  47. 3.1.1.  OATH Introduction
  48. _ _ _   ____ ____________
  49.  
  50.      OATH instantiates an approach to  C++  class  hierarchy
  51. design   that   exploits  subtyping  polymorphism,  provides
  52. greater implementation independence, and  supports  implicit
  53. memory  management  of  its  objects.  It is implemented via
  54.  
  55. parallel hierarchies of internal  types  and  accessors   (a
  56. concept  similar  to  that  of  the  "smart  pointers",  but
  57. improved compared to them).  The internal types contain  the
  58. object  representation  (the  data  members) and the virtual
  59. functions.  The accessor types contain all of the externally
  60. accessible functions of the abstract types.
  61.  
  62.      Two main design goals of OATH were:
  63.  
  64. To provide a meaningful  abstract type  hierarchy   that  is
  65. consistent  with  the concepts being modelled by utilizing a
  66. strict subtyping approach  to  hierarchy  design.   Starting
  67. from  the  the idea that a type hierarchy should be designed
  68. to reflect the behaviour of the objects being  modelled  and
  69. not  to  reflect the most convenient computer representation
  70. of objects, the designer of OATH gave priority to  the  sub-
  71. typing (inheriting functionality) aspect over the code reuse
  72. (inheriting  implementation)  aspect.   Given  a  consistent
  73. abstract  type  hierarchy,   implementation  classes  can be
  74. added at the leaves of the hierarchy (see figure  later  on)
  75. to implement the behaviour of the abstract types. Code reuse
  76. can be exploited at this phase, but should  not  enter  into
  77. the design of the abstract type hierarchy.
  78.  
  79. To provide robust  garbage collection (GC)  of OATH objects,
  80. fully  implemented within a portable C++ class library.  The
  81. garbage collection mechanism is a hybrid  reference counting
  82. and  marking   algorithm  capable  of collecting all garbage
  83. (including circular references).  The programmer can  select
  84. one of four garbage collection modes at compile time: no GC,
  85. incremental GC, stop-and-collect, or combined.
  86.  
  87. 3.1.2.  Features
  88. _ _ _   ________
  89.  
  90.      OATH's main features are the following:
  91.  
  92. It provides  heterogeneous container classes
  93.  
  94. It provides  dynamic type  determination   in  the  form  of
  95. "safe casts"
  96.  
  97. It provides accessors to access OATH objects.
  98.  
  99. For each OATH type there is a corresponding  accessor  class
  100. (an  accessor  lies  between  a C++ pointer and a C++ refer-
  101. ence).  The accessors can be initialized and  assigned  OATH
  102. objects to access. However, any other operation on an acces-
  103. sor is applied directly to the abstract object it accesses.
  104.  
  105. 3.1.3.  Hierarchy
  106. _ _ _   _________
  107.  
  108.      The class hierarchy provided by OATH is the following:
  109.  
  110.                 + obj
  111.                   + pos
  112.                     * pdPos
  113.                     + listPos
  114.                       * dlPos
  115.                       + stringPos
  116.                         * minStringPos
  117.                   + bag
  118.                     + set
  119.                       * hashSet
  120.                       + finiteSet
  121.                         # characterSet
  122.                     + queue
  123.                       + seq
  124.                         + lifoQueue
  125.                           * pdlQueue
  126.                         + fifoQueue
  127.                           + deq
  128.                             + list
  129.                               * dlList
  130.                               + string
  131.                                 * minString
  132.                     + table
  133.                       # stringTable
  134.                   + token
  135.                     # character
  136.                     # localToken
  137.                     # stringToken
  138.                   + complex
  139.                     + real
  140.                       + rational
  141.                         + integer
  142.                           * bigInteger
  143.  
  144. where the classes preceded by '+' are  abstract  types,  the
  145. classes  preceded  by  '*' are implementation types, and the
  146. classes preceded by '#' are "abstract implementation types".
  147. (A  visually  more readable version of this hierarchy can be
  148. found in [1], Figure 1 <see bibliography>.)
  149.  
  150. 3.1.4.  Evaluation
  151. _ _ _   __________
  152.  
  153. +    Documentation:
  154.  
  155.      The documentation is very concise (probably  too  much)
  156.      and lacks examples. Due to its conciseness sometimes it
  157.      is not easy to understand and somehow it is cryptic.
  158.  
  159. +    Usability:
  160.  
  161.      OATH provides a wide set of classes.  It does not  seem
  162.      easy to use the class services provided, especially for
  163.      a beginner.  Services that you would expect to find  at
  164.      a  given level of the hierarchy sometimes are not there
  165.      and you have to go upwards through  the  tree  to  find
  166.      them, sometimes with names not directly related to what
  167.      you are using.  The services provided are not many, but
  168.      their interface is simple to use.
  169.  
  170. +    Extensibility:
  171.  
  172.      This feature was not evaluated  directly.   However,  a
  173.      brief  discussion  on  the  way  to extend the existing
  174.      class library is present in the OATH  Reference  Manual
  175.      [2] (OATH(30), section Developing New OATH Types).
  176.  
  177. +    Sensibleness:
  178.  
  179.      The available classes are perhaps too abstract. I would
  180.      have  preferred  less  abstract  and  more  "practical"
  181.      classes, but probably this would have been against  the
  182.      basic  assumptions their designers of OATH made.  Among
  183.      the, there are classes for  integers,  rational,  real,
  184.      complex.
  185.  
  186. +    Miscellaneous:
  187.  
  188.      The provided hierarchy is that of a  tree,  where  only
  189.      single   inheritance   is   supported.    No  templates
  190.      (parameterized types) are provided,  and  no  exception
  191.      handling  as well.  Garbage collection is supported and
  192.      appears to be even sophisticated in terms of the  kinds
  193.      of GC available.
  194.  
  195. 3.1.5.  Bibliography
  196. _ _ _   ____________
  197.  
  198. 1.   Brian M.Kennedy, The Features  of  the  Object-oriented
  199.      Abstract  Type  Hierarchy, Computer Systems Laboratory,
  200.      Computer Science Center, Texas  Instrument,  26  August
  201.      1991
  202.  
  203. 2.   OATH Reference Manual (OATH 0.8), 26 August 1991
  204.  
  205. 3.1.6.  NetComments
  206. _ _ _   ___________
  207.  
  208. 3.2.  COOL - C++ Object Oriented Library
  209. _ _   ____   _   ______ ________ _______
  210.  
  211. +    It is available from csc.ti.com (192.94.94.1)  in  file
  212.      /pub/COOL.tar.Z.
  213.  
  214. +    COOL can be used with the AT&T C++ translator  (cfront)
  215.      version 2.0.
  216.  
  217. +    COOL is a collection of classes, templates, and  macros
  218.      for  use  by  C++  programmers writing complex applica-
  219.      tions.  It raises the level of abstraction for the pro-
  220.      grammer  to  concentrate  on the problem domain, not on
  221.      implementing base data structures, macros, and classes.
  222.  
  223. +    Information provided by Marco Pace (MPACE@ESOC.BITNET)
  224.  
  225. 3.2.1.  Introduction
  226. _ _ _   ____________
  227.  
  228.      COOL is a collection of classes, templates, and  macros
  229.  
  230. for use by C++ programmers writing complex applications.  It
  231. raises the level of abstraction for the programmer  to  con-
  232. centrate  on  the  problem  domain, not on implementing base
  233. data structures, macros, and classes.
  234.  
  235. In  addition,  COOL  also  provides  a  system   independent
  236. software  platform  on  top of which applications are built,
  237. since COOL encapsulates such system  specific  functionality
  238. as  date/time  and  exception handling.  For a more detailed
  239. description of COOL and its features, including  a  thorough
  240. discussion  on  the rationale for the design and implementa-
  241. tion choices see [5].
  242.  
  243. 3.2.2.  Features
  244. _ _ _   ________
  245.  The class library hierarchy is  basically  forest,  but  it
  246. implements a rather flat inheritance tree.
  247.  
  248. All complex classes are derived from the Generic  class  due
  249. to space efficiency concerns.  COOL does not seem to provide
  250. multiple inheritance.  COOL's exception handling provides  a
  251. reise, handle, and proceed mechanism.
  252.  
  253. Exception and exception handling classes  are  provided  for
  254. this  purpose.   COOL  provides parameterized templates. The
  255. peculiarity of COOL is that to allow  this  it  extends  the
  256. standard  C++  preprocessor to recognize the notation intro-
  257. duced to specify templates.
  258.  
  259. In other words, the programs written using COOL are not com-
  260. piled using the standard CC, but using CCC (COOL C++ Control
  261. Program), which is an extension of the CC compiler.  It does
  262. not seem to include garbage collection.
  263.  
  264. 3.2.3.  Subclasses
  265. _ _ _   __________
  266.  The classes provided by the library are several,  and  they
  267. are listed here:
  268.  
  269.         Pair <T1,T2>
  270.         Range
  271.           Range <Type>
  272.         Rational
  273.         Complex
  274.         Generic
  275.           String
  276.           Gen_String
  277.           Regexp
  278.           Vector
  279.             Vector <Type>
  280.  
  281.               Association <Pair<T1,T2>>
  282.           List_Node
  283.             List_Node <Type>
  284.           List
  285.             List <Type>
  286.           Date_Time
  287.           Timer
  288.           Bit_Set
  289.           Exception
  290.             Warning
  291.             Error
  292.               System_Error
  293.             Fatal
  294.             System_Signal
  295.             Verify_Error
  296.           Excp_Handler
  297.             Jump_Handler
  298.           Hash_Table
  299.             Set
  300.             Hash_Table <Key,Value>
  301.               Package
  302.           Matrix
  303.             Matrix <Type>
  304.           Queue
  305.             Queue <Type>
  306.           Random
  307.           Stack
  308.             Stack <Type>
  309.           Symbol
  310.           Binary_Node
  311.             Binary_Node <Type>
  312.           Binary_Tree
  313.             Binary_Tree <Type>
  314.               AVL_Tree <Type>
  315.           N_Node <Type>
  316.           D_Node <Type>
  317.           N_Tree <Type,Node,Child>
  318.  
  319. 3.2.4.  Evaluation
  320. _ _ _   __________
  321.  
  322.      Easy to use, the services provided are really a lot.
  323.  
  324.      The extendibility has not been  tested,  although  this
  325. seems  to  be one of the feature of the library, which issue
  326. is dealt with in part of section 14 of the User Manual  (See
  327. Bibliography).
  328.  
  329.      Performance not evaluated
  330.  
  331.      It does not seem to be  supported  by  the  developers.
  332. The  installation  of  COOL  was a tragedy: several problems
  333. were found, ranging from files not found to  compile  errors
  334. to link errors, etc.
  335.  
  336. After a couple of days of trials the installation was  aban-
  337. doned,  although  a post was made to the net to see if some-
  338. body could help on that.
  339.  
  340. I got some answers after some time  and  I  found  out  that
  341. other  people  had  similar installation problems. They sug-
  342. gested some solutions which I  haven't  tried  yet.   It  is
  343. interesting  to note that the authors of COOL have written a
  344. paper on which they analyse the  lessons  learned  from  the
  345. usage  of  the  library, what they would keep of it and what
  346. they would change in its design, and so on  (See  Bibliogra-
  347. phy).
  348.  
  349. 3.2.5.  Bibliography
  350. _ _ _   ____________
  351.  
  352.      M.Fontana et al., COOL - C++  Object-Oriented  Library,
  353. Texas Instrument.
  354.  
  355. COOL User Manual, March 1990, Texas Instruments Inc.
  356.  
  357. M.Fontana & M.Neath, Checked Out and Long  Overdue:  Experi-
  358. ences in the Design of a C++ Class Library, Texas Instrument
  359. Inc.
  360.  
  361. 3.2.6.  NetComments
  362. _ _ _   ___________
  363.  
  364.      From: bergquis@gdc.com (Brett Bergquist)
  365.  
  366. Did you get the paper about COOL "Checked Out and Long Over-
  367. due:  Experiences in the Design of a C++ Class Library".  In
  368. this paper, the authors discuss the strengths and weaknesses
  369. of  the  design  of COOL.  A couple of points that they men-
  370. tioned that they would do differently would be  to  simplify
  371. the  dependencies  between  classes  by using MI.  Also they
  372. would factor out the use of the symbolic and package mechan-
  373. ism.  Performance is not mentioned as an issue.
  374.  
  375. 3.3.  LEDA - Library of Efficient Data types and Algorithms
  376. _ _   ____   _______ __ _________ ____ _____ ___ __________
  377.  
  378. +    Writen by: Stefan Naeher (stefan@mpi-sb.mpg.de)
  379.  
  380.      Anonymous    ftp     from     host     ftp.cs.uni-sb.de
  381.      (134.96.252.31) in directory pub/LEDA.
  382.  
  383. +
  384.  
  385.      -    LEDA can be used with all cfront and GNU C++  com-
  386.           pilers
  387.  
  388.      -    it is provided as source code
  389.  
  390.      -    there is no fee for non-commercial use
  391.  
  392. +    It consists of a sizeable collection of data types  and
  393.      algorithm:  this  includes stacks, queues, lists, sets,
  394.      dictionaries, ordered sequences,  partitions,  priority
  395.      queues, directed, undirected, and planar graphs, lines,
  396.      points, planes and basic algorithms in graph  and  net-
  397.      work theory and computational geometry
  398.  
  399. +    Information  provided  by   Stefan   Naeher(stefan@mpi-
  400.      sb.mpg.de) and MARCO PACE (MPACE@ESOC.BITNET)
  401.  
  402. 3.3.1.  Introduction
  403. _ _ _   ____________
  404.  
  405. 3.3.2.  Features
  406. _ _ _   ________
  407.  
  408.      LEDA is a library of efficient  data  types  and  algo-
  409. rithms. Its main features are:
  410.  
  411. a sizable collection of  data  types  and  algorithms:  this
  412. includes  stacks, queues, lists, sets, dictionaries, ordered
  413. sequences,   partitions,    priority    queues,    directed,
  414.  
  415. undirected,  and  planar  graphs,  lines, points, planes and
  416. basic algorithms in graph and network  theory  and  computa-
  417. tional geometry;
  418.  
  419. the precise and readable specification  of  data  types  and
  420. algorithms;
  421.  
  422. the inclusion of many  of  the  most  recent  and  efficient
  423. implementations;
  424.  
  425. a comfortable data type graph;
  426.  
  427. its extendibility;
  428.  
  429. its ease of use.
  430.  
  431. The library employs
  432.  
  433. a strict separation between abstract data types and the con-
  434. crete data structures used to implement them,
  435.  
  436. parameterized data types, and object oriented programming.
  437.  
  438. 3.3.3.  Classes
  439. _ _ _   _______
  440.  
  441.      The classes provided by the library  are  several,  and
  442. they are listed here:
  443.  
  444.         Simple Data Types
  445.                 Boolean (bool)
  446.                 Real Numbers (real)
  447.                 Strings (string)
  448.                 Real-valued vectors (vector)
  449.                 Real-valued matrices (matrix)
  450.         Basic Data Types
  451.                 One Dimensional Arrays (array)
  452.                 Two Dimensional Arrays (array2)
  453.                 Stacks (stack)
  454.                 Queues (queue)
  455.                 Bounded Stacks (b_stack)
  456.                 Bounded Queues (b_queue)
  457.                 Lists (list)
  458.                 Sets (set)
  459.                 Integer Sets (int_set)
  460.                 Partitions (partition)
  461.                 Dynamic collections of trees (tree_collection)
  462.         Priority Queues and Dictionaries
  463.                 Priority Queues (priority_queue)
  464.  
  465.                 Bounded Priority Queues (b_priority_queue)
  466.                 Dictionaries (dictionary)
  467.                 Dictionary Arrays (d_array)
  468.                 Hashing Arrays (h_array)
  469.                 Sorted Sequences (sortseq)
  470.                 Persistent Dictionaries (p_dictionary)
  471.         Graphs and Related Data Types
  472.                 Graphs (graph)
  473.                 Undirected Graphs (ugraph)
  474.                 Planar Maps (planar_map)
  475.                 Parametrized Graphs (GRAPH)
  476.                 Parametrized Undirected Graphs (UGRAPH)
  477.                 Parametrized Planar Maps (PLANAR_MAP)
  478.                 Node and Edge Arrays (node_array, edge_array)
  479.                 Two Dimensional Node Arrays (node_matrix)
  480.                 Node and Edge Sets (node_set, edge_set)
  481.                 Node Partitions (node_partition)
  482.                 Node Priority Queues (node_pq)
  483.         Two-Dimensional Geometry
  484.                 Two-Dimensional Dictionaries (d2_dictionary)
  485.                 Sets of Points (point_set)
  486.                 Sets of Intervals (interval_set)
  487.                 Sets of Parallel Segments (segment_set)
  488.                 Planar Subdivision (subdivision)
  489.                 Graphic Windows (window)
  490.  
  491. 3.3.4.  Evaluation
  492. _ _ _   __________
  493.  
  494.      The class library hierarchy is a forest,  and  it  does
  495. not  seem  to  provide multiple inheritance.  Some exception
  496. handling is provided, but it seems to be quite raw,  in  the
  497. sense that it usually ends with the program abortion.
  498.  
  499. However, the user can write its own error handler,  but  its
  500. function prototype has to be
  501.  
  502.         void handler(int, char*)
  503.  
  504. where the first parameter is an error number and the  second
  505. is  an error message. LEDA provides parameterized templates.
  506. It does not seem to include garbage collection.
  507.  
  508.      It is not clear whether it is supported in some way  by
  509. the  developers.   The installation of LEDA was quite simple
  510. and took a couple of hours.  One problem only was found dur-
  511. ing the execution of the makefile, namely some include files
  512. needed for the creation of the graphics library for  Sunview
  513. (in which we were not interested).  After this the test pro-
  514. grams were created without problems.  The execution  of  the
  515.  
  516. test  programs  was  carried out, but no description of what
  517. they are supposed to do and/or what input they expected  was
  518. found.   A  few  of them run without problems, others issued
  519. error messages, others aborted after a core dump.
  520.  
  521. The set of classes provided  is  quite  large,  the  classes
  522. themselves are easy to use, the services provided sufficient
  523. (although sometimes the  set  is  not  "rich"  enough),  the
  524. interface simple when the user has gone through section 1 of
  525. the User Manual [4], which explains the basics.
  526.  
  527.      The extendibility has not been  tested,  although  this
  528. seems  to  be  one  of the features of the library, on which
  529. issue a brief discussion appears in section IV of the manual
  530. (See Bibliography).
  531.  
  532.      After some time spent trying to format  the  documenta-
  533. tion  (it  is  available  only in TEX format), we managed to
  534. have it printed.  The documentation appears  to  be  linear,
  535. easy to read (as promised by the authors), concise.  It does
  536. not contain, however, examples of the way the  classes  have
  537. to be used.
  538.  
  539. 3.3.5.  Bibliography
  540. _ _ _   ____________
  541.  
  542.      S.Naeher, LEDA User Manual (Version  2.1),  Max-Planck-
  543. Institut fuer Informatik, Saarbruecken
  544.  
  545. 3.3.6.  NetComments
  546. _ _ _   ___________
  547.  
  548. 3.4.  NIHCL - National Institute of Health Class Library
  549. _ _   _____   ________ _________ __ ______ _____ _______
  550.  
  551. +    Available   via   anonymous   ftp   from    alw.nih.gov
  552.      (198.231.128.251) in file pub/nihcl.tar.Z.
  553.  
  554.      Chuck Noren's modification  to  work  with  ObjectStore
  555.      OODBMS   is  also  available  via  anonymous  ftp  from
  556.      alw.nih.gov in file MartinNihcl3-101.tar.Z.
  557.  
  558. +    The NIH Class Library is intended to be portable  to  a
  559.      UNIX   system   compatible  with  either  System  V  or
  560.      4.2/4.3BSD and which supports the AT&T  C++  translator
  561.      Release 2.00, Release 2.1, or other compatible C++ com-
  562.      piler.
  563.  
  564.      The library has been tested by  the  authors  on  Sun-3
  565.      with  SunOS 3.5, Sun-3 with SunOS 4.0 and on Sun-4 with
  566.      sunOS 4.0.
  567.  
  568. +    Information provided by Marco Pace (MPACE@ESOC.BITNET)
  569.  
  570. 3.4.1.  Introduction
  571. _ _ _   ____________
  572.  
  573.      NICHL (pronounced either N-I-H-C-L or "nickel")  imple-
  574. ments  abstract  data  types that have been designed to sim-
  575. plify object-oriented programming  using  C++.  It  contains
  576. generally useful data types, such as String, Date, and Time,
  577. and it provides a set of classes similar to the Smalltalk 80
  578. collection  classes  including OrderedCltn (indexed arrays),
  579. LinkedList (singly linked lists),  Set  (hash  tables),  and
  580. Dictionary (associative arrays).
  581.  
  582. 3.4.2.  Features
  583. _ _ _   ________
  584.  Classes  Process,  Scheduler,  Semaphore,  and  SharedQueue
  585. implement multiprogramming with coroutines.
  586.  
  587. The set of Vector classes and a handful of  others  such  as
  588. Random   (random  number  generator)  and  Range  (range  of
  589. integers)  assist  in  various  kinds  of   arithmetic   and
  590. mathematical  problems.  NIHCL includes an object I/O facil-
  591. ity in its class implementation which can make program-  and
  592. machine-independent  representations  of arbitrarily complex
  593. data structures  comprising  NIH  Library  and  user-defined
  594. objects.
  595.  
  596. Client applications can then save these  representations  on
  597. disk files or move them between programs running on the same
  598. or different (via network) machines.  For  a  more  detailed
  599. description of NIHCL and its features see [8].
  600.  
  601. 3.4.3.  Classes
  602. _ _ _   _______
  603.  The classes provided by the library are several,  and  they
  604. are listed here:
  605.  
  606.         NIHCL
  607.           Object
  608.             Bitset
  609.             Class
  610.             Collection
  611.               Arraychar
  612.               ArrayOb
  613.               Bag
  614.               SeqCltn
  615.                 Heap
  616.                 LinkedList
  617.                 OrderedCltn
  618.                   SortedCltn
  619.                     KeySortCltn
  620.                 Stack
  621.               Set
  622.                 Dictionary
  623.                   IdentDict
  624.                 IdentSet
  625.             Date
  626.             FDSet
  627.             Float
  628.             Fraction
  629.             Integer
  630.             Iterator
  631.             Link
  632.               LinkOb
  633.               Process
  634.                 HeapProc
  635.                 StackProc
  636.             LookupKey
  637.               Assoc
  638.               AssocInt
  639.             Nil
  640.             Point
  641.             Random
  642.             Range
  643.             Rectangle
  644.             Scheduler
  645.             Semaphore
  646.             SharedQueue
  647.             String
  648.               Regex
  649.             Time
  650.             Vector
  651.               BitVec
  652.               ByteVec
  653.               ShortVec
  654.               IntVec
  655.               LongVec
  656.               FloatVec
  657.                       DoubleVec
  658.           OIOifd
  659.  
  660.           OIOin
  661.             OIOistream
  662.               OIOninhin
  663.           OIOofd
  664.           OIOout
  665.             OIOostream
  666.               OIOninhout
  667.           ReadFromTbl
  668.           StoreOnTbl
  669.  
  670. Note that, in addition to the normal general-purpose classes
  671. that  are  found in other libraries as well you find a sema-
  672. phore class, I/O classes, a process class  and  a  scheduler
  673. class.
  674.  
  675. 3.4.4.  Evaluation
  676. _ _ _   __________
  677.  
  678.      The hierarchy provided by NIHCL  is  that  of  a  tree.
  679. Multiple inheritance is optionally supported (i.e. NIHCL can
  680. be compiled to support multiple inheritance if desired).  No
  681. parameterized  types (templates) are provided, although they
  682. can be implemented using macros (as [8] suggests in  section
  683. "Parameterized types in the NIH class library").  An experi-
  684. mental exception handling mechanism is  provided  by  NIHCL,
  685. although  the  authors  of the library suggest not to use it
  686. since it is unsafe and inefficient.  Garbage  collection  is
  687. not implemented.
  688.  
  689. NIHCL is documented (see bibliography), which is a  book  in
  690. data  abstraction  and  object  oriented  programming in C++
  691. within whose  framework  the  class  library  is  described.
  692. Therefore  the documentation has not the form of a reference
  693. manual, but it provides a short description of the different
  694. classes  with some examples.  This approach has the drawback
  695. that when you are developing code and you already have  some
  696. knowledge of the library you would probably use more profit-
  697. ably a real reference manual.
  698.  
  699.      No idea whether it is supported or not.
  700.  
  701. 3.4.5.  Bibliography
  702. _ _ _   ____________
  703.  
  704.      K.E.Gorlen et al., Data Abstraction and Object-Oriented
  705. Programming in C++, 1990, Wiley
  706.  
  707. 3.4.6.  NetComments
  708. _ _ _   ___________
  709.  
  710.      From: Chuck Noren <noren@pogo.den.mmc.com>
  711.  
  712. I have been a big user of NIHCL.  Its not the  most  elegant
  713. library,  but  there  are  some  big advantages in using it.
  714. With any PD library, such as COOL (I have not looked at it),
  715. you will find warts and major flaws.  I have found this with
  716. NIHCL.  However, what I did find was that I could get  major
  717. parts of the project going sooner than if I had to develop a
  718. class library myself.  The "buyer" must  beware  on  any  of
  719. this  stuff,  for  there will be hidden costs.  The first is
  720. some bugs in the library without vendor support.  You  might
  721. get  some support from USENET, but if you really start using
  722. these packages you will find that you have become one of the
  723. "experts".  You will need to develop your in house expertise
  724. with some enthusiastic "hackers" who love to play with these
  725. kind  of things and track down bugs as they are found.  I've
  726. been an enthusiastic hacker of NIHCL for our group and modi-
  727. fied  it  to work with the Object Oriented Database (Object-
  728. Store from Object Design, Inc.).
  729.  
  730. Personally, I would consider buying a class library (such as
  731. the  Booch Componants) before getting a free copy of a class
  732. library from from a private company (NIHCL is from the  U.S.
  733. Govt).   I take a cynical (and possibly wrong) view of this.
  734. If a private company has a REALLY GOOD class  library,  they
  735. may  be  hesistant  to  make it freely available, because it
  736. becomes something they could sell or use  as  a  competetive
  737. advantange against other companies.  While we have just made
  738. our version of NIHCL Public Domain, we have  kept  back  the
  739. really  good classes we've developed so that our company can
  740. compete better against others. (I  would  personally  rather
  741. share  more  software for sharing really benifits everybody,
  742. but I was lucky to convince my company just to let our modi-
  743. fied NIHCL go, because we would not get anyone to buy it and
  744. others will have modified their copy's of NIHCL soon to work
  745. with an OODBMS anyway).  The Booch componants cost well less
  746. than $1000 (and you get source plus the reputation of a com-
  747. pany behind it) and will save thousands in development time.
  748. Even NIHCL is worth considering.  From experience,  its  not
  749. as  slow  as  some  people make out.  It does go against the
  750. "C++ philosophy" in some respects, but  it  does  have  some
  751. advantages  that  fit well in some projects.  I feel that no
  752. current library will address all the needs off all  applica-
  753. tions.   Certainly NIHCL does not (and COOL, although I have
  754. not seen it).  But some projects  will  fit  well  with  the
  755. various libraries (ours fit with NIHCL very well).  But also
  756. be forwarned, getting a class library is like getting a  new
  757. langauge, there is one hell of a learning curving, but it is
  758. well worth it.
  759.  
  760.      From: Chuck Noren <noren@pogo.den.mmc.com>
  761.  
  762. > What would you consider are NIHCL's strengths?  Perhaps  a
  763. full,
  764. > coherent system of objects?  Relatively  stable  and  bug-
  765. free?
  766. > Somewhat standardized because many people use it?  How  is
  767. it's
  768. > support for things like graphics and mathematics?
  769.  
  770. NIHCL's strengths:
  771.  
  772. 1.   Provides a coherent system  of  objects  (I  like  your
  773.      words).   There  are  collections,  date/time  classes,
  774.      variety of scaler types,  string  classes,  and  light-
  775.      weight  processing.  Almost all the classes work inter-
  776.      changeably in the various collections,  such  as  sets,
  777.      bags,  dictionaries.  You can use a string as an key to
  778.      a dictionary, as well as time, date, even another  col-
  779.      lection.
  780.  
  781. 2.   It is relatively bug free and stable.  We have  encoun-
  782.      tered  very  few bugs, and most of them dealt with bugs
  783.      in the particular C++ compiler we were using.
  784.  
  785. 3.   A fair number of people are using it.  You  can  appeal
  786.      to  the  Internet  and get timely help on questions and
  787.      problems.  Keith Gorlen himself (one of the authors  of
  788.      NIHCL) will assist time to time.
  789.  
  790. 4.   Run time type identification.  While this is not always
  791.      useful  or  even  advantagous to use, there are certain
  792.      times when run time type identification greatly simpli-
  793.      fies  the  design and use of certain capabilities.  One
  794.      of these is being able  to  send  heterogenious  Inter-
  795.      Process  Communication objects.  Sometimes applications
  796.      need truely dynamic objects at run time (e.g., in  some
  797.      database  applications or applications where the opera-
  798.      tor needs to manipulate and create lots of  very  flex-
  799.      able objects).  [soap box: this feature would be useful
  800.      in the C++ language itself,  in  certain  very  limited
  801.      situations,  but  one reason it is not included is that
  802.      programmers would be tempted to abuse it.  I feel  that
  803.      the  philosophy  of  C and C++ is to give you the power
  804.      and you are responsible to learn how to use it right.]
  805.  
  806. 5.   "Safe" virtual base castdowns.  These  classes  can  be
  807.      used  in a multiple inheritence design (again, this has
  808.  
  809.      limited use in good designs, but when you need it,  its
  810.      very  useful!).   There  is  a consistent set of member
  811.      functions that allow you to safely castdown from a vir-
  812.      tual  base  class  pointer  to a derived class pointer.
  813.      Normally you want to use the  virtual  member  function
  814.      mechanism,  but  in  certain  limited situations (e.g.,
  815.      where you are forced to use  heterogenous  collections)
  816.      this can be very useful.
  817.  
  818. 6.   Support for shallow and deep copies.  If you follow the
  819.      discipline  of NIHCL classes, your objects will be able
  820.      to de shallow and deep copies of itself and all of  its
  821.      member  pointers.   Previously  copied  objects will be
  822.      handled "automagically".
  823.  
  824. 7.   Stream and  file  I/O.   You  can  use  the  NIHCL  I/O
  825.      features  to make a "poor man's database".  If you fol-
  826.      low the NIHCL discipline, all your objects can be writ-
  827.      ten  to a flat file (and read in) very easily.  You can
  828.      also send your objects via  Inter-Process  Communcation
  829.      (IPC) very easily.  All you have to do is create a sim-
  830.      ple IPC mechanism.
  831.  
  832. 8.   A variety of polymorphic heterogenous collections.
  833.  
  834. 9.   Good documentation.  First, understand  that  there  is
  835.      never  enough  documentation in any package!  But given
  836.      this, Gorlen and company have published a book and have
  837.      a good reference manual on the class library.
  838.  
  839. 10.  Complete source code.
  840.  
  841. 11.  Portable code.  It can be built on a  wide  variety  of
  842.      systems with a wide variety of C++ compilers.
  843.  
  844. 12.  No copyright or license (but beware of Regex).  All  of
  845.      the NIHCL library is public domain except Regex.  There
  846.      is some controversy about Regex (since it has  the  GNU
  847.      Copyleft  agreement).   Some,  like  myself believe the
  848.      simple removal of Regex gets around the Copyleft  prob-
  849.      lem.   Others say that is not enough.  Check your legal
  850.      counsel to be sure.
  851.  
  852.      There are some disadvantages  to  NIHCL,  to  be  sure.
  853. However  there has been a lot of NIHCL bashing around.  As I
  854. stated,  no  class  library  is  a  perfect  fit  for  every
  855.  
  856. application  and  care  should  be  taken not to force fit a
  857. class library into an application not well  suited  for  it.
  858. Some disadvantages of NIHCL include:
  859.  
  860. 1.   Name  clashes  with  existing  libraries.   Names  like
  861.      "Object",  and  "String" are used in other places (such
  862.      as X-Windows and Motif).  We had to modify our copy  of
  863.      NIHCL  so  that  the  classes  were  prepended with the
  864.      letters "Nih", so  Object  and  String,  for  instance,
  865.      became  NihObject  and  NihString.  This eliminated the
  866.      clash.  There was a close call with the typedef of bool
  867.      in  NIHCL,  since X-Windows/Motif have a Bool, but for-
  868.      tunatly the case is  different.   New  class  libraries
  869.      should consider how they can minimize name clashes.
  870.  
  871. 2.   The polomorphic single class hierarchy style of classes
  872.      evades  compile  time  type  checking.  This means your
  873.      bugs are caught more often in run time than if you  had
  874.      a  librayy  which  used the derived classes more often.
  875.      This is a trade-off.  The single class  hierarchy  pro-
  876.      vides a number of advantages, but at a cost.
  877.  
  878. 3.   A class ultimately derived from the NIHCL Object  class
  879.      (which  is every class) cannot be defined as a template
  880.      class.  This does  not  prevent  you  from  having  its
  881.      member  be  intances of template classes (which we have
  882.      done a number of times).  There are many  reasons  this
  883.      cannot  be  done, part of which is the dynamic run time
  884.      type  identification  mechanism.   Again,  there  is  a
  885.      trade-off.
  886.  
  887. 4.   There are some single-theaded (non-reentrant)  sections
  888.      of  code (such as in the deep copy mechanism).  This is
  889.      something to watch for in any class library.
  890.  
  891. 5.   The NIHCL discipline.  Many people thing  of  NIHCL  as
  892.      hard  to  work with and hard to learn.  This is in part
  893.      due to the things you must do in creating  a  class  to
  894.      work  inside the NIHCL framework.  However, the discip-
  895.      line is not that difficult, and following it  pays  off
  896.      with NIHCL's advantages.
  897.  
  898. 6.   Some execution inefficiencies.  Due to the  polymorhic,
  899.      single inheretence style of NIHCL, some things are done
  900.      that other class libraries would avoid (such  as  cast-
  901.      down and checking an object's type before proceeding to
  902.  
  903.      do what you want in some of the code).  This does  cost
  904.      some  execution  overhead, but we found for us that the
  905.      library is fast enough).   Again,  these  are  tradeoff
  906.      issues.
  907.  
  908.      From: Chuck Noren <noren@pogo.den.mmc.com>
  909.  
  910. I forgot to answer a couple of questions...
  911.  You also asked if NIHCL provided good graphics
  912.  support and math support.  The answer is no on
  913.  both counts.  We evaluated InterViews over a year
  914.  ago and rejected it (because we were familiar
  915.  with X-Windows and want to hack it directly).
  916.  NIHCL does provide some vector classes which we
  917.  have not looked at because I could not get them
  918.  to build with an older version of our compiler.
  919.  NIHCL doesn't have any math matrix classes and
  920.  some of the other useful mathematics classes.
  921.  
  922. 3.5.  ObjectPM  OS/2 PM Class Library
  923. _ _   ________  __ _ __ _____ _______
  924.  
  925. +    Platform OS/2
  926.  
  927. +    Commercial Product from Objective Solutions
  928.      Cleveland, OH
  929.      Phone: (216) 292-2546
  930.  
  931. +    Support for OS/2 1.3 now, OS/2 2.0 in beta now Supports
  932.      Zortech C++, Glockenspiel (?) Will support JPI TopSpeed
  933.      C++ in OS/2 2.0 version Contact vendor for  other  sup-
  934.      ported compilers
  935.  
  936. +    Price is $499 L, $369 at Programmer's Connection Source
  937.      ce version is $1,000 US available from vendor
  938.  
  939. +    Seems to be a mature product with support for  threads,
  940.      and has (I believe) an interface builder.
  941.  
  942. +    Information      provided      by      Barry       King
  943.      (bking@ersys.edmonton.ab.ca)
  944.  
  945. 3.6.  zApp, DOS and Windows Portable Class Library
  946. _ _   ____  ___ ___ _______ ________ _____ _______
  947.  
  948. +    Platform DOS
  949.  
  950. +    Commercial Product from Inmark Development Corporation
  951.      2065 Landings Drive
  952.      Mountain View, CA 94043
  953.      (415) 691-9000
  954.      (415) 691-9099 (FAX)
  955.      (415) 691-9990) BBS  -  downloadable demo
  956.  
  957. +    Supports MSC++, BC++ 2.0 & 3.0, ZTC++ maybe others.
  958.      $195 US for object modules, $295 US for source license
  959.  
  960. +    An evolving product which based in  single  inheritance
  961.      classes.   Subclasses  controls  from  resource info at
  962.      run-time, supports Windows GDI,can set  event  handlers
  963.      for  buttons.  Not a bad product but may not be as com-
  964.      plete as some others on the market.  Oh yeah,  has  XVT
  965.      support, I think...
  966.  
  967. +    Information      provided      by      Barry       King
  968.      (bking@ersys.edmonton.ab.ca)
  969.  
  970. 3.7.  Interviews Class Library Version 3.01
  971. _ _   __________ _____ _______ _______ _ __
  972.  
  973. +    Platform: Requires X-Windows and cfront at least 2.1
  974.  
  975. +    InterViews is an excellent GUI class library  developed
  976.      by Stanford University.
  977.  
  978. +    Developed my Mark Linton and his team.
  979.  
  980. +    ftp  from  interviews.stanford.edu.  Version   3.1   is
  981.      scheduled  to  be  released on june 15 1992. There is a
  982.      separate newsgroup for sharing experiences with  inter-
  983.      views comp.windows.interviews.
  984.  
  985. 3.8.  Menuet III
  986. _ _   ______ ___
  987.  
  988. +    Platform: DOS and Borland C++
  989.  
  990. +    Commercial Software available from:
  991.      Autumn Hill Software
  992.      1145 Ithaca Drive
  993.      Boulder, Colorado 80303
  994.      Voice: 303-494-8865
  995.      FAX:   303-494-7802
  996.      BBS:   303-494-8868
  997.  
  998.      or in Europe:
  999.  
  1000.      Murray Communications Ltd
  1001.      53 Harrowby Lane
  1002.      Grantham
  1003.      Lincs
  1004.      NG31 9HZ
  1005.      Tel: 44-476-74108
  1006.      Email: pmurray@cix.compulink.co.uk
  1007.  
  1008. +    No idea on price
  1009.  
  1010. +    They send out free demo disks if you would like to take
  1011.      a  look at it. It's small, yet full featured, and works
  1012.      with Borland C++.
  1013.  
  1014. +    Information provided by joe@proto.com
  1015.  
  1016. 3.8.1.  NetComments
  1017. _ _ _   ___________
  1018.  
  1019.      From: bennett@math.ksu.edu (Andrew G. Bennett)
  1020.  
  1021.      This package  was  found  too  inflexible  by  the  one
  1022. respondant who mentioned it. They had difficulty getting the
  1023. GUI to interact with their application  on  the  level  they
  1024. wanted.  The  respondant also noted this flaw appeared to be
  1025. present in graphic-Menu as well,  though  they  hadn't  used
  1026. that system.
  1027.  
  1028. 3.9.  Zinc
  1029. _ _   ____
  1030.  
  1031. +    Platform: DOS
  1032.  
  1033. +    This was the most commonly mentioned library  for  DOS.
  1034.      It  was  generally  praised.  Several  people noted the
  1035.      documentation could be more helpful but the  tech  sup-
  1036.      port  phone  people seemed to make up for that failing.
  1037.      One respondent noted his release didn't handle variable
  1038.      fonts  but  said  that  may  be  fixed  in  the current
  1039.      release. The  only  respondant  to  explicitly  mention
  1040.      using  Zinc  in  graphics  mode  found  it "intolerably
  1041.      slow."
  1042.  
  1043. +    Information provided by bennett@math.ksu.edu
  1044.  
  1045. 3.9.1.  Netcomments
  1046. _ _ _   ___________
  1047.  
  1048.       From abw@dsbc.icl.co.uk (Andy Wardley)
  1049.  
  1050.         POINTS FOR....
  1051.  
  1052.          The Zinc  Interface  Library  "...gives  a  fast  nice  GUI,  that
  1053.          somewhat  reminds me of windows.", "the library is well-designed."
  1054.          and "you can get it to do most things and its Windows capabilities
  1055.          are at last getting into shape."
  1056.  
  1057.          "I  will  also  add  that I'm very impressed with the company.  My
  1058.          friend who has it told me he got an update  in  the  mail  without
  1059.          even  asking  and  he  was  offered a Windows version (beta?) from
  1060.          their BBS for free.  Very impressive for a software company."
  1061.  
  1062.          "For DOS I've heard it's very good but their  Windows  version  is
  1063.          buggy,  but  I  think  they're  coming  out  with  a much-improved
  1064.          version"
  1065.  
  1066.          "See a recent c.l.c++ summary of PC GUI libs -- it did well."
  1067.  
  1068.         "We are developing DOS applications using Zinc (with Borland BC++)
  1069.          and are reasonably well-satisfied with it.  Our application is not
  1070.          pushing Zinc very hard, however.  We  are  using  it  in  graphics
  1071.          mode,  although  we are mostly putting text objects & menus on the
  1072.          screen."
  1073.  
  1074.          "They provide much sample code & studying it is essential."
  1075.  
  1076.          "Tech support is free & good; they have a BBS."
  1077.  
  1078.          "But as a UI library it is really great. They have  just  released
  1079.          version 2.01 with a lot of bug fixes this means it is pretty solid
  1080.          now."
  1081.  
  1082.          "The design tool  saves  a  lot  of  time.  The  documentation  is
  1083.          extensive and good. There is a lot of good example code too."
  1084.  
  1085.          POINTS AGAINST...
  1086.  
  1087.          "The  Zinc  designer  has lots of bugs and quirks, but you can get
  1088.          around them"
  1089.  
  1090.          "Some things could have been better done,  and  is  surely  better
  1091.          implemented in the OS of the Macintosh."
  1092.  
  1093.          "For  top-professional  use  there  are  some limitations. We even
  1094.          considered returning the package. But if you can  live  without  a
  1095.          100% product, but rather a late beta, then this is for you."
  1096.  
  1097.          "It  took  me  a  while to get into their approach, partly because
  1098.          their documentation goes  into  detail  but  seems  to  leave  out
  1099.          overviews."
  1100.  
  1101.          "The  library  is  somewhat  lower  level  than I would like.  For
  1102.          example, check boxes and dialog boxes are not built-in,  but  they
  1103.          provide examples to show you how to build them."
  1104.  
  1105.          "They do not currently support variable fonts, although their tech
  1106.          support told me it is planned for a future release."
  1107.  
  1108.          "Incidentally, applications seem to be pretty large with it."
  1109.  
  1110.          "The major problem I have with it is I wish it worked with  a  DOS
  1111.          extender under Zortech"
  1112.  
  1113.          OTHER POINTS...
  1114.  
  1115.          "If  you  can't  find  what you need in the docs, then look in the
  1116.          sources"
  1117.  
  1118.          "Rumours says that they are working on Macintosh,  OS/2  and  UNIX
  1119.          version  too.  Apple  programmers has seen an early version of the
  1120.          mac version."
  1121.  
  1122.          REVIEWS IN...
  1123.  
  1124.             Dr. Dobb's (12/90),
  1125.             Computer Language (12/90)
  1126.             PC Week (12/26?/91).
  1127.             Byte (01/91)
  1128.  
  1129.          SUMMARY...
  1130.  
  1131.          It seems that generally, people are happy with it and think it's a
  1132.          good  UI  library.   The  older  version  (pre V2.01) was slightly
  1133.          buggy, particularly in the designer and the MS windows parts,  but
  1134.          this  has  mostly  been fixed in V2.01.  Most of the bugs had work
  1135.          arounds.
  1136.  
  1137.          The library is fast and flexible, although  radio  buttons,  check
  1138.          boxes  etc,  are  not built in classes and have to be derived from
  1139.          existing classes - fairly easy for the more advanced programmer  -
  1140.          maybe slightly difficult for others..
  1141.  
  1142.          Documentation,  was  reasonable  in  the older versions and is now
  1143.          greatly improved in the new one, with over 1100 pages.   Technical
  1144.          support from the company was generally regarded as VERY good.
  1145.  
  1146.          Thanks to people who contributed...
  1147.  
  1148.             pope@daimi.aau.dk (Povl H. Pedersen)
  1149.             jamshid@emx.utexas.edu (Jamish Afshar)
  1150.             ferdie@coyote.datalog.com (fred jarvis)
  1151.             borkoles@dcs.qmw.ac.uk
  1152.             ajb@ee.wpi.edu (Arthur J Butler)
  1153.  
  1154. 3.10.  Starview C++ Graphical User Interface Library
  1155. _ __   ________ _   _________ ____ _________ _______
  1156.  
  1157. +    Designed to be independent of OS and Hardware vendors
  1158.  
  1159. +    Author:     Andreas Meyer, STAR DIVISION
  1160.  
  1161.      Contact:
  1162.  
  1163.      STAR DIVISION GmbH
  1164.      Andreas Junge
  1165.      Zum Elfenbruch 5-11
  1166.      D-2120 Lueneburg
  1167.      Phone: ++49 4131 700943
  1168.      Fax:   ++49 4131 700921
  1169.      Email: ...!unido!starlab!aj
  1170.  
  1171. +    The development of  large  applications  for  Graphical
  1172.      User  Interfaces  (GUI's) like MS-WINDOWS, MS Presenta-
  1173.      tion Manager or OSF/Motif is a very time consuming job.
  1174.      In  addition,  the  application  programming interfaces
  1175.      (API's) of the different GUI's are totally incompatible
  1176.      making  a  direct  port  of  source code to another GUI
  1177.      platform impossible, almost all code driving the user's
  1178.      interface must be re-written by the programmer.
  1179.  
  1180.      Two years ago, STAR DIVISION decided to develop  a  set
  1181.      of  new applications for GUI's which should fulfill the
  1182.      requirements of modern software standards this entails:
  1183.  
  1184.      -    Portability between the operating systems  MS-DOS,
  1185.           OS/2, Macintosh and different UNIX flavours
  1186.  
  1187.      -    At least portable between  the  GUI's  MS-WINDOWS,
  1188.           MS-Presentation Manager, MacApp and OSF/Motif
  1189.  
  1190.      -    Fulfillment of the requirements of  the  different
  1191.           GUI Style Guide's
  1192.  
  1193.      -    Data exchange and direct communication between the
  1194.           applications in homogeneous and heterogeneous net-
  1195.           works (groupware approach)
  1196.  
  1197.      Because of the indifferent "political" situation  (i.e.
  1198.      MS-DOS  or OS/2 or UNIX or everything, WINDOWS or PM or
  1199.      X.11 or everything) we decided  to  develop  a  set  of
  1200.      tools  which helps us to be mostly independent from the
  1201.      decisions of the OS and hardware vendors.  In  addition
  1202.      tools help to improve productivity and are the base for
  1203.      a successful software project.  C++ is the  programming
  1204.      language  of  our choice because we could use our large
  1205.      experiences in C programming and C++ provides all major
  1206.      advantages of Object Oriented Programming (OOP) that is
  1207.      - from our point of view - the best available  paradigm
  1208.  
  1209.      for complex software development today.
  1210.  
  1211. +    Information provided by Dave Riches (dsr@bnr.co.uk)
  1212.  
  1213. 3.11.  TEGL Library
  1214. _ __   ____ _______
  1215.  
  1216. +    Supported on Borland C++
  1217.  
  1218. +    Address not known
  1219.  
  1220. +    Price around $99
  1221.  
  1222. +    One respondant faulted  it  for  "ignoring  CUA"  while
  1223.      another  praised  it  as  having  the  look and feel of
  1224.      presentation manager. The source code apparently is not
  1225.      highly  polished  and it does recommend using more than
  1226.      one mouse button.
  1227.  
  1228. +    Information   provided    by    Andrew    G.    Bennett
  1229.      (bennett@math.ksu.edu)
  1230.  
  1231. 3.12.  Linpack Math Library
  1232. _ __   _______ ____ _______
  1233.  
  1234. +    MSDOS, UNIX, and many other platforms including a  vec-
  1235.      torised version of CRAY
  1236.  
  1237. +    Commercial software from:
  1238.      Rogue Wave Software Inc.
  1239.      1325 NW 9th Street,
  1240.      Corvallis, OR, 97330,
  1241.      (503) 754-2311.
  1242.  
  1243. +    No information on the compatability with  the  proposed
  1244.      ANSI/ISO standard
  1245.  
  1246. +    The classes are available now.  Prices range from  $199
  1247.      to   $995   for   Matrix.h++  and  $299  to  $1195  for
  1248.      Linpack.h++.
  1249.  
  1250. +    Linpack.h++ is an object-oriented C++  version  of  the
  1251.      widely used Fortran library.  Linpack.h++ includes 100%
  1252.      of the functionality of the Fortran version, plus  much
  1253.      more.   Because  Linpack.h++  is  written in C++ it has
  1254.      capabilities that far exceed the Fortran version.
  1255.  
  1256.      Both Matrix.h++ and Linpack.h++ are completely compati-
  1257.      ble  with  Rogue  Wave's  other  C++  class  libraries,
  1258.      Tools.h++ and Math.h++, which are accepted standards in
  1259.      the industry.
  1260.  
  1261.      Matrix.h++ includes all the funtionality  of  Math.h++.
  1262.      For  example:  general  matrices,  vectors, statistics,
  1263.      complex numbers, Fast  Forier  Transformation  (FFT's),
  1264.      etc.   Matrix.h++  adds specialized matrix classes such
  1265.      as  banded,  symmetric,  positive-definite,  Hermitian,
  1266.      tridiagonal,    etc.    Because   Matrix.h++   includes
  1267.      Math.h++, it can take advantage  of  Math.h++'s  highly
  1268.      optimized  low-level  assembly routines, making it fast
  1269.      as well as graceful.
  1270.  
  1271. +    Information provided by Dave Riches (dsr@bnr.co.uk)
  1272.  
  1273. 3.13.  Objectkit\C++ 1.0
  1274. _ __   ___________   _ _
  1275.  
  1276. +    Commercial software available from:
  1277.  
  1278.      ParcPlace Systems, Inc.
  1279.      999 E. Arques Ave.
  1280.      Sunnyvale, CA 94086
  1281.      Tel: (408)481-9090
  1282.      Sales: 1-800-759-7272
  1283.      email: info@parcplace.com
  1284.  
  1285. +    Features the AT&T Standard Library Extensions:
  1286.  
  1287.      -    variable length bit strings
  1288.  
  1289.      -    adjustable  1-d  vectors  of  parameterized   type
  1290.           (implemented via macros)
  1291.  
  1292.      -    classes for date, time-of-day, timezone and  time-
  1293.           duration arithmetic
  1294.  
  1295.      -    finite state machine classes
  1296.  
  1297.      -    simple exception handling using Objection classes
  1298.  
  1299.      -    parameterized linked lists  (parameterization  via
  1300.           macros)
  1301.  
  1302.      -    associative arrays (i.e., keys/value associations)
  1303.  
  1304.      -    fast memory allocation class: Pool
  1305.  
  1306.      -    program   execution   time   measurement    class:
  1307.           Stopwatch
  1308.  
  1309.      -    String class and specializations of  iostream  and
  1310.           streambuf for String
  1311.  
  1312.      As a convenience for purchasers, Objectkit\C++ 1.0 also
  1313.      includes  the  NIHCL  and InterViews class libraries as
  1314.      *unsupported* free software.
  1315.  
  1316.      Objectkit\C++ OI - based on  technology  licensed  from
  1317.      Solbourne, OI is a C++ class library for rapid develop-
  1318.      ment of graphical user-interfaces  that  allow  runtime
  1319.      selection of OSF/Motif or OPENlOOK look-and-feel.
  1320.  
  1321. +    Information provided by Mike Khaw (khaw@parcplace.com)
  1322.  
  1323. 3.14.  MFC (Microsoft Foundation Class Library)
  1324. _ __   ___  _________ __________ _____ _______
  1325.  
  1326. +    Included with the MS C7 compiler. Please refer  to  the
  1327.      Microsoft Compiler section.
  1328.  
  1329. +    Includes complete source.  Supports all standard memory
  1330.  
  1331.      models.
  1332.  
  1333.      Supports  DLLs  [dynamic  link  libaries   aka   shared
  1334.      Libraries].
  1335.  
  1336.      Also  sometimes  referred  to   as   AFX   "Application
  1337.      FrameworX", and/or "The C++ API for Microsoft Windows"
  1338.  
  1339. +    Information provided by: jimad@microsoft.com
  1340.  
  1341. 3.14.1.  Introduction
  1342. _ __ _   ____________
  1343.  
  1344.      MFC's primary design goals are to provide an efficient,
  1345. compact,  fast,  easy-to-use, typesafe, and portable version
  1346. of the Windows API for the C++ programmer.  A secondary goal
  1347. is  to provide Collection classes, diagnostic memory manage-
  1348. ment, etc, for DOS and Windows programmers.  MFC  is  imple-
  1349. mented  without the use of language-extensions, allowing the
  1350. library to be  ported  to  other  C++  conformant  compilers
  1351. [although  right  now  MFC is only shipping with the C7 com-
  1352. piler.]  MFC closely follows the naming conventions and  use
  1353. of  the  "C"  Windows API so that programmers experienced in
  1354. Windows programming find it easy to switch from C to the C++
  1355. APIs.  However the "lower level" aspects of Windows program-
  1356. ming are improved upon by MFC.  For example  wparam,  lparam
  1357. packing/unpacking  is  handled  automatically  and in a type
  1358. safe manner.  Also the main message loop is handled automat-
  1359. ically.  Switch statements are replaced with the use of vir-
  1360. tual functions and/or cached  message  dispatch  that  avoid
  1361. slow message searches.  Finally, the C++ Windows classes are
  1362. implemented in such a manner as to  remain  compatible  with
  1363. the   C  implementations,  such that Windows programmers can
  1364. still use the C APIs  where  desired,  and/or  can  mix  old
  1365. implementations  of  Windows classes implemented in "C" with
  1366. new Windows classes written  in  C++.  Namespace  collisions
  1367. with  other  libraries are avoided by using an uppercase "C"
  1368. prefix on the MFC Windows classes.  MFC includes support for
  1369. OLE, DDE, Multimedia, and Windows for Pen Computing.  Appli-
  1370. cations written using MFC are automatically pen aware.
  1371.  
  1372. 3.14.2.  Window Application Classes
  1373. _ __ _   ______ ___________ _______
  1374.  
  1375.           CWinApp   Main windows application class
  1376.  
  1377.           Window Classes
  1378.  
  1379.           CWnd           Base class for all windows
  1380.           CFrameWnd      Main window base class for the SDI (Single Document
  1381.                            Interface) desktop window
  1382.           CMDIFrameWnd   Base class for the MDI (Multiple Document Interface)
  1383.                            desktop window
  1384.           CMDIChildWnd   Base class for MDI child windows
  1385.           CDialog        Base class for modeless dialog windows
  1386.           CModalDialog   Base class for modal dialog windows
  1387.           CButton        Button control windows
  1388.           CComboBox      Combo box control windows
  1389.           CEdit          Edit control windows
  1390.           CListBox       List box control windows
  1391.           CScrollBar     Scroll bar control windows
  1392.           CStatic        Static control windows
  1393.  
  1394.           GDI (Graphical Device Interface) Classes
  1395.  
  1396.           CDC           Base class for display contexts
  1397.           CClientDC     Display contexts for client areas of windows
  1398.           CMetaFileDC   Metafile device contexts
  1399.           CPaintDC      Display contexts used in <OnPaint> member functions
  1400.           CWindowDC     Display contexts for entire windows
  1401.           CGdiObject    Base class for GDI drawing tools
  1402.           CBitmap       GDI physical bitmaps
  1403.           CBrush        GDI physical brushes
  1404.           CFont         GDI physical fonts
  1405.           CPalette      GDI physical palettes
  1406.           CPen          GDI physical pens
  1407.           CRgn          GDI physical regions
  1408.  
  1409.           Other Windows Classes
  1410.  
  1411.           CMenu    Menu structures
  1412.           CPoint   (X, Y) points in a device context
  1413.           CSize    Relative positions or coordinate pairs
  1414.           CRect    Rectangular regions in a device context
  1415.           OLE (Object Linking and Embedding) Classes
  1416.           OLE Classes   Object Linking and Embedding Classes
  1417.  
  1418.           Run-Time Object Model Class
  1419.  
  1420.           CObject   Root class in the Foundation class hierarchy
  1421.  
  1422.           File Classes
  1423.  
  1424.           CFile        Binary disk files
  1425.           CMemFile     In-memory files
  1426.           CStdioFile   Buffered stream disk files, usually text mode
  1427.  
  1428.           Object Input/Output
  1429.  
  1430.           CArchive       Persistent storage for objects
  1431.           CDumpContext   Destinations for diagnostic output
  1432.  
  1433.           Exceptions
  1434.  
  1435.           CException               Abstract base class for exceptions
  1436.           CArchiveException        Archive-specific exceptions
  1437.           CFileException           File-specific exceptions
  1438.           CMemoryException         Out of memory exceptions
  1439.           CNotSupportedException   Function not supported exceptions
  1440.           CResourceException       Windows resource not found exceptions
  1441.  
  1442.           Collections
  1443.  
  1444.           CByteArray           Arrays of bytes
  1445.           CDWordArray          Arrays of 32-bit double-words
  1446.           CObArray             Arrays of CObject pointers
  1447.           CPtrArray            Arrays of void pointers
  1448.           CStringArray         Arrays of strings
  1449.           CWordArray           Arrays of 16-bit words
  1450.           <template array class>
  1451.  
  1452.           CObList              Lists of CObject pointers
  1453.           CPtrList             Lists of void pointers
  1454.           CStringList          List of strings
  1455.           <template list class>
  1456.  
  1457.           CMapPtrToWord        Mappings of void pointers to 16-bit words
  1458.           CMapPtrToPtr         Mappings of void pointers to void pointers
  1459.           CMapStringToOb       Mappings of strings to CObject pointers
  1460.           CMapStringToPtr      Mappings of void pointers to CObject pointers
  1461.           CMapStringToString   Mappings of strings to strings
  1462.           CMapWordToOb         Mappings of 16-bit words to CObject pointers
  1463.           CMapWordToPtr        Mappings of 16-bit words to void pointers
  1464.           <template map class>
  1465.  
  1466.           Miscellaneous Support Classes
  1467.  
  1468.           CString     Character strings
  1469.           CTime       Absolute time and date values
  1470.           CTimeSpan   Relative time and date values
  1471.  
  1472.           Global Functionality
  1473.  
  1474.           Diagnostic Services               Global memory diagnostic functions
  1475.                                               and macros (Debug only)
  1476.           Exception Processing              Global exception throwing and
  1477.                                               catching functions and macros
  1478.           Message-Map Reference             CWnd message map entries
  1479.                                               with message-handler function
  1480.                                               prototypes
  1481.  
  1482. 3.15.  NetClasses
  1483. _ __   __________
  1484.  
  1485. +    Commercial software available from:
  1486.  
  1487.      PostModern Computing Technologies, Inc.
  1488.      1032 Elwell Court, Suite 240
  1489.      Palo Alto, California 94303
  1490.      Telephone: (415) 967-6169
  1491.      Facsimile: (415) 967-6212
  1492.      Email: plambeck@cs.stanford.edu
  1493.  
  1494. +    No information on compatability of the future  ANSI/ISO
  1495.      standard.
  1496.  
  1497. +    NetClasses is a set of C++ class libraries for  distri-
  1498.      buted  object-oriented  communications  that will begin
  1499.      beta testing June 15 and is  scheduled  for  production
  1500.      release in the 3rd quarter of 1992.
  1501.  
  1502. +    Information   provided    by    Thane    E.    Plambeck
  1503.      <plambeck@cs.stanford.edu>
  1504.  
  1505. 3.15.1.  Introduction
  1506. _ __ _   ____________
  1507.  
  1508.      One of the major stumbling  blocks  of  developing  and
  1509. fielding  complex distributed applications is the difficulty
  1510. in implementing and debugging using  existing  communication
  1511. tools.  The focus of the NetClasses architecture has been to
  1512. provide the tools necessary for programmers to develop  com-
  1513. plex  distributed  applications  without having to deal with
  1514. the esoteric details of low-level communications.
  1515.  
  1516. NetClasses is a set of C++ class libraries that is organized
  1517. as  a  software toolkit.  The typical user of the NetClasses
  1518. libraries  will  be  a   distributed   systems   application
  1519. developer who requires an object-oriented framework for dis-
  1520. tributed, message-passing based programming.  By linking the
  1521. appropriate  NetClasses  libraries,  application programmers
  1522. are then able to:
  1523.  
  1524. +    Transport objects over a network.
  1525.  
  1526.      Currently, there are three object varieties that  NetC-
  1527.      lasses can transport:
  1528.  
  1529.      1.   Arbitrary   C++   objects---once   derived    from
  1530.           PostModern's TransObject class
  1531.  
  1532.      2.   arbitrary  NIH-derived  objects;  and  provide  an
  1533.           object-oriented data transport in which the struc-
  1534.           ture and  organization  of  network  transportable
  1535.           objects  is  specified  externally in configurable
  1536.           files  using  a   simple,   programming   language
  1537.           independent  abstract  syntax  notation, the NetC-
  1538.           lasses Abstract Syntax Notation (NASN).
  1539.  
  1540. +    Perform remote method invocations (RMI)
  1541.  
  1542.      Using RMI, an application on machine  B  can  invoke  a
  1543.      method on machine A. RMI insulates distributed applica-
  1544.      tions from  the  complexity  inherent  in  traditional,
  1545.      RPC-based distributed systems development tools such as
  1546.      protocol compilers, TCP/IP code writing,  and  detailed
  1547.      socket handling.  RMI makes fault tolerance and connec-
  1548.      tion management transparent to the application program-
  1549.      mer.   The RMI layer is built on top of the distributed
  1550.      services package that is described below.
  1551.  
  1552. +    Build complex information distribution systems  on  top
  1553.      of   Distributed   Services,   PostModern   Computing's
  1554.      object-oriented approach  to  client-server  connection
  1555.      management and fault tolerance.
  1556.  
  1557. +    Use the NetClasses application programmer interface  in
  1558.      order  to create, manipulate, and destroy typed objects
  1559.      given NetClasses Typed Object  data  type  definitions.
  1560.      (NIH-derived  and native C++ objects are created, mani-
  1561.      pulated and destroyed from C++ itself).
  1562.  
  1563. +    Read and  write  all  three  varieties  of  NetClasses-
  1564.      transportable   objects   on   streams  using  machine-
  1565.      independent  external   representations.    All   three
  1566.      varieties  of  objects  can  be stored to and read from
  1567.      files.
  1568.  
  1569. 3.15.2.  Objects as transportable data
  1570. _ __ _   _______ __ _____________ ____
  1571.  
  1572.      One of the most common needs  in  distributed  applica-
  1573. tions development is the ability to ship objects over a net-
  1574. work.  Currently, when data has to move from one machine  to
  1575. another  this  is  usually  done using hard-coded structures
  1576. over a low-level communications interface such  as  Berkeley
  1577. sockets  or  the System V Transport Layer Interface.  Moving
  1578. data in this way has several disadvantages:
  1579.  
  1580. +    If the format of the data changes,  e.g.  a  new  field
  1581.      must  be  added to a structure, all programs using that
  1582.      structure must be recompiled, whether or not they actu-
  1583.      ally make use of this new field.
  1584.  
  1585. +    Developing programs using low-level interfaces  require
  1586.      programmers  to concentrate on details such as sockaddr
  1587.      structs, byte ordering routines  such  as  htonl,  port
  1588.      numbers,   and  so  on.  These  are  details  that  are
  1589.      irrelevant to most applications and simply stand in the
  1590.      way of efficient distributed application programming.
  1591.  
  1592. +    Because of the low-level nature of the interfaces,  the
  1593.      resulting  distributed  programs are generally not very
  1594.      scalable.  In order for distributed programs  to  scale
  1595.      up  to  large  size  implementations it is necessary to
  1596.      provide an infrastructure whereby  data  and  processes
  1597.      can be managed efficiently as the number of machines on
  1598.      the network grows.  This has proven to be  very  diffi-
  1599.      cult using low-level interface tools.
  1600.  
  1601.      Engineers developing distributed systems using  object-
  1602. oriented methodologies place great emphasis on data encapsu-
  1603. lation and clean interfaces.  One of the goals of NetClasses
  1604. has  been  to preserve these properties in the communication
  1605. interfaces.
  1606.  
  1607. Therefore, instead of shipping byte buffers  over  the  net-
  1608. work, NetClasses allows applications to ship objects.  In an
  1609. object-oriented program virtually all information is  stored
  1610. in objects, making objects the most natural form in which to
  1611. transfer information over a network.
  1612.  
  1613. 3.15.3.  Varieties of object transport
  1614. _ __ _   _________ __ ______ _________
  1615.  
  1616.      PostModern Computing's NetClasses  package  provides  a
  1617. set of flexible C++ tools for object transport.
  1618.  
  1619. The NetClasses NIH-based and Typed  Object-based  transports
  1620. are  built  on  top  of the National Institutes Health (NIH)
  1621. class library.  However, the NetClasses Typed Object  appli-
  1622. cation  programmer  interface is not NIH-dependent.  In par-
  1623. ticular, the Typed Object interface does not in any way con-
  1624. strain  C++ developers who prefer not to use the NIH library
  1625. themselves.
  1626.  
  1627. The TransObject transport offers  C++  programmers  a  third
  1628. facility  for object transport that is entirely NIH indepen-
  1629. dent.  The TransObject class library offers end-user  appli-
  1630. cation  programmers  a  way  to  migrate  existing C++ class
  1631. definitions to a network-transportable framework.  The Tran-
  1632. sObject  facility  is  independent  of  both the NetClassses
  1633. Typed Object transport and the  NIH-based  object  transport
  1634. described above.
  1635.  
  1636. 3.15.4.  Distributed Services
  1637. _ __ _   ___________ ________
  1638.  
  1639.      In addition to transporting  objects  over  a  network,
  1640. another  common  need in distributed application development
  1641. is the management of object  dissemination  and  connections
  1642. between clients and servers.
  1643.  
  1644. PostModern Computing's Distributed  Service  paradigm  is  a
  1645. connection  and  service management mechanism that is organ-
  1646. ized around the idea that network service  providers  should
  1647. not have to set up explicit port numbers and RPC connections
  1648. but rather should simply  ``advertise''  themselves  on  the
  1649. network.   ``Agents''  are  active  processes on the network
  1650. that monitor network service advertisements and manage  con-
  1651. nections  between  information producers and consumers.  The
  1652. Distributed Service package is organized as a combination of
  1653. C++  class  libraries  and  configurable ``dsagent'' execut-
  1654. ables.  The Distributed Services paradigm is a powerful  and
  1655. flexible  package that provides an object oriented framework
  1656. for integrating and connecting applications on a network.
  1657.  
  1658. Distributed Services provides the following features:
  1659.  
  1660. +    Fault Tolerance
  1661.  
  1662. +    Load Balancing
  1663.  
  1664. +    Multicasting
  1665.  
  1666. 3.15.5.  Remote Method Invocation (RMI)
  1667. _ __ _   ______ ______ __________  ___
  1668.  
  1669.      The distributed services paradigm enables methods to be
  1670. invoked  on  objects from remote machines.  The RMI facility
  1671. is a higher level communications facility that again shields
  1672. the developer from port number and host name considerations.
  1673. The focus of RMI is on  ease  of  use.   An  RMI  invocation
  1674. requires  no  stub or skeleton files, protocol compilers, or
  1675. RPC mechanisms.  To enable object X of class C to  have  its
  1676. method  M  invoked  from a remote machine, a programmer uses
  1677. the RMI::advertise method to advertise method X.M.
  1678.  
  1679. If an application wants to invoke the M method on  object  X
  1680. from  a  remote  machine,  it  uses  the  RMI::invoke("X.M")
  1681. method.
  1682.  
  1683. Parameter passing in RMI can be based on any  of  the  three
  1684. NetClasses  object  transports  (generic C++, NIH-object, or
  1685. TypedObject).  Synchronous  and  asynchronous  RMI  versions
  1686. exist.
  1687.  
  1688. Multiple agents can advertise method X.M.  The one  that  is
  1689. actually  invoked  is  transparent  to the client.  RMI thus
  1690. provides an easy mechanism for developing  scalable  distri-
  1691. buted applications.
  1692.  
  1693. 3.15.6.  Transport mechanisms
  1694. _ __ _   _________ __________
  1695.  
  1696.      In the first developer's release,  NetClasses  includes
  1697. TCP-    and    UDP-based    object   transport   mechanisms.
  1698. PostModern's Reliable Broadcast Protocol  (now  under  alpha
  1699. testing)  is a UDP-based layer for reliable object transport
  1700. in nonconnection-oriented environments.  The TCP,  UDP,  and
  1701. Reliable  Broadcast Protocol facilities are all organized as
  1702. C++ class libraries.
  1703.  
  1704. 4.  Comments
  1705. _   ________
  1706.  
  1707.      From: jcc@gna.axis-design.fr (Jean-Christophe Collet)
  1708.  
  1709. Anyway, I did a lot of work with InterViews and I had a look
  1710. to  NihLib.   I  Highly  recommend  InterViews 3.0 but found
  1711. NihLib rather unusable (it's a very big tree while  we  need
  1712. more often a lot of small trees).
  1713.  
  1714. One very, VERY, important criteria of a class library is its
  1715. documentation.   A  very good library without a proper docu-
  1716. mentation is very hard to use (if not useless). There is  no
  1717. need  for  the  documentation to be thick and verbose but it
  1718. should gives all the info you need to use the class.
  1719.  
  1720. Then, there is reuse... (ako "how easy is  it  to  derive  a
  1721. class ?")
  1722.  
  1723. InterViews is a VERY good example of  a  good  library  with
  1724. appropriate doc.
  1725.  
  1726.      From: fig.citib.com!kpt@fig.citib.com (Kevin P. Tyson)
  1727.  
  1728. I  am  in  the  process  of  reviewing/selecting  C++  class
  1729. libraries  for  our shop.  We have reviewed two todate.  The
  1730. Booch Components and Tools.h++.  We started out by deciding,
  1731. loosely,  what  our  requirements are.  They major ones boil
  1732. down to: (1) High quality commercial support is very  impor-
  1733. tant  to  us.  (2) Support for multi-threaded programming is
  1734. only slightly less important.  (3) Sophsiticated and  exten-
  1735. sible memory management support is our third requirement.
  1736.  
  1737. We are a DCE/ENCINA shop and this is  what  has  driven  our
  1738. requirements.   We  do  distributed  transaction  processing
  1739. based applications.  Someone who does scientific programming
  1740. will  have  different  requirements  and  someone working on
  1741. parallel processors will have their own requirements.
  1742.  
  1743. The next libraries we intend to examine are COOL and the USL
  1744. C++  Components  library.   So  far  Booch  meet  the  three
  1745. requirements listed above but was much  too  low  level  and
  1746. lacked  good  documentation.  Tools.h++ could be extended to
  1747. meet our thread safe and memory management requirements, but
  1748. that  would  have made support difficult as it would require
  1749. modifying their source code.
  1750.  
  1751.      From: eyckmans%imec.be@zimec.be
  1752.  
  1753. In article <p4fieINN7si@agate.berkeley.edu>, you write:
  1754.  
  1755. |> Now, has anyone actually used COOL and would you have any
  1756. idea why the
  1757. |>   authors expressed reservations about it's quality?  How
  1758. does it compare
  1759. |>   with other public domain libraries?  Are there any good
  1760. ones out there
  1761. |>   that you would like to boast about?
  1762.  
  1763. I have not used COOL (yet). As a matter of fact, I have  not
  1764. yet  actively  used any of the libaries mentioned below, but
  1765. here goes anyway...
  1766.  
  1767.          COOL
  1768.          ====
  1769.  
  1770.            advantages
  1771.            ----------
  1772.            - uses templates
  1773.            - uses exceptions
  1774.  
  1775.            disadvantages
  1776.            -------------
  1777.            - COOL templates are not 100% ARM conformant
  1778.            - no garbage collection support at all
  1779.            - common root class (Smalltalk)
  1780.            - COOL uses an exception implementation which is not even close
  1781.              to the ARM
  1782.  
  1783.            remarks
  1784.            -------
  1785.            - I have not yet tried to compile it with DEC C++ v1.0.
  1786.            - I think that the main objection the COOL authors have against
  1787.              it, is that they feel that their class hierarchy is not optimal.
  1788.              (Almost) all COOL classes either directly or indirectly inherit
  1789.              from a common root class called Generic. In their documentation,
  1790.              the authors state that if they were to redo it, they would
  1791.              rather go for a forest of base classes.
  1792.  
  1793.          NIH
  1794.          ===
  1795.  
  1796.            advantages
  1797.            ----------
  1798.            - used in many applications, and therefor thoroughly tested
  1799.  
  1800.            disadvantages
  1801.            -------------
  1802.            - no garbage collection support at all
  1803.            - no templates
  1804.            - no exceptions
  1805.            - common root class (Smalltalk)
  1806.  
  1807.            remarks
  1808.            -------
  1809.            - I have not yet tried to compile it with DEC C++ v1.0.
  1810.  
  1811.          LEDA
  1812.          ====
  1813.  
  1814.            advantages
  1815.            ----------
  1816.            - well designed set of data types
  1817.            - looks as if it should be very efficient
  1818.            - uses some template-like construct
  1819.  
  1820.            disadvantages
  1821.            -------------
  1822.            - no exceptions
  1823.            - LEDA `templates' are not even close to the ARM
  1824.            - use is restricted to "research and education"
  1825.            - use is not for free (but it's cheap)
  1826.            - I cannot possibly get it to compile with DEC C++ v1.0
  1827.  
  1828.          OATH
  1829.          ====
  1830.  
  1831.            advantages
  1832.            ----------
  1833.            - garbage collection comes "for free"
  1834.            - focuses on a how to implement classes, instead of on yet
  1835.              another set of classes a set of classes
  1836.  
  1837.            disadvantages
  1838.            -------------
  1839.            - common root class (Smalltalk)
  1840.            - no templates
  1841.            - no exceptions
  1842.            - garbage collection comes "for free"
  1843.            - nobody can possibly get it to compile with DEC C++ v1.0
  1844.              without major modifications
  1845.  
  1846.      From: eyckmans%imec.be@imec.be
  1847.  
  1848. Hello,
  1849.  
  1850. First of all, let me start by giving you a bit of background
  1851. information  on  what my organisation is (and intends to be)
  1852. doing. This will allow you to read my answers to your  ques-
  1853. tions in the correct context.
  1854.  
  1855. +    IMEC is a research institute focusing on  the  (automa-
  1856.      tion  of the) design of VLSI chips. Part of the support
  1857.      we offer to the people who are doing research into  the
  1858.      area  of  high level synthesis, currently consists of a
  1859.      C++ libary, written on top of NIH. At the moment,  this
  1860.      libary  is  being  redesigned from scratch (for various
  1861.      reasons), and this is where I (as  a  software  expert)
  1862.      enter the picture. I should also add that we have to be
  1863.      able to distribute source code which ideally should run
  1864.      on  different  types of hardware. As you can see, using
  1865.      commercial class libraries is somewhat out of the ques-
  1866.      tion (although that may change).
  1867.  
  1868. +    So, one of the many things I am doing now, is to inves-
  1869.      tigate  what  C++ libaries are available to build upon,
  1870.      and whether they at least partially fit our  needs.  My
  1871.      problem  is  that,  although  I do have some experience
  1872.      with OO, I have never used C++ for "real applications",
  1873.      so  my current knowledge of C++ is limited (but growing
  1874.      rapidly).
  1875.  
  1876.      Having said all that, here is what you are really after
  1877.      :
  1878.  
  1879.      > How is it the various libraries won't with with DEC's
  1880.      C++?  Are they non
  1881.      > standard C++ or do they just not comply with C++ 3.0?
  1882.      How do you know
  1883.      > that they do not work with DEC C++?
  1884.  
  1885.      To my knowledge, DEC C++ v1.0 is *very* ARM  compliant,
  1886.      while  most other C++ compilers are not. This is one of
  1887.      the reasons why we are switching to the  DEC  compiler.
  1888.      Here is a list of what we have tried to compile with it
  1889.      until now :
  1890.  
  1891. -    InterViews
  1892.  
  1893. -    LEDA
  1894.  
  1895. -    OATH
  1896.  
  1897. -    SPOOK (don't ask)
  1898.  
  1899. -    some of our own tools
  1900.  
  1901.      Basically, in all cases we have discovered things which
  1902.      are  not allowed by the ARM, but somehow did compile on
  1903.      previous compilers (g++ as well as various  derivatives
  1904.      of cfront 2.0 and 2.1). Some of these were easy to fix,
  1905.      but some weren't. As a matter of fact, the  SPOOK  tool
  1906.  
  1907.      set  is  the  only thing in the above list which, after
  1908.      modification, did make it all  the  way  to  executable
  1909.      code.
  1910.  
  1911.      > Are these notes impressions that you've  gotten  from
  1912.      people who have used
  1913.      > these various libraries?
  1914.  
  1915.      That depends on what libary we are  talking  about,  so
  1916.      let's make a list :
  1917.  
  1918.               NIH  : As I have said, this has been used in the previous
  1919. version of
  1920.                      our Synthesis Backbone. In addition, I picked up
  1921. some info on
  1922.                      comp.lang.c++.
  1923.  
  1924.               COOL : This has not been used at our site, but I have
  1925. received some
  1926.                      info from other people (isn't usenet great?). I
  1927. also looked at
  1928.                      the manual.
  1929.  
  1930.               LEDA : I have looked at the manual, and have actually
  1931. tried to compile
  1932.                      it with DEC C++ v1.0.
  1933.  
  1934.               OATH : I have looked at the manual, and have actually
  1935. tried to compile
  1936.                      it with DEC C++ v1.0.
  1937.  
  1938.      > Do you intend to get involved with one of these pack-
  1939.      ages in the future?
  1940.  
  1941.      I guess I've already answered this in my introduction.
  1942.  
  1943.      > Does this mean that you've tried to get  it  to  work
  1944.      with cxx but it
  1945.      > won't compile?  Or do you just  know  that  it  won't
  1946.      work becuase it uses
  1947.      > non standard C++?
  1948.  
  1949.      This question was about LEDA,  so  here  are  the  gory
  1950.      details of what happened :
  1951.  
  1952. 1.   When compiling LEDA in  its  pure  form,  the  compiler
  1953.      threw lots of warning and error messages at me.
  1954.  
  1955. 2.   I was able to solve most (but not yet  all)  of  these,
  1956.      but  now  each compilation ends with the following mes-
  1957.      sage (provided that it does not report syntax errors) :
  1958.  
  1959.              11, fatal: A bugcheck occurred in the compiler.
  1960.  
  1961. This is true even for the smallest of files,  so  I  suspect
  1962. there  must be some very ugly stuff in the header files, but
  1963. I have no idea what this might be.
  1964.  
  1965. Because of this, I just gave up. So I can't tell you whether
  1966. the remaining syntax errors are solvable or not.
  1967.  
  1968. While I'm at it, allow me to elaborate a little  bit  on  my
  1969. statement  about compiling OATH with DEC C++ v1.0. The first
  1970. time round, the compiler flagged lots of errors. I was  able
  1971. to  solve this, but than I ran into an illegal downcast upon
  1972. which, unfortunately, a  large  part  of  the  OATH  library
  1973. depends.  This  is why I said that major changes to the code
  1974. would be needed. However, after sending my mail, I  realized
  1975. that  there  is a small possibility that this second problem
  1976. (although present in the code from the beginning) was  actu-
  1977. ally  activated  by  the  changes I made. So it looks like I
  1978. will have to try again.
  1979.  
  1980.  
  1981.  
  1982.