From: skdutta@ucs.att.com (Saumen Dutta)
Subject: C++ Product List - Version 2.04 - Part 8/8
Organization: AT&T Universal Card Services, Jacksonville FL
Date: Wed, 18 Nov 1992 02:32:13 GMT

5.  Tools
_   _____

     In this section we will cover  C++  tools  which  helps
developing C++ and other programs. Some of these are already
being covered in the previous chapters and are omitted here.

5.1.  Interviews Drawing Editor
_ _   __________ _______ ______

+    It   is    available    via    anonymous    ftp    from
     interviews.stanford.edu

+    On line drawing tool capable of interactive line  draw-
     ing  and  filling.  It creates a postscript file. Files
     created by Idraw can  also  be  imported.  It  supports
     split view, grouping, ungrouping etc.

5.2.  Interviews Interface Builder
_ _   __________ _________ _______

+    It   is    available    via    anonymous    ftp    from
     interviews.stanford.edu

+    Interactive Interface building tool which  creates  C++
     code  which  can  be compiled with other Libraries sup-
     plied with Interviews.

5.3.  FIELD C++/C/Pascal Development Environment
_ _   _____ _   _ ______ ___________ ___________

+    It is available from Brown University. Instructions for
     "semi-anonymous"  ftp  can be obtained by sending name,
     business   address,   phone   and   fax    number    to
     brusd@cs.brown.edu.   Alternatively,  a  request may be
     faxed to Kathleen Kirman at (401)863-7657.

+    FIELD programming environment  provides  an   extensive
     set  of  tools  for  programming  in C++, C and Pascal.
     FIELD uses the tools of the Brown Workstation  Environ-
     ment (BWE), which in turn runs on top of X11.

     Various utility tools  provided  by  FIELD  programming
     environment includes the following:

     -    C++ class browser (cbrowse).  This is more  power-
          full  when  compared  to iclass provided by Inter-
          Views.  It offers graphical  as  well  as  textual
          output.   The  drawbacks  are that it is much more
          slower than  iclass,  and  it  needs  a  lot  more
          memory.

     -    debugger. The debugger in this environment runs on
          top  of dbx or gdb.  It supports both GNU and AT&T
          compilers.

     For more information, refer to the following papers

     1.   Steven P. Reiss, "Connecting Tools  using  Message
          Passing  in the FIELD Program Development Environ-
          ment", IEEE Software, July 1990, pp 57-67.

     2.   Steven  P.  Reiss,  "Interacting  with  the  FIELD
          Environment",  Software:  Practice and Experience,
          20:S1, June 1990, pp. 89-115.

     3.   Steven P. Reiss and Scott Meyers,  "FIELD  Support
          for C++", USENIX C++ Conference Proceedings, April
          1990, pp. 293-299.

+    Information provided by Scott Meyers (sdm@cs.brown.edu)

5.4.  MTS (Memory Tuning System)
_ _   ___  ______ ______ ______

+    Platform: Unknown

+    Commercial product marketed by :
     NewCode Technology Incorporated
     200 Boston Avenue
     Medford, MA 02155

     Tel: (617) 396-3009
     Fax: (617) 395-9452

+    MTS includes a malloc interface that  guarantees  quick
     installation.  Its  use does not require any reprogram-
     ming.  It includes a report facility that  details  the
     different  types  and sizes of a programs memory usage.
     Using the report, MTS can be tuned for a  typical  pro-
     gram run.  For object oriented programs, this mechanism
     provides a memory management scheme for each  class  of
     object in use.  Using MTS, the developer is relieved of
     the need to write  specific  code  to  optimize  memory
     access.

     NewCode's MTS employs a hierarchy of memory  management
     schemes  that  are designed to fulfill the dual purpose
     of minimizing paging activity while providing very fast
     allocation  and  reuse  of  many  small and medium size
     objects.  As an in memory allocator, MTS  is  typically
     three  times  as  fast  as the standard malloc package.
     More importantly, its contribution to minimizing paging
     overhead  can  lead to dramatic improvements in overall
     program performance.

+    Information    provided    by:    Ze'ev    Mehler     (
     zeev%cybvax0@uunet.uu.net )

5.5.  Cback
_ _   _____

+    Platform:  Works with the Cfront  output.  Tested  with
     SUN3, SPARC, RS6000, DEC RISC, Interactive Unix and SCO
     Unix/Xenix on 386/486.

+    Commercial product marketed by :
     NewCode Technology Incorporated
     200 Boston Avenue
     Medford, MA 02155
     Tel: (617) 396-3009
     Fax: (617) 395-9452

+    cback is a companion product to cfront based C++ trans-
     lators.   It processes cfront C output and creates easy
     to read, smaller, faster and portable C code.

+    Information    provided    by:    Ze'ev    Mehler     (
     zeev%cybvax0@uunet.uu.net )

5.5.1.  Introduction
_ _ _   ____________

     cback is a fast, rule driven, C to C translator that in
addition to producing C code that is easy to read and under-
stand,  CAREFULLY  eliminates   unreferenced   declarations,
unreferenced static functions, redundant assignments to vptr
and performs many other cfront specific cleanups.   Each  of
cback's  rules  can be turned on or off to suit a variety of
different needs.

cback does a thorough job of  simplifying  cfront's  compli-
cated  statements and expressions.  Even complex cfront out-
put that your local C compiler might  reject,  will  compile
without  fault.  cback's  output  is  maintainable  and will
readily cross compile to systems that currently do not  sup-
port C++.  cback typically eliminates 70% of cfront's C code
output.

While debugging, cback will shrink the  overall  size  of  a
typical  application  by  40%.  Thus during development your
binary files as well as link and debugger load times will be
substantially smaller and faster. When compiling with optim-
ization, cback can also produce significant code size reduc-
tions.

cback will fit seamlessly into your compiling and  debugging
environment. Our supplied shell script will call both cfront
and cback and will work with your current  make  files.   In
addition,  cback  will recreate appropriate line numbers and
for Sun's cfront it will filter  .stab  statements  for  use
with dbx.

5.5.2.  Netcomments
_ _ _   ___________

        From: Dale Lutz (dal@mdavcr.mda.ca) on comp.lang.c++

        We used cback on a rather large development (300,000 lines of C++) and
        found it to be extremely worthwhile.  On the average, the size of
        executables and object files after using cback was one half the
        pre-cback size.  Link times were also about 1/2 what they were before.
        Of course, your mileage may vary.  In our case, you can guess it didn't
        take too long to repay our original investment.

        We were using SUN C++ 2.0 on SUN SPARCStations.

        Dale

        (Not an MDA spokesman, and not affliated with the cback maker in any way.
        Its just a great product I want other people to know about).

5.6.  Purify
_ _   ______

+    Platform:  SPARC

+    Commercial product marketed by :
     Pure Software
     1309 S. Mary Avenue
     Sunnyvale, CA 94087
     Phone: (408) 720-1600
     e-mail: info@pure.com

+    Price is $2750 for a floating license, volume  discount
     available.  Free  two-week  trial evaluation of Purify,
     which can be arranged through email.

+    Purify enables C and C++  developers  to  produce  more
     reliable  software  by  detecting  and  pinpointing the
     leading cause of  unexpected  system  failures-run-time
     errors,  both memory access errors and memory leaks. It
     makes error detection and  correction  easier,  faster,
     and  more  comprehensive.  Purify performs instruction-
     level checking on all of  the  code,  including  third-
     party  libraries, while imposing minimal run-time over-
     head, so it is practical to use on large  applications.
     By    preventing    memory   leaks,   Purify   improves

     performance, particularly for longer  running  applica-
     tions.

     Purify's run-time error detection is particularly valu-
     able  to  C++  developers,  as these programs typically
     make extensive  and  complex  use  of  dynamic  memory.
     Purify  was  reviewed  in  the  September issue of IEEE
     Software and was also chosen for an Outstanding Product
     Award by Unix Review (December 1992).

+    Information provided by: Barbara Kay ( bkay@pure.com )

5.7.  Sniff
_ _   _____

+    Written by:

     Walter R. Bischofberger
     UBILAB (UBS Informatics Laboratory)
     Union Bank of Switzerland
     Bahnhofstrasse 45
     CH-8021 Zurich/Switzerland
     Phone: (0041) 01 236 31 83 (direct)
     Fax: (0041) 01 236 46 71 (direct)
     Email: bischi@ZH010.ubs.ubs.arcom.ch

     may be ftp'ed from

     iamsun.unibe.ch (130.92.64.10)
     /pub/Sniff1.6 or C++/Sniff1.6 directory

     self.stanford.edu (36.22.0.201 or 36.22.0.41)
     /pub/sniff directory

     takeFive Software is expected to market  this  software
     in  near  future  (this  may  be the last public domain
     release of Sniff). If you do not have ftp access,  send
     $80 to

     takeFive Software GesmbH
     Jakob-Haringer-Str. 8
     5020 Salzburg
     Austria

     Tel. 0043 662 45 79 15
     Fax. 0043 662 45 79 15 6
     email: info@takeFive.co.at

     They will send you a quarter inch tape (other media  on
     request)  and  the  printed  documentation. For $20 you
     will get the printed documentation only.

+    The newest public domain release (1.6) runs on  SPARCs-
     tations  only.  It  requires OS 4.1.2 (it is not tested
     under 4.1.1) and it runs under  Open  Windows  and  X11
     (olwm,  mwm,  and twm window managers) as well as under
     SunView.

+    Sniff is  a  C++/C  programming  environment  providing
     browsing,  cross-  referencing,  design  visualization,
     documentation, and editing support. It delegates compi-
     lation  and  debugging to any C++ compiler and debugger
     of choice.

     The main goal in developing  Sniff  was  to  create  an
     efficient  portable  C++  programming environment which
     makes it possible to edit  and  browse  large  software
     systems  textually  and  graphically. Much emphasis was
     laid on runtime and memory efficiency and on a comfort-
     able user interface.

+    Information  provided  by   Walter   R.   Bischofberger
     (bischi@ZH010.ubs.ubs.arcom.ch)

     Most of the information given below is written  by  the
author and is copied from a README file from Sniff distribu-
tion.

5.7.1.  History and Future
_ _ _   _______ ___ ______

     Sniff was developed in the research laboratory  of  the
Union  Bank  of  Switzerland (UBS) where it has been used on
its own development for about one year.

     Two public domain beta  releases  of  Sniff  have  been
available  for  some months. These releases were applied for
professional software development at several places.

     This is the announcement of release 1.6. Version 1.6 is
the last public domain release. It has lost the beta.

     Now that Sniff is almost finished I want to free myself
from  the  time  consuming porting, support, and maintenance
chore. For this reason UBS  cooperates  with  takeFive  -  a
Salzburg based software house - which will produce the first
commercial release of Sniff until  end  of  year.  A  prere-
quisite  for  this  cooperation  is  that  universities  get
further commercial releases of Sniff  almost  for  free  and
research  laboratories  will  get Sniff at a fraction of the
commercial price.

5.7.2.  Main Tools
_ _ _   ____ _____

     A running version of Sniff consists  of  two  operating
system processes, the information extractor and the program-
ming environment itself. The information extractor  can  run
locally  or on any node of a network. Its task is to extract
information about  definitions  and  declarations  from  the
source code.

     The programming environment consists  of  a  number  of
tools  which are organized around a kernel consisting of the
symbol table and the project manager. Both the symbol  table
and   the  project  manager  organize  information  in  main
storage, which is used by browsers and editors.

     The symbol table manages the information  about  symbol
definitions and declarations and the project manager manages
the information about open projects such as the source files
they consist of and various attributes.

5.7.3.  Information Extraction
_ _ _   ___________ __________

     Sniff's information extractor is a  fuzzy  C++  parser.
This  means  that  it  understands enough about C and C++ to
extract the information of interest without having to under-
stand  C++  completely.  This  approach makes it possible to
parse every file only once without  including  header  files
and expanding macros.

     Not  expanding  macros  is   somewhat   controversially

because  it  could result in a loss of information if macros
are used to change C++ syntax or semantics. Experience shows
that  this  is  no  problem.  Until now no user of Sniff has
informed us about macro expansion  problems.  Not  expanding
macros  means  that  the  symbolic  information  corresponds
exactly to the locally visible source  code.  This  is  fre-
quently  an  advantage, for example, when macros are used to
put unique prefixes in front of all class names.

     Sniff's  information  extractor  extracts   information
about  declarations and definitions of C++ language elements
and macros. It does not extract information about the  usage
of symbols. This information is extracted on the fly.

5.7.4.  Information Updating
_ _ _   ___________ ________

     If the source code of a project is edited the  informa-
tion  about  the location of the affected symbols is updated
immediately. On saving a file its  symbolic  information  is
extracted  anew  and all browsing tools are updated. A user,
therefore, works always with symbol based  tools  presenting
him  information  that  correctly  mirrors  the  source code
without ever having to  bother  about  the  effects  of  his
changes.

     Sniff can not know when a source file was changed  with
another  tool  while its symbolic information was loaded. In
this case the developer has to tell Sniff to update its sym-
bol table.

5.7.5.  Project Concept
_ _ _   _______ _______
 To start working with Sniff a developer  has  to  define  a
project. I.e., the source files it contains and eventually a
set of subprojects which can be  shared  among  projects.  A
subproject is a complete project on its own.

     A typical project structure for a program building on a
class  library is to have a root project containing the pro-
ject specific source files an to load the library project as
subproject.  Library  projects  are frequently trees of pro-
jects themselves.

     Whenever a project is opened or when a file or  a  sub-
project  is  loaded into the current project its source code
is analyzed and the information about  the  symbols  defined
therein is stored in Sniff's symbol table.

5.7.6.  Browsers and Editors
_ _ _   ________ ___ _______

     Once a new project is defined with the  Project  Editor
or  an  existing  project  is  opened  it can be browsed and
edited in different ways.

+    The Symbol Browser can be  used  to  gain  an  overview
     about  which  symbols are defined in the source code or
     it displays the results  of  queries  sent  from  other
     tools  such  as which symbols exist, the names of which
     match "X".

+    The Class Browser can be used  to  browse  through  the
     locally defined and inherited members of a class.

+    The Hierarchy Browser can be used to display the  class
     graph  and  to  visualize  queries  such  as  "mark all
     classes declaring method X".

+    The Retriever can be used to obtain  information  about
     where  a  certain  symbol  is  used  in the source code
     (i.e., cross reference information). The Retriever is a
     text search based tool. It makes it possible to extract
     all occurrences of strings matching the name of a  sym-
     bol  (or  any regular expression) in a set of projects.
     The matches can then be further restricted with  seman-
     tic  filters.  The  Retriever provides therefore a much
     more powerful query facility  than  conventional  cross
     referencing tools.

+    Sniff's comfortable mouse driven  WYSIWYG  Editor  pro-
     vides several kinds of browsing support and it automat-
     ically highlights  structurally  important  information
     such as class names, method names, and comments. Once a
     source file was modified it is possible to trigger  its
     compilation  from  the  editor  and  to mark the source
     lines where  the  compiler  found  syntax  errors.  The
     current  version  of  Sniff  does  not provide an emacs
     interface. Because of the flood  of  requests  we  will
     provide emacs support with one of the next versions.

5.7.7.  Efficiency
_ _ _   __________

     The loading of a project with  100,000  lines  of  code
takes  on a SPARCstation2 about 20 Seconds. Sniff needs with
100,000 lines of code loaded between 5 and 8 MB main storage
(depending  on  how  many tools are open). For every further
100,000 lines of code 3 to 4 MB are needed.

     For a project  with  100,000  lines  of  code  Symbolic
queries (e.g., show all classes the names of which contain a
certain string) can be answered in less than a second. Cross
reference  queries based on text search are answered in less
than three second (once Sniff's internal cache  is  loaded).
The  most frequent cross reference queries are even answered
in less than a second.

5.7.8.  Acknowledgements
_ _ _   ________________

     My sincere thanks go to the Union Bank  of  Switzerland
that gave me the freedom and founding which made it possible
to develop Sniff and to distribute it in the public domain.

     The development of Sniff would not have  been  possible
without  the  ET++  application framework and the support of
its developers Erich Gamma and Andre Weinand.

     A good user interface has to grow.  Thanks  to  all  my
colleagues  who  have  been  working  with Sniff for several
months giving me the feedback I needed.

5.7.9.  References
_ _ _   __________

     Sniff is already used for large scale software develop-
ment at several locations. For example:

     At UBS a team of twelve  software  developers  switched
within  two  days from their commercially available program-
ming environment to  the  first  public  domain  release  of
Sniff. They are working on a large portfolio management sys-
tem written in C++ which interfaces with a relational  data-
base system.

     At MacDonald Dettwiler  and  Associates,  a  commercial
software house, seven developers are using Sniff on software
systems with up to 250,000 lines of source code and they are
happy with Sniff's responsiveness and user interface.

6.  Products
_   ________

     This section will discuss various c++ products. It will
also  cover  some of the c++ products which could not be put
into the previous three categories.

6.1.  uC++
_ _   __

+    may be ftp'ed from

     watmsg.uwaterloo.ca (129.97.141.9)
     pub/uSystem/u++-3.4.4.tar.Z

+    uC++ runs on the  following  processors:  M68K  series,
     NS32K series, VAX, MIPS, Intel 386, Sparc, and the fol-
     lowing UNIX operating systems:

     -    generic BSD 4.3

     -    Sun OS 4.x

     -    Tahoe BSD 4.3

     -    Ultrix 3.x/4.x

     -    DYNIX

     uC++ requires at least GNU C++ 2.2.  uC++ will NOT com-
     pile  using other compilers. To run multiprocessor on a
     Sequent GNU C++ must  use  the  Sequent  assembler  and
     loader.

+    Augments C++ to allow  control  flow  for  light-weight
     concurrency  on  uniprocessor  and  multiprocessing  on
     parallel processor.

+    Information    provided    by    Rick     Stroobosscher
     (rastroob@plg.uwaterloo.ca)

     Most of the information given below is written  by  the

author  and  most of it is copied verbatim from a posting in
comp.lang.c++.

6.1.1.  Introduction
_ _ _   ____________

     We are pleased to announce, to any interested  parties,
the  availability  of  Version  3.4.4  of  uC++  (pronounced
micro-C++).  uC++ extends the C++  programming  language  in
somewhat  the  same  way  that C++ extends the C programming
language.  The extensions introduce new objects that augment
the  existing set of control flow facilities and provide for
light-weight concurrency on uniprocessor and parallel execu-
tion  on multiprocessor computers running the UNIX operating
system.  uC++ is not another thread package built on top  of
C++,  but  a  comprehensive  set of language extensions that
integrate the notions of  coroutine,  mutual  exclusion  and
concurrent execution into the language.

6.1.2.  Features
_ _ _   ________

1.   The uC++ translator may fail when given very bad syntax
     errors.   The error recovery facilities of the transla-
     tor will be updated in version 4.  Also, the translator
     is  vulnerable  to programs that use the same names for
     types and routines.  Beware of this vulnerability.   It
     may show up in very subtle errors.

2.   The "inline" version of the runtime environment is  not
     working  in this release, so that performance is signi-
     ficantly slower than it can be. When the "inline"  ver-
     sion  is  working,  performance  is  comparable  to any
     light- weight tasking system.

3.   The only  multiprocessor  computer  supported  in  this
     release   is   the  Sequent  Symmetry.  Ports  to  more
     vendor/machines will appear shortly.

6.1.3.  Requirements to run uC++
_ _ _   ____________ __ ___ __

     uC++ requires at least version 3.8 of dmake,  which  is
available  by  anonymous  ftp  from  the  following location
(remember to set your ftp mode to binary):

     watmsg.uwaterloo.ca                      (129.97.141.9)
pub/dmake/dmake38.tar.Z

     Execute the following command to unpack the source:

     % zcat dmake38.tar.Z | tar -xf -

     To  build   dmake,   edit   the   variables   in   file
./1/startup.h.   The  variable  MAKESTARTUP must specify the
location of the startup.mk  file,  which  contains  all  the
implicit  recipes.   This file is placed at the top level of
the source directory after dmake is built.  If dmake is  not
being  installed in a public location, set the value of MAK-
ESTARTUP to dmake-source-path/startup.mk.  After setting the
MAKESTARTUP  variable, execute the command make in directory
dmake to determine what  configurations  are  available.   A
list of possible configurations will be printed.  Once dmake
is built, add the executable to your command path.

     The  current  version  of  uC++  can  be  obtained   by
anonymous  ftp  from the following location (remember to set
your ftp mode to binary):

     watmsg.uwaterloo.ca  (129.97.141.9)    pub/uSystem/u++-
3.4.4.tar.Z

     Execute the following command to unpack the source:

     % zcat u++-3.4.4.tar.Z | tar -xf -

     To build uC++, edit the variables in  file  ./Makefile.
The  variable  ROOT must specify the current location of the
uC++ source (the path to the  directory  that  contains  the
source).   The  variable BINDIR specifies the location where
the u++ executable and other executables needed for compila-
tion are placed.  The LIBDIR variable specifies the location
for the u++ runtime libraries.  Both BINDIR and LIBDIR  have
default  values.   After setting at least the ROOT variable,
execute the command dmake in  this  directory  to  determine
what  configurations are available.  A list of possible con-
figurations will be printed.

     After installation is complete, there will be a  number
of  executables  created  in  the BINDIR location.  Add this
directory to your command path  to  access  the  compilation
command  u++,  or move the u++ executable itself to a direc-
tory in your command path.  Do not move  the  other  execut-
ables in BINDIR, as the u++ executable references these exe-
cutables and the runtime library via hard coded  path  names
set at installation time.

     A postscript version of the uC++  reference  manual  is
available  in  the  same  ftp  directory as u++-3.4.4.tar.Z,
called u++-3.4.4.ps.  It contains a copy of the  uC++  docu-
mentation  that  has  been formatted for 8.5x11 paper.  This
file has been made available because some  people  have  had
problems LaTeXing the documentation that comes with the uC++
distribution.  Normally, it is unnecessary to retrieve  this
file  as  uC++ comes with the latex source for the reference
manual.

6.1.4.  References
_ _ _   __________

     There is a Software-Practice and Experience paper about
uC++  Version  2.0  in  the Feb 1992 issue. Note, there have
been many changes from version 2 to 3,  and  there  will  be
more changes from version 3 to 4.

     uC++ is being used daily  to  build  highly  concurrent
access  methods  for  persistent file structures (databases)
here at Waterloo.

6.1.5.  Future Enhancements
_ _ _   ______ ____________

     What's coming in uC++ Version 4:

-    inline version of kernel

-    visualization of concurrent execution

-    multiprocessor ports to SGI, Encore

-    uWait and uSignal as members of uCondition

-    port to IBM 6000

-    task priorities

-    exception handling

-    improve translator, make more robust

-    time out on I/O calls

     We hope to have some of this done by  the  end  of  the
year.
Newsgroups: comp.lang.c++