[net.micro.atari16] Mark Williams C - A Review

wampler@unmvax.UUCP (Bruce Wampler) (10/22/86)

		Mark Williams C for the Atari ST - A Review

	Mark Williams has released an EXCELLENT C for the ST.  (C for
the Atari ST, Version 1.1, Mark Williams, 1-800-MWC-1700, $180).

	My first reaction upon receiving my compiler was a REAL C
working environment at last!  It comes with a shell program (the
WEAKEST part of the package) that supports a unix like cc compile
sequence.  It has environment variables that tells cc where
the various parts are (cpp, c0, libraries, etc.).  It knows all about
paths, and is EASY EASY EASY to use, unlike the developers C.

	Included with the package are a large number of Unix-like
utilities: ar-archiver/librarian; as-assembler; cat; cmp-compare files;
crashdmp-atari crash analyzer; db-symbolic debugger (looks good, and
has usable documentation, unlike sid in developer's); df-disk free space;
diff; drtomw-convert dri to mw; egrep-pattern matcher, reasonably fast!;
help-almost like man!; ls-lots of directory options; make; me-micro emacs;
mf-free ram; nm-prints symbol tables; od-dump utility; pr-print;
size-size of a file; sort; strip-remove debugger info from .prg files;
tail.

	The most sorely lacking utility is more.  REALLY needed, but if
you are fast with ^S....  Their shell is also not as good as you
might hope for.  The script language is a bit weak.  For example,
if you don't define one of the parameters ($1, $2, etc., just like
Unix), it chokes.  There are no if or shift operators to avoid
the problem.  The history mechanism is also crummy - it work realtive
to the current command, so you do '!-3' to re-do the 3rd previous
command.  Who remembers what they did 3 commands ago, or wants to
count lines.  Oh well, I hear that Breckmeyer is supposedly working
with Mark Williams to settle on a common environment organization, which
is essential to smooth operation of cc.

	Documentation is excellent, although it appears to be a bit
behind of the actual code (I have C Version 1.1).  A few missing
options (which you see in the usual Unix "usage" fashion anyway),
some missing error messages.  The documentation is a thick (650+ pages),
paper back book.

	There is support for all the Atari libraries - VDI, GEM, TOS,
ROM, AES.  There is NO RCS support however, which may be a major
problem for some developers.  You could use the developer's RCS.  There
is no need to escape to assembly ever, as far as I can tell.  There
is full support for all the easy calls, as well as a nice LINE A
interface - you can use LINE A directly from C.  All of this is well
documented, although the AES and VDI refer you to the Atari GEM
documentation.

	This is REAL C, folks.  No funny stuff.  Most of your UNIX code
can port directly with probably the only worry handling the CR/LF
problem (which MWC does using "rb", "r+b", etc.).  Pointers are 32
bit always.  The compiler produces very helpful error messages, and
detects some lint-like problems (variable unused, questionable pointer
stuff, etc.).  Library is richer than developer's C, better documented.

	Mark Williams is even friendly on the phone.  I called about
an undocumented error message I got, and I got through to the technical
staff right away (on the 800 number, no less), and they seemed knowledgeable
and eager to help.  (Try that with Microsoft!).

	Too good to be true?  Well, not so far.  Finally, here are some
numbers I gathered on MWC vs. Developer's C on two programs - the sieve
benchmark, and my screen editor, TVX, which is several thousand lines long.
Compile times are for an atari 20 Mb hard disk.

                   program   Compile/link time  Code Size  Run Time

Developer's C      sieve       2:01           9225 Bytes    4.8 sec
Mark Williams C    sieve        :36           7366 Bytes    4.8 sec

Developer's        TVX        20:29          51517 Bytes     ----
MWC                TVX         8:40          52472 Bytes

--
Dr. Bruce E. Wampler
University of New Mexico
Department of Computer Science
Albuquerque, NM 87131

..{ucbvax | seismo!gatech | ihnp4!lanl}!unmvax!wampler