Welcome to the Dictionary of Programming Languages, a compendium
of computer coding methods assembled to provide information and
aid your appreciation for computer science history.
Browse the dictionary by clicking on a section:
Get a full dump of the dictionary:
List of Names
- Language type:
BCPL was an early block-structure
procedural language, fairly low-level,
and used for system and small application
programming in the early- and mid-1970s.
BCPL is an operator-typed language; the
data types of variables are defined by
the operators applied (rather than being
declared for the variable, as in Algol).
Data items were untyped cells
labeled with identifiers.
Data types supported by BCPL included
integers, reals, bit patterns, I/O streams,
various kinds of references, and
could only be used as constants.
The language supported simple control
constructs like loops and conditionals,
as well as means to declare subroutines
The BCPL system library, which evolved
along with the language, provided I/O
support and very simple memory management.
Early versions of BCPL were
machine native compilers, but nearly all
recent versions have been translators.
In other words, the BCPL compiler
translates the BCPL code to an abstract
machine language called INTCODE. The
INTCODE data is then interpreted by a
simple, fast virtual machine (typically
coded in assembly language, C, or a
mixture of the two).
There were several academic implementations
of BCPL in Britain. Free versions are
available today for various Unix systems,
the Amiga, MS-DOS, and other operating
Martin Richards, Cambridge University, 1966-67.
- See Also:
BCPL was the inspiration for two systems
programming languages developed at
Bell Telephone Laboratories in the 1970s:
B and C.
BCPL was originally designed in the UK,
but was first implemented at MIT. At
some British universities, it was used in
the 1970s to teach programming to
The name BCPL stands for
Basic Combined Programming Language.
Many of the ideas in BCPL were taken
- Sample code:
// Routine to compute a checksum of a
// named file, simplified from a compiler example.
LET start() = VALOF
$( LET args = VEC 50
LET instream = 0
LET outstream = 0
LET sum = 314159
IF rdargs("FROM/A,TO/K", args, 50) = 0 DO
$( writes("Bad arguments for CHECKSUM*n")
instream := findinput(args!0)
IF instream = 0 DO $( writef("can't open %s*n", args!0)
UNLESS args!1 = 0 DO
$( outstream := findoutput(args!1)
IF outstream = 0 DO $( writef("can't open %s*n", args!1)
$( LET ch = rdch()
IF ch=endstreamch BREAK
sum := (13*sum + ch) & #xFFFFFFF
UNLESS outstream=0 DO selectoutput(outstream)
UNLESS outstream = 0 DO $( selectoutput(outstream)
Descriptions in this dictionary are ©1997-99 Neal Ziring. Some
examples copyright of their respective authors. Some
technologies and languages are trademarked. Permission to
copy descriptions is granted as long as authorship credit is preserved.
Comments on this dictionary, corrections and suggestions, are all welcome.
Please use email, the address is firstname.lastname@example.org
[Ziring MicroWeb Home]
Dictionary and script maintained by Neal Ziring, last major modifications 3/18/98. Most recent
additions to dictionary and master list, 1/00.