Symantec Review
Volume Number: 10
Issue Number: 6
Column Tag: Tools Of The Trade
A Review Of Symantec C++ 7.0 
Symantec’s new release is solid and feature rich
By Jess Holle, Purdue University
About the author
Jess Holle is nearing the completion of his Master's Degree in Mechanical
Engineering at Purdue University. He works as a research assistant in the Purdue
CADLAB developing CAD/CAM software in C++. His current research efforts center on
developing a 3D GD&T (that’s Geometric dimensioning and tolerancing (ala ANSI
Y14.5) for you curious types) tolerance scheme in a feature-based design
environment.
Jess uses Symantec C++ primarily to port software from Silicon Graphics
systems to the Macintosh for debugging, portability testing, and demonstration
purposes. You can reach Jess at jess@ecn.purdue.edu
In May of 1993, Symantec released Symantec C++ 6.0, a C and C++ development
environment based on its popular Think C environment. The new modular environment
included two compilers: the case-hardened Think C compiler and a native C++
compiler, which was based upon the Zortech compiler Symantec had purchased.
Finally there was a real alternative to MPW for C++ development on the Macintosh.
Unfortunately, the 6.0 C++ compiler was less than solid. The bug-fix release,
6.0.1, failed to bring the compiler in line with user expectations. On-line forums,
such as comp.sys.mac.programmer on the Usenet, were filled with complaints and bug
reports.
Symantec’s response was to enlist its most vocal detractors as beta testers for
Symantec C++ 7.0 (myself included). The result is a solid C++ development
environment with some of the best C++ debugging features on any platform.
[This review gives a brief overview of the product, but focuses mainly on the
language itself. We will bring you a review of the TCL and Visual Architect in July.
This review also only deals with the 68K product; the cross-compiler was not
available for review as of this writing - Ed stb]
In addition to 6.0’s integrated debugger, scriptable project manager, support for
external editors, integration with Apple’s SourceServer, and on-line help for the
standard C and C++ libraries, Symantec C++ 7.0 also provides:
• Improved C and C++ compilers
• Universal headers, facilitating PowerPC compatible source
• Inspector, a heap analyzer tool
• Think Class Library (TCL) 2.0, a fully C++ framework with support for
persistent objects, AppleEvents, and scripting
• Visual Architect, a visual interface builder for TCL
• AppleScript 1.1
• A 60-day money back guarantee
Symantec C++ 7.0 requires:
• 8 megabytes of RAM (12 megabytes recommended)
• System 7.0 or later in order to use all features - basic environment and
source-level debugging supported under 6.0.7 and later
• A hard drive, 17 MB for a full install or about 7 MB for a fairly minimal install
(essential tools, libraries, and headers)
Project Manager
Symantec 7.0’s Project Manager is much the same as in 6.0, with a few small
changes. Besides the addition of color, the project window, shown in Figure 1, has
remained unchanged. Source files are added to segments in the project window, and the
Project Manager keeps track of which files’ object code needs updating. Segments can
be named, collapsed, and expanded in the project window for segmentation control and
simple source organization. The production of symbolic debugging information is
controlled via toggling the bullet in the debug column. Projects can be included within
other projects as libraries and hopped into by double clicking on the included project’s
name. The integrated editor displays files selected from the project window and
contains quick links to on-line reference information, header files, and the class
browser.
One nice improvement is the New Project dialog shown in Figure 2. Any project
placed in Symantec’s Project Models folder will appear in this dialog and serve as a
stationary for new projects, retaining all of its original libraries and settings.
Figure 1 New project window and menus
A new AppleScript, which removes all files from a given segment of a project,
has been provided. This alleviates a constant source of complaint for Symantec users:
files have to be removed from a project one at a time. For large projects, this became
quite tedious. This AppleScript, along with all others placed in Symantec’s
AppleScripts folder, can now be executed through the new scripts menu seen at the far
right in Figure 1.
Figure 2 Improved New Project dialog
Other improvements include:
• Code segments that are greater than 32K can be automatically resegmented (at
file boundaries)
• The Find dialog remembers old search and replace strings
Class Browser
Symantec’s class browser now allows larger and more complex hierarchies to be
viewed. Though by no means as full-featured as source browsing products such as
Object Master, Symantec’s integrated browser provides an attractive, economical
alternative. Each class is represented as a box, with base classes shown on the left and
lines linking them to their subclasses on the right. Each box serves as a pop-up menu
of methods through which corresponding source code can be obtained. Double-clicking
on a box brings up the class’ header file. When using Symantec’s built-in editor,
option-double clicking on any method name in the source will bring up the class
browser and hilite all classes which define the method, as shown in Figure 3. I have
found Symantec’s browser to be enormously helpful when exploring huge bodies of code
and tangled class hierarchies.
Figure 3 Class Browser
Compiler Stability
The C++ compiler is drastically improved over the previous version in almost
all respects. The parsing, standards compliance, code generation, and error recovery
are significantly better than in 6.0.1. In the later stages of beta testing, the compiler
passed over 99% of the MetaWare verification suite. Quoting the release notes, “all
known code generation bugs have been fixed.” I have successfully compiled tens of
thousands of lines of C++ code (including multiple inheritance, operator overloading,
and nested classes) with Symantec C++, with only one workaround for the compiler.
All other compilers that I’ve had the opportunity to try have required changes to my