[net.lang] Path Pascal Release 0.9

grunwald@uiucdcsb.UUCP (01/29/85)

[Duplicate postings in: net.lang, net.unix, net.lang.pascal]

                  Path Pascal Release 0.9



     An initia release of the Portable  Path  Pascal  com-
piler  is  available for distribution to all UNIX sites run-
ning 4.x BSD/VAX systems. The compiler is  an  extension  of
the  Berkeley  Pascal  Compiler 'pc' and produces native VAX
code. In addition to the standard Pascal features, Path Pas-
cal  features  processes,  objects  (an  abstract  data type
facility), synchronization via Path Expressions and a 'simu-
lated  time'  notion  suitable  for systems simulation. Path
Pascal is used at UIUC for simulation of concurrent systems,
both at an instructional and a research level.

Processes

     Processes provide multiple control flows within a  sin-
gle  Path  Pascal  program.   Process notation is similar to
that for procedures, and calling a process is  syntactically
equivalent  to  calling a procedure. Processes may be nested
within other code bodies and communicate  through  synchron-
ized  data  structures call 'objects'. Processes size may be
specified on a per-process basis and there is  no  limit  on
the  number of processes other than memory size. Simulations
of network  voting  methods  running  with  over  a  hundred
processes  have been performed.  Processes are dynamic mean-
ing that multiple instances  of  the  same  process  may  be
created simply by calling the process multiple times.

Objects

     Objects  provide  a  data  encapsulation  notation.  An
object is a set of data declarations grouped with operations
on those data. Access to the data is only possible using the
defined  entry points, provided the desired access meets the
restrictions imposed by the Path Expression for the  object.
Objects  represent a new 'type' construct similar to records
and may be separately compiled, promoting sharing of  common
abstractions.

Path Expressions

     Path Expressions provide a regular language description
of  allowed  concurrent  access  to  entry  points within an
object. Sequencing, resource restriction  and  derestriction
are  defined  in  a notation which is directly translated to
semaphore P and V operations. These semaphore operations are
executed  in  the pre- and post-amble of entry points within
objects. An example path specification for a  bounded-buffer
reader-writer protocol is:

                 path 100:(write;read) end;


This stipulates that no more than 100 pairs of  'write;read'
sequences  may  be going on at once at that each 'read' must
be preceded by a 'write'.  If an operation is  not  allowed
by  a Path Expression, the process requesting that operation
blocks until it is allowed.

Simulated Time

     Processes may 'delay' a certain number of  time  units,
or  they  may  'await'  some  future  time.  The  'pc'  call
'wallclock' has been changed to return  the  current  'simu-
lated  time' as opposed to real time. This provides a global
clock suitable for systems simulation. In  future  releases,
using  simulated  or real time will be a run-time specifica-
tion.

The System

     The compiler uses a modified front-end of the  Berkeley
PC compiler, generating code which the local Portable C Com-
piler translates to native assembly code.  It is possible to
call  routines  written  in  C  and  F77.  The language is a
super-set of Berkeley Pascal. In addition  to  the  compiler
itself,  a  runtime  library and a debugging tool to anaylse
core dumps is included.  This version has  been  in  use  at
UIUC  as  a  simulation language for distributed voting sys-
tems, ethernet load simulation, processor simulation and the
like  for  several  months.  An older compiler has been used
extensively in Operating Systems classes  to  simulate  con-
cepts such as process scheduling, file systems an so on.

Future Extensions

     We intend to extend the language to a distributed  pro-
gramming  language, modeled around a previous implementation
[Distributed Path Pascal], using the  SMI  RPC  protocol.  A
version  of  the  compiler running on the Sun workstation is
currently being constructed and should be available shortly.
Other  directions  will  also  be pursued as dictated by our
supporting grant.

Availability

     The system is available free of  charge  by  sending  a
1600  BPI  tape  to the address below. The source is roughly
900Kb, with final binaries being about 300Kb. Proof of a 4.x
BSD license is required, as this work is built on top of the
Berkeley Pascal compiler. The license should clearly specify
if  it is a source or a binary license.  Sites which contact
us will be informed of future releases and bug fixes to  the
best of our abilities.  The address for tapes is:

                    Dr. Roy Campbell
                    199 Digital Computer Lab
                    University of Illinois
                    1304 W. Springfield
                    Urbana, Illinois 61801

All contacts for detailed information  concerning  the  com-
piler,  licensing,  sample  programs,  documentation and the
like should be addressed to:

                    Dirk Grunwald
                    222 Digital Computer Lab
                    University of Illinois
                    1304 W. Springfield
                    Urbana, Illinois 61801

                    (217) 333-7937

                    {pur-ee, ihnp4} ! uiucdcs ! grunwald
                    grunwald@uiuc.csnet     grunwald@uiuc.arpa

This work was supported in part under  NASA  grant  NSG1471,
administered  by Dr. Roy Campbell at the University of Illi-
nois.

jlg@lanl.ARPA (02/01/85)

Interesting.  I'll have to look more carefully at the release note.  It
doesn't look compatible with either ISO pascal or ANSI pascal (unless the
phrase 'standard features' refers to one of these standards instead of J&W
- I doubt it, some of the 'extensions' appear to contradict features of the
two new standards).  I don't fault the people who wrote this new compiler.
They probably used the only standard which is really universal - J&W.
Looks like they are ahead of the others anyway by allowing multitasking.

J. Giles

ndiamond@watdaisy.UUCP (Norman Diamond) (02/04/85)

> Interesting.  I'll have to look more carefully at the release note.  It
> doesn't look compatible with either ISO pascal or ANSI pascal (unless the
> phrase 'standard features' refers to one of these standards instead of J&W
> - I doubt it, some of the 'extensions' appear to contradict features of the
> two new standards).  I don't fault the people who wrote this new compiler.
> They probably used the only standard which is really universal - J&W.
> Looks like they are ahead of the others anyway by allowing multitasking.
> 
> J. Giles

Concurrent Pascal has been around for ages.  It has supported multitasking
for ages.  It also was based on a different variation of Pascal, before ISO
standardized it, and before J&W even published the second edition of their
text.  So, who's ahead of the game?

-- Norman Diamond

UUCP:  {decvax|utzoo|ihnp4|allegra|clyde}!watmath!watdaisy!ndiamond
CSNET: ndiamond%watdaisy@waterloo.csnet
ARPA:  ndiamond%watdaisy%waterloo.csnet@csnet-relay.arpa

"Opinions are those of the keyboard, and do not reflect on me or higher-ups."

grunwald@uiucdcsb.UUCP (02/05/85)

Path Pascal uses Pascal as (a poor) vechicle for a concurrency language. Pascal
was chosen several years ago -- better choices could be made today. It's an
extension to Berkeley Pascal, so it has all their faults & extensions as well
as ones introduced by combining Path Expressions & processes. A sample program
with two processes (producer & consumer) follows. It simply uses a buffer to
pass '\0' .. '\127' between the two processes. Very stupid thing to do, but
it points out that this isn't intending to be yet another implementation of
Pascal.

program rw;

var
    buff : object
	path 1:(write;read) end;	(* ye olde path expression *)
	var datum : char;

	entry procedure write(x : char);
	begin datum := x; end;

	entry funciton read : char;
	begin read := datum; end;

	end (* object *);

process producer;
var i : integer;
begin
    for i := 0 to 127 do
	buff.write(chr(i));
end;

process consumer;
begin
    while (ord(buff.read) != 127) do ;
end;

begin
	producer;
	consumer;
end.

jlg@lanl.ARPA (02/07/85)

> > [...]  It
> > doesn't look compatible with either ISO pascal or ANSI pascal (unless the
> > phrase 'standard features' refers to one of these standards instead of J&W
> > - I doubt it, some of the 'extensions' appear to contradict features of the
> > two new standards).  I don't fault the people who wrote this new compiler.
> 
> Concurrent Pascal has been around for ages.  It has supported multitasking
> for ages.  It also was based on a different variation of Pascal, before ISO
> standardized it, and before J&W even published the second edition of their
> text.  So, who's ahead of the game?
> 

Yes I know about Concurrent Pascal - I read Brinch Hansen's book on the
language several years ago.  In fact, I'm surprised that ISO or ANSI didn't
adopt the features of Concurrent Pascal or at least introduce replacements
for them.  This is just more evidence that Pascal is very resistive to
standardization.  This even seems to be part of the reason: Pascal is
popular but incomplete.  Unforunately, the people who extend the language
or try to standardize it don't talk to each other.  I think this is also
why Wirth didn't extend the language himself - his extensions to Pascal
came out as a new language: Modula.  At least with Modula there was no
requirement to maintain backward compatibility.

Now, is Path Pascal upward compatible from Concurrent Pascal?  Is it
upward compatible from J&W (either edition)?  These are questions which
implementors seem not to ask themselves until after they release their
software (if then).

J. Giles