Small C ver 1.00 source?

Chuck Guzis cclist at
Tue Jul 14 11:41:57 CDT 2020

On 7/14/20 8:37 AM, dwight via cctalk wrote:
> I'm curious as to where the term P-code came from and what defined it.
> Dwight

The term "p-code" comes from the 1973 Pascal-P version of UCSD Pascal.
There is disagreement as to what the "p" stands for--"portable" or "pseudo".

In any case, the technique didn't originate with Pascal.  BCPL had an
"o-code" which was an intermediate instruction set between the compiler
frontend and the target-machine code generator backend.  That dates from
the 1960s.

I worked with a fellow who implemented a COBOL compiler in a CDC
6000-series PPU on a bet with Bill Norris back in the 1960s.  I
personally worked on a COBOL dialect translator whose implementation
language was a p-code that dealt with abstract datatypes, such as
tokens, operators, etc.

The genius is that you can design a p-code to fit your needs, write to
it and then either interpretively execute it or compile it to native
machine code.  The front end details never change; only the relatively
simple back end--and optimization (e.g. loop unrolling, invariant
variable elimination, etc.) is much easier with p-code as the object.

Said COBOL translator was initially implemented to interpret the p-code,
then was later implemented as assembly-language macros to generate
native code.   The first version was used to debug and test operation,
the second (which sped up by 10x) for production use.

Later, my team implemented a BASIC compiler which not only generated a
p-code, but the compiler itself was implemented in its own p-code.

I'd like to know of the first instance of a machine-independent
intermediate code use.  I suspect that it goes back to the 1950s.


More information about the cctalk mailing list