Difference between revisions of "BCPL"
(→External links: Best description of Multics BCPL I could find.) |
m (→External links: +“A damn stupid thing to do” - has good coverage of the CPL story) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | '''BCPL''' is a [[programming language]] that was first developed in the late 1960's. Although little-used nowdays, it is historically important as the [[C programming language]] is derived from it. (C can be crisply, and aptly, described as 'BCPL with | + | '''BCPL''' is a [[programming language]] that was first developed in the late 1960's. Although little-used nowdays, it is historically important as the [[C programming language]] is derived from it. (C can be crisply, and aptly, described as 'BCPL with [[type]]s and terser [[syntax]]'.) |
− | Like [[ALGOL]], from which it is descended, it includes modern [[control flow]], including 'block structure'. Unlike Algol, it did not have types; the only type supported was 'word'. | + | Like [[ALGOL]], from which it is descended, it includes modern [[control flow]], including 'block structure'. Unlike Algol, it did not have types; the only type supported was '[[word]]'. |
− | It was intended by Martin Richards, its designer, mostly for systems programming (such as [[operating system]]s, [[compiler]]s, etc), for which the type limitation was not severe. (The lack of any support for [[floating point]] made it a poor choice for classic computational | + | It was intended by Martin Richards, its designer, mostly for systems programming (such as [[operating system]]s, [[compiler]]s, etc), for which the type limitation was not severe. (The lack of any support for [[floating point]] made it a poor choice for classic computational [[application]]s, the main use of computers at the time.) |
− | BCPL was also used in a number of other significant places, including much of the early work on the [[Xerox Alto]]. | + | BCPL was also used in a number of other significant places, including much of the early work on the [[Xerox Alto]] and the first [[Multi-User Dungeon]]. |
==History== | ==History== | ||
Line 17: | Line 17: | ||
==Portability== | ==Portability== | ||
− | Portability was a significant goal of BCPL, both in the language itself, and also in the openly available original BCPL compiler, itself written in BCPL; this compiler was ported to a large number of machines. | + | [[Portable|Portability]] was a significant goal of BCPL, both in the language itself, and also in the openly available original BCPL compiler, itself written in BCPL; this compiler was ported to a large number of machines. |
The compiler was structured as three phases, the third of which converted a machine-independent intermediate language called OCODE, generated by the second phase, into the target machine's [[object code]]. | The compiler was structured as three phases, the third of which converted a machine-independent intermediate language called OCODE, generated by the second phase, into the target machine's [[object code]]. | ||
− | Porting the compiler involved writing a new third phase; compiling that with the existing compiler on the host machine, producing a [[cross-compiler]]; and then running the compiler itself through the cross-compiler, producing a native compiler for the target machine. | + | Porting the compiler involved writing a new third phase; compiling that with the existing compiler on the host machine, producing a [[cross-compiler]]; and then running the compiler itself through the cross-compiler, producing object code for a native compiler for the target machine. |
==External links== | ==External links== | ||
Line 28: | Line 28: | ||
** [https://www.bell-labs.com/usr/dmr/www/bcpl.pdf BCPL Reference Manual] | ** [https://www.bell-labs.com/usr/dmr/www/bcpl.pdf BCPL Reference Manual] | ||
* [https://dl.acm.org/doi/10.1145/1476793.1476880 BCPL: a tool for compiler writing and system programming], Richards 1969 | * [https://dl.acm.org/doi/10.1145/1476793.1476880 BCPL: a tool for compiler writing and system programming], Richards 1969 | ||
− | * [https://www.cl.cam.ac.uk/~mr10/BCPLCTSS.html CTSS BCPL] from MIT | + | * [https://www.cl.cam.ac.uk/~mr10/cpl2bcpl.pdf How BCPL evolved from CPL] |
+ | * [https://arstechnica.com/features/2020/12/a-damn-stupid-thing-to-do-the-origins-of-c/ “A damn stupid thing to do” — the origins of C] - has good coverage of the CPL story | ||
+ | * [https://www.cl.cam.ac.uk/~mr10/BCPLCTSS.html CTSS BCPL] (from MIT) | ||
* [https://people.csail.mit.edu/saltzer/Multics/Multics-Documents/MSPM/bz-6-00.680618.bcpl-overview.pdf Multics BCPL] | * [https://people.csail.mit.edu/saltzer/Multics/Multics-Documents/MSPM/bz-6-00.680618.bcpl-overview.pdf Multics BCPL] | ||
* [http://www.bitsavers.org/pdf/mit/tx-2/TX-2_BCPL_Reference_Manual_May69.pdf TX-2 BCPL manual, 1969] | * [http://www.bitsavers.org/pdf/mit/tx-2/TX-2_BCPL_Reference_Manual_May69.pdf TX-2 BCPL manual, 1969] | ||
Line 38: | Line 40: | ||
* [https://github.com/LardoBoffin/BBC-BCPL_Overview Acornsoft BCPL] for the BBC Micro. | * [https://github.com/LardoBoffin/BBC-BCPL_Overview Acornsoft BCPL] for the BBC Micro. | ||
− | [[Category:Languages]] | + | [[Category: Languages]] |
Latest revision as of 17:14, 8 July 2024
BCPL is a programming language that was first developed in the late 1960's. Although little-used nowdays, it is historically important as the C programming language is derived from it. (C can be crisply, and aptly, described as 'BCPL with types and terser syntax'.)
Like ALGOL, from which it is descended, it includes modern control flow, including 'block structure'. Unlike Algol, it did not have types; the only type supported was 'word'.
It was intended by Martin Richards, its designer, mostly for systems programming (such as operating systems, compilers, etc), for which the type limitation was not severe. (The lack of any support for floating point made it a poor choice for classic computational applications, the main use of computers at the time.)
BCPL was also used in a number of other significant places, including much of the early work on the Xerox Alto and the first Multi-User Dungeon.
History
BCPL is based on Combined Programming Language (CPL), an ambitious collaboration between Cambridge University and the University of London, by a team including Christopher Strachey. BCPL was defined in part as a interim (originally the name apparently stood for 'Bootstrap CPL'; it later became 'Basic CPL') while waiting for CPL to appear (which it never did).
BCPL retains much of the syntactic richness of CPL, but did so while considerably limiting its complexity - thereby producing a very elegant language.
It was first implemented on the CTSS operating system, while Richards was visiting MIT. A number of the early UNIX personnel from Bell Labs became familiar with it there, while working on Multics.
Portability
Portability was a significant goal of BCPL, both in the language itself, and also in the openly available original BCPL compiler, itself written in BCPL; this compiler was ported to a large number of machines.
The compiler was structured as three phases, the third of which converted a machine-independent intermediate language called OCODE, generated by the second phase, into the target machine's object code.
Porting the compiler involved writing a new third phase; compiling that with the existing compiler on the host machine, producing a cross-compiler; and then running the compiler itself through the cross-compiler, producing object code for a native compiler for the target machine.
External links
- Martin Richards's BCPL Reference Manual, 1967
- BCPL: a tool for compiler writing and system programming, Richards 1969
- How BCPL evolved from CPL
- “A damn stupid thing to do” — the origins of C - has good coverage of the CPL story
- CTSS BCPL (from MIT)
- Multics BCPL
- TX-2 BCPL manual, 1969
- Essex BCPL for TOPS-10.
- TENEX BCPL from BBN - source code only.
- Alto BCPL
- The RIKKE BCPL System
- Arnor BCPL for Amstrad CPC and PCW computers.
- Acornsoft BCPL for the BBC Micro.