From: walker@twix.unx.sas.com (Doug Walker)
Newsgroups: comp.sys.amiga.programmer
Subject: SAS/C 6.0 Details (LONG!)
Date: 13 Aug 92 13:44:26 GMT
Organization: SAS Institute Inc.
Originator: walker@twix.unx.sas.com


The following sections describe in more detail some of the changes and 
enhancements to the SAS/C(r) Development System, Version 6.0.

Version 6.0 contains 1200 pages of all-new documentation, including
a quick reference guide, library reference manual, and a two-volume
user's guide.  Except for the quick reference guide, all documentation
is in three-ring binders which lie flat while you work.

The SAS/C Development System has an extensive online help system
implemented using AmigaGuide, a hypertext system from Commodore.
The online help describes each utility, CodeProbe command, editor
command, library function, diagnostic message, and compiler option.
Help is available from within the editor, the debugger, the message
browser, the options program and from the Shell command line.

The SAS Institute Technical Support Division has a new facility
called EMITS (Electronic Mail Interface to Technical Support) that
allows you to report problems and receive help through Internet.

The "lc" compiler front-end has been replaced with the new "sc"
front-end, which takes options in a form similar to AmigaDOS command
templates.  The new "sc" front-end accepts C source files, assembly
language files, object files, and libraries, which means you will
rarely have to invoke the assembler or linker yourself.  You may specify
options before or after the filenames.  Most options have a positive and
a negative form; none are toggles.  This makes it easier to use them
with an options file.

To help you make the transition to Version 6, the SAS/C Development
System provides two utilities, "sc5" and "lctosc".  The "sc5" command
accepts options in the form accepted by "lc" and invokes the Version 6
compiler.  The "lctosc" utility accepts options in the form accepted by
"lc" and prints the equivalent "sc" options to stdout.  Both "sc5" and
"lctosc" read the sascopts file, if present.

The Version 6.0 compiler, libraries, and header files are completely
ANSI-compliant.  In addition, many language extensions customize
the compiler for the Amiga or simply make coding more convenient.

Most of the compiler executables (lc1, lc2, go) have been replaced
by shared libraries.  If your system has enough memory, the shared
libraries remain loaded after their first use, thereby speeding
up compilation significantly.  If memory runs short, the operating
system removes them for you automatically.

The precompiled header files in Version 5 have been replaced with
GSTs (Global Symbol Tables).  GSTs are much faster than precompiled
headers because they remain in RAM between compiles if memory permits.
Some additional utilities, "gst" and "hypergst", allow you to
browse the RAM-resident GST files for information on symbols defined
in system header files or in your header files.

The new "scmsg" utility enables you to integrate any editor that
supports AREXX into the SAS/C Development System.  A simple compiler
option routes all your error and warning messages to "scmsg", which
can invoke the editor of your choice and communicate with it as
necessary to edit the file and line number containing the error.
You can also program the keys in your editor to ask "scmsg" to 
provide information about the errors and warnings.

The new peephole optimizer, which runs concurrently with Phase 2 of the
compiler, improves code quality significantly.  The global optimizer
supports many new optimizations, including inline functions.  You can
use the "__inline" keyword to specify a function that is to be inlined,
or you can give the optimizer conditions under which functions should be
automatically inlined.

Code generation has been greatly improved with 6.0.  The new
code generator, in combination with the global and peephole
optimizers, makes much better use of registers and addressing
modes.  The system makes intelligent decisions about what values
should be kept in registers.  Instead of setting up a frame
pointer with the LINK and UNLINK instructions, the compiler
addresses all stack-based data items relative to the stack pointer,
thereby freeing an additional address register for use by your
program.

The CodeProbe debugger has numerous enhancements.  The major
enhancements include the following:

   The command syntax has been totally rewritten and greatly extended.

   Normal C expressions, including casts and function calls, are
   accepted anywhere a variable name can be used.

   New windows include a memory window for browsing memory locations
   and a calls window that allows you to see a traceback of all callers
   of the current function.

   Built-in functions are available to to perform activities like
   strcmp, strcpy, memcmp, and others from the debugger command line.

   New support for debugging AmigaDOS shared libraries.

   Automatic detection of enforcer hits caused by your program, halting 
   your program at the location of the hit.

   Amiga-to-Amiga cross-debugging capability.  This new feature allows you 
   to run your program on one Amiga and debug the program using another Amiga 
   connected through the serial port or a network file system.

The compiler still generates code by default to check for stack overflow
at the entry to each function.  However, this code is more reliable
under Version 6.0.  The compiler also supports a new option that
generates code to allocate a new stack and allow your program to
continue running if the old stack runs out.

The compiler now supports the common model for external data as
well as the strict reference-definition model used in 5.10.  Under
strict reference-definition, external data may be declared in more
than one module, but may only be defined in one module.  Under
common model, external data may be defined in more than one module,
and all such definitions are treated as a single definition.  (A
declaration of external data uses the "extern" keyword; a definition
does not.)

The compiler now supports an option that generates special code to tell
you which portions of your program were executed by your test cases.  
The new "cover" utility analyzes the data produced by the compiler when 
you specify this option.  This information helps you design test cases 
that test all portions of your code.

The "stringmerge" compiler option, equivalent to the "-cs" option in
Version 5, merges all string constants and places them in the code
section.  Unlike the Version 5 option,  "stringmerge"  also places all
data declared "static const" and all automatic initializer data in the
code section.  This makes the near data section smaller and makes it
easier to write code that will go into ROM.

The compiler can now produce a disassembly of the generated object code.
The C source code is inserted as comments.

The compiler adjusts dynamically to low memory situations.  If you
compile your program and your Amiga runs low on memory, the compiler
displays the message "***Freeing Resources" and frees memory to enable
it to continue the compilation.  You can also use the "memorysize"
compiler option to limit the compiler's memory use.

You can designate autoinitialization functions that you want the startup
code to call automatically before it calls your main routine.  You can
also designate autotermination functions that you want the termination
code to call after main returns.

System library bases that are not defined in your code are automatically
opened and initialized.  This means that you do not need to explicitly
call OpenLibrary to initialize libraries such as intuition.library,
graphics.library, and others.

The SAS/C Compiler now permits references to unnamed unions and direct
references to members of substructures.  The compiler also permits
zero-length arrays as members of structures.

The new #pragma tagcall allows you to call AmigaDOS functions that take
a variable parameter list without using assembler stubs.

The new #pragma msg allows you to control compiler diagnostic output
more closely.  You can suppress or enable warning messages on a
line-by-line level.

The compiler now supports char, short, and long enum types.

Compiler error and warning messages are much clearer.  Much more
information is given with the diagnostic.  For example, code that in
previous version of the compiler would have produced the message
"argument type mismatch" would now produce the message "parameter type
mismatch; expecting "BPTR", found "struct FileHandle *" ".  Also,
code that produced the error "external item attribute mismatch" would
now produce the error "function definition conflicts with prototype;
see line 68 file "protos.h" ".

The compiler can generate code to call Commodore's "utility.library"
under AmigaDOS 2.0 instead of using compiler-provided stub routines
to perform various out-of-line mathematical operations.

In addition to generating function prototypes, the compiler can now
generate declarations for external data items.  This feature allows you
to maintain declarations for all functions and external data items in
your project that are brought up to date automatically simply by
specifying the "genproto" option and recompiling.

Examples are provided which show you how to use many of the new
features of the system, including special startup code, coverage
analysis, building shared libraries and so forth.

For more information or to order Version 6 of the SAS/C Development 
System, contact your nearest Amiga dealer or SAS Institute at 
919-677-8000.   Registered users in the USA will be receiving a 
mailing this week, and might consider using the provided order form
instead.  Registered users outside the USA will be getting a mailing
in September.

SAS and SAS/C are registered trademarks of SAS Institute Inc., Cary,
NC, USA. All other trade names references are trademarks or
registered trademarks of their respective companies.
-- 
  *****
=*|_o_o|\\=====Doug Walker, Software Distiller====== BBS: (919)460-7430 =
 *|. o.| ||                                          1200/2400/9600 Dual
  | o  |//     For all you do, this bug's for you!
  ====== 
usenet: walker@unx.sas.com                            bix: djwalker 
Any opinions expressed are mine, not those of SAS Institute, Inc.