home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / lang / cplus / 16482 < prev    next >
Encoding:
Text File  |  1992-11-17  |  18.7 KB  |  544 lines

  1. Newsgroups: comp.lang.c++
  2. Path: sparky!uunet!charon.amdahl.com!pacbell.com!ames!elroy.jpl.nasa.gov!sdd.hp.com!saimiri.primate.wisc.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!pacific.mps.ohio-state.edu!linac!att!att!dptg!ucs!skdutta
  3. From: skdutta@ucs.att.com (Saumen Dutta)
  4. Subject: C++ Product List - Version 2.04 - Part 4/8
  5. Message-ID: <1992Nov18.022710.511@ucs.att.com>
  6. Organization: AT&T Universal Card Services, Jacksonville FL
  7. Date: Wed, 18 Nov 1992 02:27:10 GMT
  8. Lines: 534
  9.  
  10. 3.  Libraries
  11. _   _________
  12.  A List of Class Libraries are available below. Refer to the
  13. individual  items  for  detail descriptions. The description
  14. includes evaluation criteria on these libraries.  Evaluation
  15. is based on Documentation, Usability, Extensibility, Permor-
  16. mance, Sensibleness etc.
  17.  
  18. 3.1.  OATH - Object-oriented Abstract Type Hierarchy.
  19. _ _   ____   ______ ________ ________ ____ _________
  20.  
  21. +    Written by: Brian M. Kennedy
  22.  
  23.      Freeware  available  via  anonymous   ftp   from   site
  24.      csc.ti.com (192.94.94.1) in the file /pub/oath.tar.Z.
  25.  
  26. +    The Reference Manual states it has only  been  compiled
  27.      with AT&T cfront 2.1 compatible compilers. No templates
  28.      and no exception handling.
  29.  
  30. +    OATH  (Object-oriented  Abstract  Type  Hierarchy)  was
  31.      designed as an experiment in increasing object-oriented
  32.      reuse.  It has a fairly high learning curve, but poten-
  33.      tially higher gains if you are looking for a more flex-
  34.      ible and robust abstraction.  It is  completely  unsup-
  35.      ported.
  36.  
  37.      Please refer to the menu below to  get  to  the  detail
  38.      information about OATH features.
  39.  
  40. +    Information provided by Marco Pace  (MPACE@ESOC.BITNET)
  41.      and Brian Kennedy (kennedy@intellection.com)
  42.  
  43. 3.1.1.  OATH Introduction
  44. _ _ _   ____ ____________
  45.  
  46.      OATH instantiates an approach to  C++  class  hierarchy
  47. design   that   exploits  subtyping  polymorphism,  provides
  48. greater implementation independence, and  supports  implicit
  49. memory  management  of  its  objects.  It is implemented via
  50.  
  51. parallel hierarchies of internal  types  and  accessors   (a
  52. concept  similar  to  that  of  the  "smart  pointers",  but
  53. improved compared to them).  The internal types contain  the
  54. object  representation  (the  data  members) and the virtual
  55. functions.  The accessor types contain all of the externally
  56. accessible functions of the abstract types.
  57.  
  58.      Two main design goals of OATH were:
  59.  
  60. To provide a meaningful  abstract type  hierarchy   that  is
  61. consistent  with  the concepts being modelled by utilizing a
  62. strict subtyping approach  to  hierarchy  design.   Starting
  63. from  the  the idea that a type hierarchy should be designed
  64. to reflect the behaviour of the objects being  modelled  and
  65. not  to  reflect the most convenient computer representation
  66. of objects, the designer of OATH gave priority to  the  sub-
  67. typing (inheriting functionality) aspect over the code reuse
  68. (inheriting  implementation)  aspect.   Given  a  consistent
  69. abstract  type  hierarchy,   implementation  classes  can be
  70. added at the leaves of the hierarchy (see figure  later  on)
  71. to implement the behaviour of the abstract types. Code reuse
  72. can be exploited at this phase, but should  not  enter  into
  73. the design of the abstract type hierarchy.
  74.  
  75. To provide robust  garbage collection (GC)  of OATH objects,
  76. fully  implemented within a portable C++ class library.  The
  77. garbage collection mechanism is a hybrid  reference counting
  78. and  marking   algorithm  capable  of collecting all garbage
  79. (including circular references).  The programmer can  select
  80. one of four garbage collection modes at compile time: no GC,
  81. incremental GC, stop-and-collect, or combined.
  82.  
  83. 3.1.2.  Features
  84. _ _ _   ________
  85.  
  86.      OATH's main features are the following:
  87.  
  88. It provides  heterogeneous container classes
  89.  
  90. It provides  dynamic type  determination   in  the  form  of
  91. "safe casts"
  92.  
  93. It provides accessors to access OATH objects.
  94.  
  95. For each OATH type there is a corresponding  accessor  class
  96. (an  accessor  lies  between  a C++ pointer and a C++ refer-
  97. ence).  The accessors can be initialized and  assigned  OATH
  98. objects to access. However, any other operation on an acces-
  99. sor is applied directly to the abstract object it accesses.
  100.  
  101. 3.1.3.  Hierarchy
  102. _ _ _   _________
  103.  
  104.      The class hierarchy provided by OATH is the following:
  105.  
  106.                 + obj
  107.                   + pos
  108.                     * pdPos
  109.                     + listPos
  110.                       * dlPos
  111.                       + stringPos
  112.                         * minStringPos
  113.                   + bag
  114.                     + set
  115.                       * hashSet
  116.                       + finiteSet
  117.                         # characterSet
  118.                     + queue
  119.                       + seq
  120.                         + lifoQueue
  121.                           * pdlQueue
  122.                         + fifoQueue
  123.                           + deq
  124.                             + list
  125.                               * dlList
  126.                               + string
  127.                                 * minString
  128.                     + table
  129.                       # stringTable
  130.                   + token
  131.                     # character
  132.                     # localToken
  133.                     # stringToken
  134.                   + complex
  135.                     + real
  136.                       + rational
  137.                         + integer
  138.                           * bigInteger
  139.  
  140. where the classes preceded by '+' are  abstract  types,  the
  141. classes  preceded  by  '*' are implementation types, and the
  142. classes preceded by '#' are "abstract implementation types".
  143. (A  visually  more readable version of this hierarchy can be
  144. found in [1], Figure 1 <see bibliography>.)
  145.  
  146. 3.1.4.  Evaluation
  147. _ _ _   __________
  148.  
  149. +    Documentation:
  150.  
  151.      The documentation is very concise (probably  too  much)
  152.      and lacks examples. Due to its conciseness sometimes it
  153.      is not easy to understand and somehow it is cryptic.
  154.  
  155. +    Usability:
  156.  
  157.      OATH provides a wide set of classes.  It does not  seem
  158.      easy to use the class services provided, especially for
  159.      a beginner.  Services that you would expect to find  at
  160.      a  given level of the hierarchy sometimes are not there
  161.      and you have to go upwards through  the  tree  to  find
  162.      them, sometimes with names not directly related to what
  163.      you are using.  The services provided are not many, but
  164.      their interface is simple to use.
  165.  
  166. +    Extensibility:
  167.  
  168.      This feature was not evaluated  directly.   However,  a
  169.      brief  discussion  on  the  way  to extend the existing
  170.      class library is present in the OATH  Reference  Manual
  171.      [2] (OATH(30), section Developing New OATH Types).
  172.  
  173. +    Sensibleness:
  174.  
  175.      The available classes are perhaps too abstract. I would
  176.      have  preferred  less  abstract  and  more  "practical"
  177.      classes, but probably this would have been against  the
  178.      basic  assumptions their designers of OATH made.  Among
  179.      the, there are classes for  integers,  rational,  real,
  180.      complex.
  181.  
  182. +    Miscellaneous:
  183.  
  184.      The provided hierarchy is that of a  tree,  where  only
  185.      single   inheritance   is   supported.    No  templates
  186.      (parameterized types) are provided,  and  no  exception
  187.      handling  as well.  Garbage collection is supported and
  188.      appears to be even sophisticated in terms of the  kinds
  189.      of GC available.
  190.  
  191. 3.1.5.  Bibliography
  192. _ _ _   ____________
  193.  
  194. 1.   Brian M.Kennedy, The Features  of  the  Object-oriented
  195.      Abstract  Type  Hierarchy, Computer Systems Laboratory,
  196.      Computer Science Center, Texas  Instrument,  26  August
  197.      1991
  198.  
  199. 2.   OATH Reference Manual (OATH 0.8), 26 August 1991
  200.  
  201. 3.1.6.  NetComments
  202. _ _ _   ___________
  203.  
  204. 3.2.  COOL - C++ Object Oriented Library
  205. _ _   ____   _   ______ ________ _______
  206.  
  207. +    It is available from csc.ti.com (192.94.94.1)  in  file
  208.      /pub/COOL.tar.Z.
  209.  
  210. +    COOL can be used with the AT&T C++ translator  (cfront)
  211.      version 2.0.
  212.  
  213. +    COOL is a collection of classes, templates, and  macros
  214.      for  use  by  C++  programmers writing complex applica-
  215.      tions.  It raises the level of abstraction for the pro-
  216.      grammer  to  concentrate  on the problem domain, not on
  217.      implementing base data structures, macros, and classes.
  218.  
  219. +    Information provided by Marco Pace (MPACE@ESOC.BITNET)
  220.  
  221. 3.2.1.  Introduction
  222. _ _ _   ____________
  223.  
  224.      COOL is a collection of classes, templates, and  macros
  225.  
  226. for use by C++ programmers writing complex applications.  It
  227. raises the level of abstraction for the programmer  to  con-
  228. centrate  on  the  problem  domain, not on implementing base
  229. data structures, macros, and classes.
  230.  
  231. In  addition,  COOL  also  provides  a  system   independent
  232. software  platform  on  top of which applications are built,
  233. since COOL encapsulates such system  specific  functionality
  234. as  date/time  and  exception handling.  For a more detailed
  235. description of COOL and its features, including  a  thorough
  236. discussion  on  the rationale for the design and implementa-
  237. tion choices see [5].
  238.  
  239. 3.2.2.  Features
  240. _ _ _   ________
  241.  The class library hierarchy is  basically  forest,  but  it
  242. implements a rather flat inheritance tree.
  243.  
  244. All complex classes are derived from the Generic  class  due
  245. to space efficiency concerns.  COOL does not seem to provide
  246. multiple inheritance.  COOL's exception handling provides  a
  247. reise, handle, and proceed mechanism.
  248.  
  249. Exception and exception handling classes  are  provided  for
  250. this  purpose.   COOL  provides parameterized templates. The
  251. peculiarity of COOL is that to allow  this  it  extends  the
  252. standard  C++  preprocessor to recognize the notation intro-
  253. duced to specify templates.
  254.  
  255. In other words, the programs written using COOL are not com-
  256. piled using the standard CC, but using CCC (COOL C++ Control
  257. Program), which is an extension of the CC compiler.  It does
  258. not seem to include garbage collection.
  259.  
  260. 3.2.3.  Subclasses
  261. _ _ _   __________
  262.  The classes provided by the library are several,  and  they
  263. are listed here:
  264.  
  265.         Pair <T1,T2>
  266.         Range
  267.           Range <Type>
  268.         Rational
  269.         Complex
  270.         Generic
  271.           String
  272.           Gen_String
  273.           Regexp
  274.           Vector
  275.             Vector <Type>
  276.  
  277.               Association <Pair<T1,T2>>
  278.           List_Node
  279.             List_Node <Type>
  280.           List
  281.             List <Type>
  282.           Date_Time
  283.           Timer
  284.           Bit_Set
  285.           Exception
  286.             Warning
  287.             Error
  288.               System_Error
  289.             Fatal
  290.             System_Signal
  291.             Verify_Error
  292.           Excp_Handler
  293.             Jump_Handler
  294.           Hash_Table
  295.             Set
  296.             Hash_Table <Key,Value>
  297.               Package
  298.           Matrix
  299.             Matrix <Type>
  300.           Queue
  301.             Queue <Type>
  302.           Random
  303.           Stack
  304.             Stack <Type>
  305.           Symbol
  306.           Binary_Node
  307.             Binary_Node <Type>
  308.           Binary_Tree
  309.             Binary_Tree <Type>
  310.               AVL_Tree <Type>
  311.           N_Node <Type>
  312.           D_Node <Type>
  313.           N_Tree <Type,Node,Child>
  314.  
  315. 3.2.4.  Evaluation
  316. _ _ _   __________
  317.  
  318.      Easy to use, the services provided are really a lot.
  319.  
  320.      The extendibility has not been  tested,  although  this
  321. seems  to  be one of the feature of the library, which issue
  322. is dealt with in part of section 14 of the User Manual  (See
  323. Bibliography).
  324.  
  325.      Performance not evaluated
  326.  
  327.      It does not seem to be  supported  by  the  developers.
  328. The  installation  of  COOL  was a tragedy: several problems
  329. were found, ranging from files not found to  compile  errors
  330. to link errors, etc.
  331.  
  332. After a couple of days of trials the installation was  aban-
  333. doned,  although  a post was made to the net to see if some-
  334. body could help on that.
  335.  
  336. I got some answers after some time  and  I  found  out  that
  337. other  people  had  similar installation problems. They sug-
  338. gested some solutions which I  haven't  tried  yet.   It  is
  339. interesting  to note that the authors of COOL have written a
  340. paper on which they analyse the  lessons  learned  from  the
  341. usage  of  the  library, what they would keep of it and what
  342. they would change in its design, and so on  (See  Bibliogra-
  343. phy).
  344.  
  345. 3.2.5.  Bibliography
  346. _ _ _   ____________
  347.  
  348.      M.Fontana et al., COOL - C++  Object-Oriented  Library,
  349. Texas Instrument.
  350.  
  351. COOL User Manual, March 1990, Texas Instruments Inc.
  352.  
  353. M.Fontana & M.Neath, Checked Out and Long  Overdue:  Experi-
  354. ences in the Design of a C++ Class Library, Texas Instrument
  355. Inc.
  356.  
  357. 3.2.6.  NetComments
  358. _ _ _   ___________
  359.  
  360.      From: bergquis@gdc.com (Brett Bergquist)
  361.  
  362. Did you get the paper about COOL "Checked Out and Long Over-
  363. due:  Experiences in the Design of a C++ Class Library".  In
  364. this paper, the authors discuss the strengths and weaknesses
  365. of  the  design  of COOL.  A couple of points that they men-
  366. tioned that they would do differently would be  to  simplify
  367. the  dependencies  between  classes  by using MI.  Also they
  368. would factor out the use of the symbolic and package mechan-
  369. ism.  Performance is not mentioned as an issue.
  370.  
  371. 3.3.  LEDA - Library of Efficient Data types and Algorithms
  372. _ _   ____   _______ __ _________ ____ _____ ___ __________
  373.  
  374. +    Writen by: Stefan Naeher (stefan@mpi-sb.mpg.de)
  375.  
  376.      Anonymous    ftp     from     host     ftp.cs.uni-sb.de
  377.      (134.96.252.31) in directory pub/LEDA.
  378.  
  379. +
  380.  
  381.      -    LEDA can be used with all cfront and GNU C++  com-
  382.           pilers
  383.  
  384.      -    it is provided as source code
  385.  
  386.      -    there is no fee for non-commercial use
  387.  
  388. +    It consists of a sizeable collection of data types  and
  389.      algorithm:  this  includes stacks, queues, lists, sets,
  390.      dictionaries, ordered sequences,  partitions,  priority
  391.      queues, directed, undirected, and planar graphs, lines,
  392.      points, planes and basic algorithms in graph  and  net-
  393.      work theory and computational geometry
  394.  
  395. +    Information  provided  by   Stefan   Naeher(stefan@mpi-
  396.      sb.mpg.de) and MARCO PACE (MPACE@ESOC.BITNET)
  397.  
  398. 3.3.1.  Introduction
  399. _ _ _   ____________
  400.  
  401. 3.3.2.  Features
  402. _ _ _   ________
  403.  
  404.      LEDA is a library of efficient  data  types  and  algo-
  405. rithms. Its main features are:
  406.  
  407. a sizable collection of  data  types  and  algorithms:  this
  408. includes  stacks, queues, lists, sets, dictionaries, ordered
  409. sequences,   partitions,    priority    queues,    directed,
  410.  
  411. undirected,  and  planar  graphs,  lines, points, planes and
  412. basic algorithms in graph and network  theory  and  computa-
  413. tional geometry;
  414.  
  415. the precise and readable specification  of  data  types  and
  416. algorithms;
  417.  
  418. the inclusion of many  of  the  most  recent  and  efficient
  419. implementations;
  420.  
  421. a comfortable data type graph;
  422.  
  423. its extendibility;
  424.  
  425. its ease of use.
  426.  
  427. The library employs
  428.  
  429. a strict separation between abstract data types and the con-
  430. crete data structures used to implement them,
  431.  
  432. parameterized data types, and object oriented programming.
  433.  
  434. 3.3.3.  Classes
  435. _ _ _   _______
  436.  
  437.      The classes provided by the library  are  several,  and
  438. they are listed here:
  439.  
  440.         Simple Data Types
  441.                 Boolean (bool)
  442.                 Real Numbers (real)
  443.                 Strings (string)
  444.                 Real-valued vectors (vector)
  445.                 Real-valued matrices (matrix)
  446.         Basic Data Types
  447.                 One Dimensional Arrays (array)
  448.                 Two Dimensional Arrays (array2)
  449.                 Stacks (stack)
  450.                 Queues (queue)
  451.                 Bounded Stacks (b_stack)
  452.                 Bounded Queues (b_queue)
  453.                 Lists (list)
  454.                 Sets (set)
  455.                 Integer Sets (int_set)
  456.                 Partitions (partition)
  457.                 Dynamic collections of trees (tree_collection)
  458.         Priority Queues and Dictionaries
  459.                 Priority Queues (priority_queue)
  460.  
  461.                 Bounded Priority Queues (b_priority_queue)
  462.                 Dictionaries (dictionary)
  463.                 Dictionary Arrays (d_array)
  464.                 Hashing Arrays (h_array)
  465.                 Sorted Sequences (sortseq)
  466.                 Persistent Dictionaries (p_dictionary)
  467.         Graphs and Related Data Types
  468.                 Graphs (graph)
  469.                 Undirected Graphs (ugraph)
  470.                 Planar Maps (planar_map)
  471.                 Parametrized Graphs (GRAPH)
  472.                 Parametrized Undirected Graphs (UGRAPH)
  473.                 Parametrized Planar Maps (PLANAR_MAP)
  474.                 Node and Edge Arrays (node_array, edge_array)
  475.                 Two Dimensional Node Arrays (node_matrix)
  476.                 Node and Edge Sets (node_set, edge_set)
  477.                 Node Partitions (node_partition)
  478.                 Node Priority Queues (node_pq)
  479.         Two-Dimensional Geometry
  480.                 Two-Dimensional Dictionaries (d2_dictionary)
  481.                 Sets of Points (point_set)
  482.                 Sets of Intervals (interval_set)
  483.                 Sets of Parallel Segments (segment_set)
  484.                 Planar Subdivision (subdivision)
  485.                 Graphic Windows (window)
  486.  
  487. 3.3.4.  Evaluation
  488. _ _ _   __________
  489.  
  490.      The class library hierarchy is a forest,  and  it  does
  491. not  seem  to  provide multiple inheritance.  Some exception
  492. handling is provided, but it seems to be quite raw,  in  the
  493. sense that it usually ends with the program abortion.
  494.  
  495. However, the user can write its own error handler,  but  its
  496. function prototype has to be
  497.  
  498.         void handler(int, char*)
  499.  
  500. where the first parameter is an error number and the  second
  501. is  an error message. LEDA provides parameterized templates.
  502. It does not seem to include garbage collection.
  503.  
  504.      It is not clear whether it is supported in some way  by
  505. the  developers.   The installation of LEDA was quite simple
  506. and took a couple of hours.  One problem only was found dur-
  507. ing the execution of the makefile, namely some include files
  508. needed for the creation of the graphics library for  Sunview
  509. (in which we were not interested).  After this the test pro-
  510. grams were created without problems.  The execution  of  the
  511.  
  512. test  programs  was  carried out, but no description of what
  513. they are supposed to do and/or what input they expected  was
  514. found.   A  few  of them run without problems, others issued
  515. error messages, others aborted after a core dump.
  516.  
  517. The set of classes provided  is  quite  large,  the  classes
  518. themselves are easy to use, the services provided sufficient
  519. (although sometimes the  set  is  not  "rich"  enough),  the
  520. interface simple when the user has gone through section 1 of
  521. the User Manual [4], which explains the basics.
  522.  
  523.      The extendibility has not been  tested,  although  this
  524. seems  to  be  one  of the features of the library, on which
  525. issue a brief discussion appears in section IV of the manual
  526. (See Bibliography).
  527.  
  528.      After some time spent trying to format  the  documenta-
  529. tion  (it  is  available  only in TEX format), we managed to
  530. have it printed.  The documentation appears  to  be  linear,
  531. easy to read (as promised by the authors), concise.  It does
  532. not contain, however, examples of the way the  classes  have
  533. to be used.
  534.  
  535. 3.3.5.  Bibliography
  536. _ _ _   ____________
  537.  
  538.      S.Naeher, LEDA User Manual (Version  2.1),  Max-Planck-
  539. Institut fuer Informatik, Saarbruecken
  540.  
  541. 3.3.6.  NetComments
  542. _ _ _   ___________
  543.  
  544.