perm filename SAILV8.DOC[10X,AIL] blob sn#125754 filedate 1974-10-19 generic text, type T, neo UTF8


                     SAIL Changes, New Features
                  Compiler Version 16, Segment SAISG8

                    R. Taylor, J. Reiser, R. Smith

                           October 18, 1974


        The new version of  SAIL should present relatively  few changes

and  inconveniences  for  the  user.   There  are  no   known  language

incompatibilites.  Unfortunately, it will be necessary to recompile all

.REL files (including  load modules and libraries)  for use of  the new

SAIL.

        The main reason for bringing up a new SAIL is to accomodate the

new debugger that John Reiser has written.  Thus, the new  compiler has

features that allow the compilation to include the semantic information

about the program necessary for the debugger.  A few changes  have also

been made to the runtime system to accomodate the debugger, chiefly the

change  in the  break table  features, described  below.   The debugger

itself will be available in several weeks.

        A  few other  changes have  been made  that the  user  may see.

These are described below.

                          CLOSE Inhibit Bits

        The CLOSE function now has an additional optional argument that

allows the CLOSE inhibit bits to be turned on.  The second  argument is

the bit pattern for the inhibition, and it is defaulted 0.  See the UUO

manual for details.



        This feature is available  only at SU-AI, and is  not available

in the TENEX version.

                           TYPEIT Array type

        The number returned  by the TYPEIT procedure  (which identifies

the type of the datum  of its item expression argument) is  now changed

for arrays.  Now  it is '24  plus the scalar  value of the  type (e.g.,

INTEGER), whereas before it was '15 plus the scalar value.

        Additional types added to TYPEIT are:  '16 for labels,  '17 for

record classes.

                       Comparison of .REL Files

        Starting with version  18, the compiler emits  information into

each  .REL file  containing the  version of  the compiler  used.  Then,

during the SAIL  initialization sequence, these versions  are compared,

and a  warning message is  issued if necessary.   Thus, the  problem of

converting  from  one version  of  the  compiler to  a  new  version is

lessened.  This feature may not work as well in the  current changeover

as it will in the future.

                          SCAN Optimizations

        The SCAN function has  been modified to return  true substrings

instead of copies in those  cases that the break table in  question was

not  omitting any  characters.  This  should be  an improvement  in the

efficiency of those routines.

                             BREAK Tables

        There are  now 54  user-setable break  tables available  to the



SCAN, INPUT, TTYINL functions, as well as SETBREAK and BREAKSET.  These

tables are allocated and deallocated dynamically.

        In addition,  GETBREAK now  returns the  value of  the smallest

unallocated breaktable, and RELBREAK releases its table  argument.  The

implicit declarations of these new runtime routines are:

                      INTEGER PROCEDURE GETBREAK
                   PROCEDURE RELBREAK(INTEGER TABLE)


NOTE:   a  breaktable is  allocated  by either  GETBREAK,  SETBREAK, or

RELBREAK.  A breaktable is de-allocated (and thereby made  available to

GETBREAK) by RELBREAK.  Breaktables are  stored in groups of 18,  so it

is more efficient to use all  the tables in a given group  before going

to another group.  The use of GETBREAK is particularly  recommended for

load-modules and the like, so that conflicts will be minimzed.

        HACKERS:  Actually there  are 18 additional  system breaktables

which are reserved  for use by the  SAIL runtime system.   These tables

are numbers  -17 through  0, and  are ordinarily  not available  to the

user.  They will be used by the debugger and by additional  SAIL system

software.

        The  user can  obtain access  to breaktables  -17 through  0 by

setting BRKPRV(USER),  for example by  the USERCON  function.  WARNING:

absolutely  no  guarantees are  made  to the  user  who  accesses these

breaktables.  This information  is intended for completeness  only; the

use of these special breaktables by the user is not recommended.