LSTSRV-L Archives

LISTSERV Site Administrators' Forum

LSTSRV-L

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Eric Thomas <[log in to unmask]>
Tue, 28 Sep 1993 17:23:11 +0100
text/plain (65 lines)
The PASCAL pre-processor/translator that will be used to port LISTSERV to
VMS and unix has successfully translated  itself for execution on VMS and
unix and,  in both  environments, succeeded  in translating  its original
source code  again, generating  exactly the  same output  file as  the VM
version. Due  to the complexity  of the  pre-processor and the  amount of
transformations performed on the input  files, this is a very trustworthy
indication of the feasibility of  directly porting the rest of LISTSERV's
PASCAL code to unix and VMS.
 
The pre-processor  was chosen for  this exercise  because it is  a large,
complex and self-contained program, with well-defined input and output in
the form of disk files that can  be easily moved around and compared with
a  reference. The  pre-processor represents  about 1700  lines of  PASCAL
source code, plus a few hundred  lines from PASCAL include files. It uses
most of the P-REXX library, with  the exception of date/time functions. A
primitive subset  of the library's  file system functions,  allowing only
sequential I/O to text files, was implemented  in order to be able to run
the pre-processor under  VMS and unix. The rest of  the P-REXX library is
now fully implemented.
 
The pre-processor was first run under  VM to translate itself, creating a
source  file suitable  for  compilation  under VMS  and  another one  for
translation via  p2c under unix. An  unmodified copy of the  VMS file was
kept as  a reference for  future comparisons.  The main programs  of both
source files  were then  changed to call  system-dependent initialization
functions  and extract  command-line  parameters as  appropriate for  the
system they  were going to  run on, but no  modification was made  to the
rest of  the source files. That  is, a few lines  had to be added  to the
6-lines main entry point, but apart  from that nothing was changed to the
PASCAL source. One variable had to be renamed under unix due to conflicts
with a #define in a standard SunOS include file.
 
After compiling everything, executable  files were available for VAX/VMS,
AXP/VMS  and SunOS.  They were  fed  the VS  PASCAL source  code for  the
pre-processor, with instructions to produce  output suitable for VMS. The
resulting files could then be compared directly with the reference output
kept on VM, and not one byte differed.
 
Out of curiosity, here is the size of the executable file for the various
environments:
 
  VAX:  59k (VAX PASCAL/VAX C)
  AXP: 125k (DEC PASCAL/DEC C)
 Sun4:  96k (gcc -O4)
 
It is  not possible to  compare with the  VM version directly  because it
includes a nonshared copy of the bulky VS PASCAL run-time library, plus a
host of  other VM-specific functions  which are not  used but are  in the
same object  file as the  storage allocation functions  the pre-processor
does need. Without the RTL it adds up to about 48k. We can still draw two
conclusions from these figures:
 
- The code  generated for the  VAX (CISC) architecture is  not noticeably
  bigger than  the VM code;  little or no  overhead is introduced  by the
  PASCAL translation process.
 
- Provided that  a good optimizing  compiler is used, the  code generated
  through the use of p2c is not  significantly larger than it would be if
  a  native PASCAL  compiler  were available  (without optimization,  the
  output file is about 140k, which is a lot larger than it should be on a
  Sun4). While  it is probably not  optimal, it should certainly  be good
  enough given the low cost of unix horsepower.
 
  Eric

ATOM RSS1 RSS2