home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / lang / cplus / 16483 < prev    next >
Encoding:
Text File  |  1992-11-17  |  18.6 KB  |  490 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 5/8
  5. Message-ID: <1992Nov18.022826.624@ucs.att.com>
  6. Organization: AT&T Universal Card Services, Jacksonville FL
  7. Date: Wed, 18 Nov 1992 02:28:26 GMT
  8. Lines: 480
  9.  
  10. 3.4.  NIHCL - National Institute of Health Class Library
  11. _ _   _____   ________ _________ __ ______ _____ _______
  12.  
  13. +    Available   via   anonymous   ftp   from    alw.nih.gov
  14.      (198.231.128.251) in file pub/nihcl.tar.Z.
  15.  
  16.      Chuck Noren's modification  to  work  with  ObjectStore
  17.      OODBMS   is  also  available  via  anonymous  ftp  from
  18.      alw.nih.gov in file MartinNihcl3-101.tar.Z.
  19.  
  20. +    The NIH Class Library is intended to be portable  to  a
  21.      UNIX   system   compatible  with  either  System  V  or
  22.      4.2/4.3BSD and which supports the AT&T  C++  translator
  23.      Release 2.00, Release 2.1, or other compatible C++ com-
  24.      piler.
  25.  
  26.      The library has been tested by  the  authors  on  Sun-3
  27.      with  SunOS 3.5, Sun-3 with SunOS 4.0 and on Sun-4 with
  28.      sunOS 4.0.
  29.  
  30. +    Information provided by Marco Pace (MPACE@ESOC.BITNET)
  31.  
  32. 3.4.1.  Introduction
  33. _ _ _   ____________
  34.  
  35.      NICHL (pronounced either N-I-H-C-L or "nickel")  imple-
  36. ments  abstract  data  types that have been designed to sim-
  37. plify object-oriented programming  using  C++.  It  contains
  38. generally useful data types, such as String, Date, and Time,
  39. and it provides a set of classes similar to the Smalltalk 80
  40. collection  classes  including OrderedCltn (indexed arrays),
  41. LinkedList (singly linked lists),  Set  (hash  tables),  and
  42. Dictionary (associative arrays).
  43.  
  44. 3.4.2.  Features
  45. _ _ _   ________
  46.  Classes  Process,  Scheduler,  Semaphore,  and  SharedQueue
  47. implement multiprogramming with coroutines.
  48.  
  49. The set of Vector classes and a handful of  others  such  as
  50. Random   (random  number  generator)  and  Range  (range  of
  51. integers)  assist  in  various  kinds  of   arithmetic   and
  52. mathematical  problems.  NIHCL includes an object I/O facil-
  53. ity in its class implementation which can make program-  and
  54. machine-independent  representations  of arbitrarily complex
  55. data structures  comprising  NIH  Library  and  user-defined
  56. objects.
  57.  
  58. Client applications can then save these  representations  on
  59. disk files or move them between programs running on the same
  60. or different (via network) machines.  For  a  more  detailed
  61. description of NIHCL and its features see [8].
  62.  
  63. 3.4.3.  Classes
  64. _ _ _   _______
  65.  The classes provided by the library are several,  and  they
  66. are listed here:
  67.  
  68.         NIHCL
  69.           Object
  70.             Bitset
  71.             Class
  72.             Collection
  73.               Arraychar
  74.               ArrayOb
  75.               Bag
  76.               SeqCltn
  77.                 Heap
  78.                 LinkedList
  79.                 OrderedCltn
  80.                   SortedCltn
  81.                     KeySortCltn
  82.                 Stack
  83.               Set
  84.                 Dictionary
  85.                   IdentDict
  86.                 IdentSet
  87.             Date
  88.             FDSet
  89.             Float
  90.             Fraction
  91.             Integer
  92.             Iterator
  93.             Link
  94.               LinkOb
  95.               Process
  96.                 HeapProc
  97.                 StackProc
  98.             LookupKey
  99.               Assoc
  100.               AssocInt
  101.             Nil
  102.             Point
  103.             Random
  104.             Range
  105.             Rectangle
  106.             Scheduler
  107.             Semaphore
  108.             SharedQueue
  109.             String
  110.               Regex
  111.             Time
  112.             Vector
  113.               BitVec
  114.               ByteVec
  115.               ShortVec
  116.               IntVec
  117.               LongVec
  118.               FloatVec
  119.                       DoubleVec
  120.           OIOifd
  121.  
  122.           OIOin
  123.             OIOistream
  124.               OIOninhin
  125.           OIOofd
  126.           OIOout
  127.             OIOostream
  128.               OIOninhout
  129.           ReadFromTbl
  130.           StoreOnTbl
  131.  
  132. Note that, in addition to the normal general-purpose classes
  133. that  are  found in other libraries as well you find a sema-
  134. phore class, I/O classes, a process class  and  a  scheduler
  135. class.
  136.  
  137. 3.4.4.  Evaluation
  138. _ _ _   __________
  139.  
  140.      The hierarchy provided by NIHCL  is  that  of  a  tree.
  141. Multiple inheritance is optionally supported (i.e. NIHCL can
  142. be compiled to support multiple inheritance if desired).  No
  143. parameterized  types (templates) are provided, although they
  144. can be implemented using macros (as [8] suggests in  section
  145. "Parameterized types in the NIH class library").  An experi-
  146. mental exception handling mechanism is  provided  by  NIHCL,
  147. although  the  authors  of the library suggest not to use it
  148. since it is unsafe and inefficient.  Garbage  collection  is
  149. not implemented.
  150.  
  151. NIHCL is documented (see bibliography), which is a  book  in
  152. data  abstraction  and  object  oriented  programming in C++
  153. within whose  framework  the  class  library  is  described.
  154. Therefore  the documentation has not the form of a reference
  155. manual, but it provides a short description of the different
  156. classes  with some examples.  This approach has the drawback
  157. that when you are developing code and you already have  some
  158. knowledge of the library you would probably use more profit-
  159. ably a real reference manual.
  160.  
  161.      No idea whether it is supported or not.
  162.  
  163. 3.4.5.  Bibliography
  164. _ _ _   ____________
  165.  
  166.      K.E.Gorlen et al., Data Abstraction and Object-Oriented
  167. Programming in C++, 1990, Wiley
  168.  
  169. 3.4.6.  NetComments
  170. _ _ _   ___________
  171.  
  172.      From: Chuck Noren <noren@pogo.den.mmc.com>
  173.  
  174. I have been a big user of NIHCL.  Its not the  most  elegant
  175. library,  but  there  are  some  big advantages in using it.
  176. With any PD library, such as COOL (I have not looked at it),
  177. you will find warts and major flaws.  I have found this with
  178. NIHCL.  However, what I did find was that I could get  major
  179. parts of the project going sooner than if I had to develop a
  180. class library myself.  The "buyer" must  beware  on  any  of
  181. this  stuff,  for  there will be hidden costs.  The first is
  182. some bugs in the library without vendor support.  You  might
  183. get  some support from USENET, but if you really start using
  184. these packages you will find that you have become one of the
  185. "experts".  You will need to develop your in house expertise
  186. with some enthusiastic "hackers" who love to play with these
  187. kind  of things and track down bugs as they are found.  I've
  188. been an enthusiastic hacker of NIHCL for our group and modi-
  189. fied  it  to work with the Object Oriented Database (Object-
  190. Store from Object Design, Inc.).
  191.  
  192. Personally, I would consider buying a class library (such as
  193. the  Booch Componants) before getting a free copy of a class
  194. library from from a private company (NIHCL is from the  U.S.
  195. Govt).   I take a cynical (and possibly wrong) view of this.
  196. If a private company has a REALLY GOOD class  library,  they
  197. may  be  hesistant  to  make it freely available, because it
  198. becomes something they could sell or use  as  a  competetive
  199. advantange against other companies.  While we have just made
  200. our version of NIHCL Public Domain, we have  kept  back  the
  201. really  good classes we've developed so that our company can
  202. compete better against others. (I  would  personally  rather
  203. share  more  software for sharing really benifits everybody,
  204. but I was lucky to convince my company just to let our modi-
  205. fied NIHCL go, because we would not get anyone to buy it and
  206. others will have modified their copy's of NIHCL soon to work
  207. with an OODBMS anyway).  The Booch componants cost well less
  208. than $1000 (and you get source plus the reputation of a com-
  209. pany behind it) and will save thousands in development time.
  210. Even NIHCL is worth considering.  From experience,  its  not
  211. as  slow  as  some  people make out.  It does go against the
  212. "C++ philosophy" in some respects, but  it  does  have  some
  213. advantages  that  fit well in some projects.  I feel that no
  214. current library will address all the needs off all  applica-
  215. tions.   Certainly NIHCL does not (and COOL, although I have
  216. not seen it).  But some projects  will  fit  well  with  the
  217. various libraries (ours fit with NIHCL very well).  But also
  218. be forwarned, getting a class library is like getting a  new
  219. langauge, there is one hell of a learning curving, but it is
  220. well worth it.
  221.  
  222.      From: Chuck Noren <noren@pogo.den.mmc.com>
  223.  
  224. > What would you consider are NIHCL's strengths?  Perhaps  a
  225. full,
  226. > coherent system of objects?  Relatively  stable  and  bug-
  227. free?
  228. > Somewhat standardized because many people use it?  How  is
  229. it's
  230. > support for things like graphics and mathematics?
  231.  
  232. NIHCL's strengths:
  233.  
  234. 1.   Provides a coherent system  of  objects  (I  like  your
  235.      words).   There  are  collections,  date/time  classes,
  236.      variety of scaler types,  string  classes,  and  light-
  237.      weight  processing.  Almost all the classes work inter-
  238.      changeably in the various collections,  such  as  sets,
  239.      bags,  dictionaries.  You can use a string as an key to
  240.      a dictionary, as well as time, date, even another  col-
  241.      lection.
  242.  
  243. 2.   It is relatively bug free and stable.  We have  encoun-
  244.      tered  very  few bugs, and most of them dealt with bugs
  245.      in the particular C++ compiler we were using.
  246.  
  247. 3.   A fair number of people are using it.  You  can  appeal
  248.      to  the  Internet  and get timely help on questions and
  249.      problems.  Keith Gorlen himself (one of the authors  of
  250.      NIHCL) will assist time to time.
  251.  
  252. 4.   Run time type identification.  While this is not always
  253.      useful  or  even  advantagous to use, there are certain
  254.      times when run time type identification greatly simpli-
  255.      fies  the  design and use of certain capabilities.  One
  256.      of these is being able  to  send  heterogenious  Inter-
  257.      Process  Communication objects.  Sometimes applications
  258.      need truely dynamic objects at run time (e.g., in  some
  259.      database  applications or applications where the opera-
  260.      tor needs to manipulate and create lots of  very  flex-
  261.      able objects).  [soap box: this feature would be useful
  262.      in the C++ language itself,  in  certain  very  limited
  263.      situations,  but  one reason it is not included is that
  264.      programmers would be tempted to abuse it.  I feel  that
  265.      the  philosophy  of  C and C++ is to give you the power
  266.      and you are responsible to learn how to use it right.]
  267.  
  268. 5.   "Safe" virtual base castdowns.  These  classes  can  be
  269.      used  in a multiple inheritence design (again, this has
  270.  
  271.      limited use in good designs, but when you need it,  its
  272.      very  useful!).   There  is  a consistent set of member
  273.      functions that allow you to safely castdown from a vir-
  274.      tual  base  class  pointer  to a derived class pointer.
  275.      Normally you want to use the  virtual  member  function
  276.      mechanism,  but  in  certain  limited situations (e.g.,
  277.      where you are forced to use  heterogenous  collections)
  278.      this can be very useful.
  279.  
  280. 6.   Support for shallow and deep copies.  If you follow the
  281.      discipline  of NIHCL classes, your objects will be able
  282.      to de shallow and deep copies of itself and all of  its
  283.      member  pointers.   Previously  copied  objects will be
  284.      handled "automagically".
  285.  
  286. 7.   Stream and  file  I/O.   You  can  use  the  NIHCL  I/O
  287.      features  to make a "poor man's database".  If you fol-
  288.      low the NIHCL discipline, all your objects can be writ-
  289.      ten  to a flat file (and read in) very easily.  You can
  290.      also send your objects via  Inter-Process  Communcation
  291.      (IPC) very easily.  All you have to do is create a sim-
  292.      ple IPC mechanism.
  293.  
  294. 8.   A variety of polymorphic heterogenous collections.
  295.  
  296. 9.   Good documentation.  First, understand  that  there  is
  297.      never  enough  documentation in any package!  But given
  298.      this, Gorlen and company have published a book and have
  299.      a good reference manual on the class library.
  300.  
  301. 10.  Complete source code.
  302.  
  303. 11.  Portable code.  It can be built on a  wide  variety  of
  304.      systems with a wide variety of C++ compilers.
  305.  
  306. 12.  No copyright or license (but beware of Regex).  All  of
  307.      the NIHCL library is public domain except Regex.  There
  308.      is some controversy about Regex (since it has  the  GNU
  309.      Copyleft  agreement).   Some,  like  myself believe the
  310.      simple removal of Regex gets around the Copyleft  prob-
  311.      lem.   Others say that is not enough.  Check your legal
  312.      counsel to be sure.
  313.  
  314.      There are some disadvantages  to  NIHCL,  to  be  sure.
  315. However  there has been a lot of NIHCL bashing around.  As I
  316. stated,  no  class  library  is  a  perfect  fit  for  every
  317.  
  318. application  and  care  should  be  taken not to force fit a
  319. class library into an application not well  suited  for  it.
  320. Some disadvantages of NIHCL include:
  321.  
  322. 1.   Name  clashes  with  existing  libraries.   Names  like
  323.      "Object",  and  "String" are used in other places (such
  324.      as X-Windows and Motif).  We had to modify our copy  of
  325.      NIHCL  so  that  the  classes  were  prepended with the
  326.      letters "Nih", so  Object  and  String,  for  instance,
  327.      became  NihObject  and  NihString.  This eliminated the
  328.      clash.  There was a close call with the typedef of bool
  329.      in  NIHCL,  since X-Windows/Motif have a Bool, but for-
  330.      tunatly the case is  different.   New  class  libraries
  331.      should consider how they can minimize name clashes.
  332.  
  333. 2.   The polomorphic single class hierarchy style of classes
  334.      evades  compile  time  type  checking.  This means your
  335.      bugs are caught more often in run time than if you  had
  336.      a  librayy  which  used the derived classes more often.
  337.      This is a trade-off.  The single class  hierarchy  pro-
  338.      vides a number of advantages, but at a cost.
  339.  
  340. 3.   A class ultimately derived from the NIHCL Object  class
  341.      (which  is every class) cannot be defined as a template
  342.      class.  This does  not  prevent  you  from  having  its
  343.      member  be  intances of template classes (which we have
  344.      done a number of times).  There are many  reasons  this
  345.      cannot  be  done, part of which is the dynamic run time
  346.      type  identification  mechanism.   Again,  there  is  a
  347.      trade-off.
  348.  
  349. 4.   There are some single-theaded (non-reentrant)  sections
  350.      of  code (such as in the deep copy mechanism).  This is
  351.      something to watch for in any class library.
  352.  
  353. 5.   The NIHCL discipline.  Many people thing  of  NIHCL  as
  354.      hard  to  work with and hard to learn.  This is in part
  355.      due to the things you must do in creating  a  class  to
  356.      work  inside the NIHCL framework.  However, the discip-
  357.      line is not that difficult, and following it  pays  off
  358.      with NIHCL's advantages.
  359.  
  360. 6.   Some execution inefficiencies.  Due to the  polymorhic,
  361.      single inheretence style of NIHCL, some things are done
  362.      that other class libraries would avoid (such  as  cast-
  363.      down and checking an object's type before proceeding to
  364.  
  365.      do what you want in some of the code).  This does  cost
  366.      some  execution  overhead, but we found for us that the
  367.      library is fast enough).   Again,  these  are  tradeoff
  368.      issues.
  369.  
  370.      From: Chuck Noren <noren@pogo.den.mmc.com>
  371.  
  372. I forgot to answer a couple of questions...
  373.  You also asked if NIHCL provided good graphics
  374.  support and math support.  The answer is no on
  375.  both counts.  We evaluated InterViews over a year
  376.  ago and rejected it (because we were familiar
  377.  with X-Windows and want to hack it directly).
  378.  NIHCL does provide some vector classes which we
  379.  have not looked at because I could not get them
  380.  to build with an older version of our compiler.
  381.  NIHCL doesn't have any math matrix classes and
  382.  some of the other useful mathematics classes.
  383.  
  384. 3.5.  ObjectPM  OS/2 PM Class Library
  385. _ _   ________  __ _ __ _____ _______
  386.  
  387. +    Platform OS/2
  388.  
  389. +    Commercial Product from Objective Solutions
  390.      Cleveland, OH
  391.      Phone: (216) 292-2546
  392.  
  393. +    Support for OS/2 1.3 now, OS/2 2.0 in beta now Supports
  394.      Zortech C++, Glockenspiel (?) Will support JPI TopSpeed
  395.      C++ in OS/2 2.0 version Contact vendor for  other  sup-
  396.      ported compilers
  397.  
  398. +    Price is $499 L, $369 at Programmer's Connection Source
  399.      ce version is $1,000 US available from vendor
  400.  
  401. +    Seems to be a mature product with support for  threads,
  402.      and has (I believe) an interface builder.
  403.  
  404. +    Information      provided      by      Barry       King
  405.      (bking@ersys.edmonton.ab.ca)
  406.  
  407. 3.6.  zApp, DOS and Windows Portable Class Library
  408. _ _   ____  ___ ___ _______ ________ _____ _______
  409.  
  410. +    Platform DOS
  411.  
  412. +    Commercial Product from Inmark Development Corporation
  413.      2065 Landings Drive
  414.      Mountain View, CA 94043
  415.      (415) 691-9000
  416.      (415) 691-9099 (FAX)
  417.      (415) 691-9990) BBS  -  downloadable demo
  418.  
  419. +    Supports MSC++, BC++ 2.0 & 3.0, ZTC++ maybe others.
  420.      $195 US for object modules, $295 US for source license
  421.  
  422. +    An evolving product which based in  single  inheritance
  423.      classes.   Subclasses  controls  from  resource info at
  424.      run-time, supports Windows GDI,can set  event  handlers
  425.      for  buttons.  Not a bad product but may not be as com-
  426.      plete as some others on the market.  Oh yeah,  has  XVT
  427.      support, I think...
  428.  
  429. +    Information      provided      by      Barry       King
  430.      (bking@ersys.edmonton.ab.ca)
  431.  
  432. 3.7.  Interviews Class Library Version 3.01
  433. _ _   __________ _____ _______ _______ _ __
  434.  
  435. +    Platform: Requires X-Windows and cfront at least 2.1
  436.  
  437. +    InterViews is an excellent GUI class library  developed
  438.      by Stanford University.
  439.  
  440. +    Developed my Mark Linton and his team.
  441.  
  442. +    ftp  from  interviews.stanford.edu.  Version   3.1   is
  443.      scheduled  to  be  released on june 15 1992. There is a
  444.      separate newsgroup for sharing experiences with  inter-
  445.      views comp.windows.interviews.
  446.  
  447. 3.8.  Menuet III
  448. _ _   ______ ___
  449.  
  450. +    Platform: DOS and Borland C++
  451.  
  452. +    Commercial Software available from:
  453.      Autumn Hill Software
  454.      1145 Ithaca Drive
  455.      Boulder, Colorado 80303
  456.      Voice: 303-494-8865
  457.      FAX:   303-494-7802
  458.      BBS:   303-494-8868
  459.  
  460.      or in Europe:
  461.  
  462.      Murray Communications Ltd
  463.      53 Harrowby Lane
  464.      Grantham
  465.      Lincs
  466.      NG31 9HZ
  467.      Tel: 44-476-74108
  468.      Email: pmurray@cix.compulink.co.uk
  469.  
  470. +    No idea on price
  471.  
  472. +    They send out free demo disks if you would like to take
  473.      a  look at it. It's small, yet full featured, and works
  474.      with Borland C++.
  475.  
  476. +    Information provided by joe@proto.com
  477.  
  478. 3.8.1.  NetComments
  479. _ _ _   ___________
  480.  
  481.      From: bennett@math.ksu.edu (Andrew G. Bennett)
  482.  
  483.      This package  was  found  too  inflexible  by  the  one
  484. respondant who mentioned it. They had difficulty getting the
  485. GUI to interact with their application  on  the  level  they
  486. wanted.  The  respondant also noted this flaw appeared to be
  487. present in graphic-Menu as well,  though  they  hadn't  used
  488. that system.
  489.  
  490.