Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought






























                    VAX PASCAL V3.8 Release Notes
                    VAX PASCAL V3.8 Release Notes



                             29 July 1988
                             29 July 1988















     This document contains information about new features in VAX

     PASCAL V3.8, differences between V3.8 and previous versions,

     corrections included in VAX PASCAL V3.8, and  other  topics.

     This  file  is  of  interest  to  both system management and

     application programmers.

























































                                   CONTENTS







CHAPTER 1       VAX PASCAL V3.8 RELEASE NOTES



        1.1     OVERVIEW OF VAX PASCAL V3.8  . . . . . . . . . . . 1-1

        1.2     LMF SUPPORT  . . . . . . . . . . . . . . . . . . . 1-1

        1.3     SUBSTANTIALLY FASTER ENVIRONMENT FILE SUPPORT  . . 1-1

        1.3.1     Maximum Number Of Environment Files Increased  . 1-2

        1.3.2     Number Of Simultaneously Open Files Increased  . 1-2

        1.3.3     Locality Of Reference In Environment Files . . . 1-3

        1.3.4     VAX RMS Multiblock And Multibuffer Counts  . . . 1-3

        1.3.5     Compatibility With Previous Compilers  . . . . . 1-3

        1.4     MTPR/MFPR BUILTIN ROUTINES . . . . . . . . . . . . 1-3

        1.4.1     MTPR Builtin Procedure . . . . . . . . . . . . . 1-4

        1.4.2     MFPR Builtin Function  . . . . . . . . . . . . . 1-4

        1.5     INSTALLATION VERIFICATION PROCEDURE (IVP)  . . . . 1-4

        1.6     COMPATIBILITY NOTES  . . . . . . . . . . . . . . . 1-4

        1.7     PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY

                ATTRIBUTES . . . . . . . . . . . . . . . . . . . . 1-5

        1.8     STARLET.PAS INSTALLATION DEPENDENCY  . . . . . . . 1-5

        1.9     KNOWN RESTRICTIONS . . . . . . . . . . . . . . . . 1-5

        1.9.1     Blank Padding Of PACKED ARRAY OF CHAR Value

                  Parameters . . . . . . . . . . . . . . . . . . . 1-6

        1.9.2     String Expressions As Actual Value Parameters  . 1-6

        1.9.3     Passing File Buffer Variables  . . . . . . . . . 1-6

        1.9.4     Non-printable Characters In Compile-time

                  Expressions  . . . . . . . . . . . . . . . . . . 1-7

        1.9.5     Using The ARGUMENT Routine With VAR Parameters . 1-7

        1.10    NEW ERROR MESSAGES . . . . . . . . . . . . . . . . 1-8





CHAPTER 2       VAX PASCAL V3.8 MAINTENANCE FIXES































































                              CHAPTER 1
                              CHAPTER 1



                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES







1.1  OVERVIEW OF VAX PASCAL V3.8



VAX PASCAL V3.8 contains the following new features:



     1.  LMF support



     2.  Substantially faster environment file support



     3.  MTPR/MFPR builtin routines










1.2  LMF SUPPORT



VAX PASCAL V3.8 contains support of the  License  Management  Facility

(LMF).   When  VAX PASCAL V3.8 in invoked, it checks to see whether it

is  licensed  on  the  machine.   If  a  valid  license  exists,   the

compilation  continues.   If  a valid license does not exist, an error

message is printed and the compilation is aborted.  For example,



$ pascal test

%LICENSE-F-NOAUTH, DEC PASCAL use is not authorized on this node

-LICENSE-F-NOLICENSE, no license is active for this software product

-LICENSE-I-SYSMGR, please see your system manager



Please refer to the VAX/VMS License  Management  Facility  manual  for

more information.







1.3  SUBSTANTIALLY FASTER ENVIRONMENT FILE SUPPORT



VAX PASCAL V3.8 contains several improvements  in  the  inheriting  of

environment files.  These improvements result in substantial decreases

in elapsed time and Direct I/O counts.  For example, one test  program




                                 1-1




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





of  2339 lines that inherited 14 different environment files generated

24,652 Direct I/Os and used 8:10.9 seconds of elapsed time on an empty

VAX  8800  when  compiled with VAX PASCAL V3.7.  The same program when

compiled with V3.8 in the same environment, only generated  73  Direct

I/Os  and  used  only 17.1 seconds of elapsed time.  This amounts to a

99.7% improvement in the Direct I/O count and  a  96%  improvement  in

elapsed time.



Of course, this dramatic increase in performance is not  without  some

cost.   The  VAX  PASCAL  V3.8  compiler  will use more virtual memory

(actual amount is directly proportional to the number and the size  of

the  environment files inherited) and keep more environment files open

simultaneously than previous releases.  However, programs which  don't

inherit environment files should not see any additional overhead.







1.3.1  Maximum Number Of Environment Files Increased



The maximum number of environment files that you can inherit has  been

increased from 128 to 512.  Additionally, the compiler now produces an

error message when the limit is exceeded.






1.3.2  Number Of Simultaneously Open Files Increased



In previous releases  of  VAX  PASCAL,  the  compiler  only  kept  one

environment  file  open  at any time.  When it needed information from

another file, it closed the current environment file  and  opened  the

desired environment file.  This behavior caused a large amount of disk

I/O for programs that used many environment files.  The  compiler  has

been enhanced to keep several environment files open simultanously.



The maximum number of environment files that  the  compiler  can  open

simultanously  is  dependant  on  the  process'  open file quota.  The

algorithm used by the compiler is:



   "Maximum OPEN" = MIN(50,"Current Open File Quota" - 16)



The current open file quota is determined  by  using  the  JPI$_FILCNT

item  with the SYS$GETJPI system service.  An adjustment of 16 is made

to account for other files that compiler might  have  to  open  (.OBJ,

.LIS,  .DIA,  etc.).  The maximum of 50 is chosen to prevent excessive

use of virtual memory.  If you inherit  more  environment  files  than

this  number,  the compiler will close some environment files in order

to open other files.  If the resulting number is less than 50, you can

increase the performance of the compiler by raising the FILLM quota in

the UAF entry.










                                 1-2




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





1.3.3  Locality Of Reference In Environment Files



In previous releases, the contents  of  the  environment  file  was  a

breadth-first  scan  of the outermost symbols of the compiler's symbol

table.  However, when a symbol is used from  an  environment  file,  a

depth-first  scan  is performed.  This caused considerable page faults

and increased the number of $GETs to the file.  The compiler has  been

enhanced  to  write  out  environment  files in a depth-first order to

maximize the locality of reference when a symbol is inherited.







1.3.4  VAX RMS Multiblock And Multibuffer Counts



Since previous compilers continually opened and closed the environment

files, the values of the RMS multiblock and multibuffer counts did not

affect the performance of inheriting.  However, since the compiler now

will  keep  the  environment file open for an extended length of time,

the compiler now  computes  sufficient  values  to  map  a  reasonable

portion  of  the  file.   However,  STARLET.PAS  is excluded from this

algorithm since the number of symbols used is quite small.







1.3.5  Compatibility With Previous Compilers



The VAX PASCAL V3.8 compiler will accept environment  files  generated

by  earlier compilers.  The environment files generated by V3.8 can be

inherited by V3.4, V3.5, V3.6, and V3.7  compilers.   To  achieve  the

best  performance  when  inheriting environment files, we suggest that

you rebuild them with the V3.8 compiler.







1.4  MTPR/MFPR BUILTIN ROUTINES



The VAX PASCAL compiler generates user-mode code.  VAX PASCAL does not

explicitly  support the running of VAX PASCAL generated code in kernel

mode.   However,  if  the  following  rules  are  observed,  then  the

generated  code  has  a good chance of working as expected in elevated

access modes.



     1.  All code must be compiled  with  the  /NOCHECK  qualifier  or

         [CHECK(NONE)]  attribute.  The VAX PASCAL run-time signalling

         method relies on trying to execute the HALT instruction.   In

         user-mode,  this causes an exception which is a signal to the

         VAX PASCAL run-time library.   In  kernel-mode,  this  simply

         HALTs the machine.



     2.  Avoid all routine calls which translate into run-time library

         calls.   These  include  all I/O routines, several arithmetic

         routines, several string  routines,  etc.   A  list  of  such




                                 1-3




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





         routines is not provided.





Two new builtin routines have been added to VAX  PASCAL  V3.8.   These

new  builtin  routines  provide access to the MTPR and MFPR privileged

VAX instructions.







1.4.1  MTPR Builtin Procedure



The MTPR procedure assigns a  value  into  a  VAX  internal  processor

register.  MTPR has the following form:



   MTPR(ipr_register_expression, source_expression)



The  ipr_register_expression  and  source_expression  parameters   are

expressions  compatible with the UNSIGNED type.  The source expression

is moved into the internal processor register with the MTPR privileged

VAX instruction.







1.4.2  MFPR Builtin Function


The MFPR function returns  the  value  of  a  VAX  internal  processor

register.  MFPR has the following form:



   MFPR(ipr_register_expression)



The ipr_register_expression parameter is an expression compatible with

the  UNSIGNED type.  MFPR returns a value of type UNSIGNED.  The value

of  the  internal  processor  register  is  retrieved  with  the  MFPR

privileged VAX instruction.







1.5  INSTALLATION VERIFICATION PROCEDURE (IVP)



The   VAX   PASCAL   IVP   is   left   on   the   system    disk    in

SYS$COMMON:[SYSTEST.PASCAL]PASCAL$IVP.COM.   This  command file can be

invoked at any time to verify that the VAX PASCAL compiler is  present

and working.







1.6  COMPATIBILITY NOTES



There have been no source incompatibilities added to VAX PASCAL  V3.8.

All valid programs will continue to work as expected.



The "SYNPERIOD, Syntax: '.' expected" error message generated  by  the




                                 1-4




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





VAX  PASCAL  compiler  has  been  changed  from  a warning-level to an

error-level.  There have been several reports of  confusion  resulting

from  programs that had unbalanced END keywords and were compiled with

/NOWARNINGS.  These programs didn't produce any visible  diagnositics.

By  changing  the  severity  from  warning  to  error, the /NOWARNINGS

qualifier will not prevent the diagnostic from being issued.



The VAX SCA source code analyzer files produced  by  VAX  PASCAL  V3.8

with  the  /ANALYSIS_DATA  qualifier  require VAX SCA V1.1 or greater.

The source code analyzer files will not work correctly  with  VAX  SCA

V1.0.



The object files produced by VAX PASCAL V3.8 require VAX/VMS  V4.6  or

later.







1.7  PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY ATTRIBUTES



When an existing indexed file is opened, the Run-Time Library compares

the  keys  in  the  file  against  the KEY attributes specified in the

program.  If no KEY attribute was specified for the corresponding  key

in  the  indexed  file,  then  the comparison is bypassed and the open

continues.   The  Run-Time  Library  compares  the  position  and  the

datatype  of the file's keys against the KEY attributes specified.  If

the KEY attribute explicitly specifies a collating sequence (ASCENDING

or  DESCENDING) then the specified sequence must match that of the key

in the file.  If no sequence is  specified  then  either  sequence  is

allowed.  The CHANGES and DUPLICATES options are not checked.







1.8  STARLET.PAS INSTALLATION DEPENDENCY



The VAX PASCAL V3.8 kit contains a new STARLET kit.  This kit  creates

definition  files for several Run-Time Libraries.  See the PASSTR V3.8

release notes for more information.



The STARLET.PAS and  RTL  definition  files  that  are  built  by  the

PASSTR038 facility are built from a file of definitions shipped on the

VAX/VMS kit.  This file is SYS$LIBRARY:STARLETSD.TLB.   This  file  is

owned  and  maintained  by  the  VAX/VMS  group  and may be updated by

VAX/VMS releases.  After each VAX/VMS update or upgrade,  reinstalling

STARLET  allows  you  to  get  any corrections or enhancements made to

SYS$LIBRARY:STARLETSD.TLB.







1.9  KNOWN RESTRICTIONS



This section includes all known restrictions in the  VAX  PASCAL  V3.8

compiler.




                                 1-5




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





1.9.1  Blank Padding Of PACKED ARRAY OF CHAR Value Parameters



A  string  parameter  must  be  structurally   compatible   with   its

corresponding  formal  parameter.   The  VAX  PASCAL compiler will not

blank pad a fixed length character string expression  with  blanks  to

match  the  formal  declaration.   Also  VAX PASCAL will not blank pad

default values for such string parameters.  For example, the following

program segment will produce a compile-time error:



   TYPE STR40 = PACKED ARRAY [1..40] OF CHAR;



   PROCEDURE PASS_STR40( P : STR40 );

      BEGIN

      END;



   BEGIN

   PASS_STR40('Shorter than 40 chars');

   END.









1.9.2  String Expressions As Actual Value Parameters



If several formal value parameters are declared in  the  same  section

and  have  the  same conformant packed array schema, all corresponding

actual parameters must have the same bounds at run-time.  For example:



   PROCEDURE P( A,B : PACKED ARRAY [L..U:INTEGER] OF CHAR );



In a call to P, the actual parameters passed to  A  and  B  must  have

identical  string  bounds.  However, due to an error in the VAX PASCAL

compiler, the bounds of  these  parameters  are  not  checked.   If  a

program  calls  P  with  two  character-string parameters of different

lengths, an error will not be signaled and the bound identifiers L and

U will not correctly describe the bounds of the formal parameter B.



This restriction applies only to string expressions  passed  to  value

conformant  PACKED  ARRAY  OF CHAR parameters.  For all other types of

parameters, bounds checking is done during compile-time.







1.9.3  Passing File Buffer Variables



When the buffer variable of a file is passed as a VAR  parameter,  the

allocation  size  of  the  formal VAR parameter must match that of the

components of the file.  Failure to do so will result in  an  Internal

Compiler Error.  For example:



   PROGRAM A;

   VAR




                                 1-6




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





      F : PACKED FILE OF 0..65535;

      G : FILE OF [WORD] 0..65535;



   PROCEDURE P( VAR I : INTEGER ); EXTERNAL;



   BEGIN

   P(F^); { causes an Internal Compiler Error }

   P(G^); { causes an Internal Compiler Error }

   END.









1.9.4  Non-printable Characters In Compile-time Expressions



The extended syntax for imbedding non-printable characters  in  string

literals  may  yield  incorrect  results  when  used  in  compile-time

expressions.  For example:



   PROGRAM A(OUTPUT);



   CONST BOOL = 'BELL'(7) = 'BELL'(7)'CHAR';



   VAR STRING : PACKED ARRAY [1..32] OF CHAR :=

                'STRING WITH A BELL'(7)' CHARACTER';



   BEGIN

   WRITELN(BOOL,' ',STRING);

   END.



The above program will print "TRUE" for BOOL  and  garbage  characters

for  STRING.   As a workaround, you can use run-time expressions.  For

example:



   PROGRAM A(OUTPUT);



   VAR BOOL : BOOLEAN;

       STRING : PACKED ARRAY [1..32] OF CHAR;



   BEGIN

   BOOL := 'BELL'(7) = 'BELL'(7)'CHAR';

   STRING := 'STRING WITH A BELL'(7)' CHARACTER';

   WRITELN(BOOL,' ',STRING);

   END.



We expect to lift this restriction in a future release of VAX PASCAL.







1.9.5  Using The ARGUMENT Routine With VAR Parameters



The ARGUMENT builtin routine cannot be used on the left-hand  side  of




                                 1-7




















































                    VAX PASCAL V3.8 RELEASE NOTES
                    VAX PASCAL V3.8 RELEASE NOTES





an  assignment  statement.   However,  you  can  still assign into VAR

parameters with the LIST attribute by using the IADDRESS builtin.  For

example:



   PROCEDURE A(VAR P : [LIST] INTEGER);

     VAR I,PTR : ^INTEGER;

      BEGIN

      FOR I := 1 TO ARGUMENT_LIST_LENGTH(P) DO

         BEGIN

         PTR  := IADDRESS(ARGUMENT(P,I));

         PTR^ := 42;

         END;

      END;



We will consider further enhancements to the  ARGUMENT  routine  in  a

future release of VAX PASCAL.







1.10  NEW ERROR MESSAGES





CNFREQNCA, Conformants of this parameter type require CLASS_NCA



     Error.  The conformant parameter cannot  be  described  with  the

     default  CLASS_A  descriptor.  Add the CLASS_NCA attribute to the

     parameter declaration.





MAXNUMENV, Maximum number of environments exceeded



     Fatal.   More  than  512  environment  files  were  used  in  the

     comipilation.










































                                 1-8











































































                              CHAPTER 2
                              CHAPTER 2



                  VAX PASCAL V3.8 MAINTENANCE FIXES
                  VAX PASCAL V3.8 MAINTENANCE FIXES









This chapter describes  all  the  changes  for  the  VAX  PASCAL  V3.8

release.







      o  The compiler would occasionally generate a  invalid  VAX  SCA

         source analysis file when the program was very large (approx.

         9000 lines).  The resulting file  would  not  load  correctly

         into a VAX SCA library.  This problem has been corrected.





      o  Incorrect code  was  occasionally  generated  when  a  module

         contains  a  procedure  call  which passed a packed character

         conformant array to an  unsafe  conformant  array  parameter.

         This  problem  has  been  fixed  and  the correct code is now

         generated.





      o  (SPRs ICA-12279 & ICA-13478)  Incorrect code was occasionally

         generated for programs that used procedure parameters and the

         procedures contained up-level references.  The  correct  code

         is now generated.





      o  (SPR ICA-14581)  When  compiling   with   overflow   checking

         enabled,  the  compiler would occasionally generate incorrect

         code which would produce erroneous integer  overflow  errors.

         The  compiler  now  produces inproved code sequences which do

         not generate exceptions.





      o  (SPRs ICA-13631 & SPR 11-94665)  Incorrect      code      was

         occassionally  generated  for a program containing assignment

         statements for unaligned strings less than 32  bits  in  size

         and  the assignment required blank padding.  This problem has

         been fixed and the correct code is now generated.




                                 2-1




















































                  VAX PASCAL V3.8 MAINTENANCE FIXES
                  VAX PASCAL V3.8 MAINTENANCE FIXES





      o  A fatal I/O error occurred when a compilation had  diagnostic

         errors  and  the  last diagnostic message was in a section of

         code that was extracted from a text library and a listing was

         not being produced.  This problem has been fixed.





      o  Incorrect code was generated  when  passing  variables  which

         were  declared with the VALUE attrubute to %REF UNSAFE formal

         parameters.  This problem has been fixed and the correct code

         is now generated.





      o  The compiler would not optimally align variables allocated on

         the  stack.   The  algorithm  has  been  modified to align on

         longword boundaries wherever possible  to  maximize  hardware

         performance.





      o  Incorrect  code  was  occasionally   generated   for   string

         concatenation when the operands were results of PAD or SUBSTR

         builtins.  This problem has been fixed.





      o  An error was not detected and incorrect  code  was  generated

         for   a  conformant  array  parameter  whose  components  are

         non-contiguous.  This type of parameter requires a  CLASS_NCA

         descriptor  and  the  compiler  did not require the CLASS_NCA

         attribute when it should have.



      o  Incorrect code was occassionally generated for calls  to  the

         builtin  routines FIND_FIRST_BIT_SET and FIND_FIRST_BIT_CLEAR

         nested within a looping construct.





      o  (SPR ICA-7917)  An Reserved  Operand  Fault  would  occur  at

         run-time   if   the  ZERO  builtin  function  was  used  with

         conformant array parameters.  This problem has been fixed.





      o  The compiler would occasionally generate an Internal Compiler

         Error   during   Source  Analysis  when  generating  VAX  SCA

         information for formal  routine  declarations  that  included

         conformant array parameters.





      o  (SPR ICA-14370)  The  compiler  would  occasionaly  enter  an

         infinite  loop  of  allocating  virtual  memory  if  the ZERO

         function was used  in  constructors  with  nested  structured

         types.  This problem has been fixed.










                                 2-2

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026