BCPL: Klassische Sprache

"BCPL" wurde 1968 zu Ausbildungszwecken entwickelt

Bei BCPL handelt es sich keineswegs um eine neue Programmiersprache wie wohl mancher vermutet, sondern vielmehr um eine schon fast antiquierte, die nie den Durchbruch geschafft hat. Wie kam sie zu ihrem seltsamen Namen? Wie meist in der Informatik verbirgt sich dahinter eine Abkürzung, die aus den Anfangsbuchstaben mehrerer Wörter gebildet wird, nämlich Basic Cambridge Programming Language. 1968 entwickelte Martin Richards diese Sprache zu Ausbildungszwecken in Cambridge. Sie besitzt als einzigen Typ das Maschinenwort, eine 32-Bit-Konstante. Alle anderen Konstruktionen bauen darauf auf und sind nur durch Funktionsaufruf zu erhalten.

Obwohl die Sprache nicht sehr bekannt ist, können C-Programmierer ihre Syntax leicht verstehen. Diese Tatsache liegt im geschichtlichen Werdegang von BCPL begründet. Als Ken Thomson 1970 die Sprache B für das erste UNIX-System entwikkelte, das auf der PDP-7 implementiert wurde, nahm er BCPL zum Vorbild. Hier waren nämlich schon die wichtigsten Kon- trolleinheiten der strukturierten Programmierung verwirklicht, die erst viel später den Durchbruch schafften. Darauf griff wie- derum Dennis M. Ritchie zurück, als er eine Programmiersprache für das UNIX-Betriebssystem auf einer DEC PDP-11 entwickeln sollte, die er dann C nannte.

Soviel zur Geschichte. Kommen wir nun zu der Programmiersprache und ihrer Implementierung von Metacomco, die diesem Bericht zugrunde liegt. Metacomco wurde durch seinen C-Compiler (Lattice C) bekannt, dessen Implementierung als besonders gut gilt. Deshalb war ich auch gespannt, wie dies bei BCPL gelungen ist. Ausgeliefert wird das Programmpaket auf zwei einseitigen Disketten und mit einem ca. 200seitigen, englischsprachigen Handbuch in einer stabilen Plastikhülle.

Das Handbuch weist eine klare Gliederung auf. Der Schwerpunkt liegt dabei auf der Beschreibung der Arbeitsumgebung, wie z.B. MENU+, das auch aus anderen Prograrnmiersprachen von Metacomco bekannt ist, Compiler, Screen-Editor und Linker. Außerdem enthält es eine Sprachdefinition, ihre Erweiterung in der vorliegenden Implementierung und die zugehörigen Bibliotheksfunktionen. Ein ausführlicher Anhang und ein sehr gutes Stichwortverzeichnis machen es unersetzbar für die tägliche Arbeit mit diesem Programm. Für alle, die noch nicht in BCPL programmieren können, es aber lernen wollen, bietet das Vorwort zwei Literaturhinweise auf einfahrende Bücher. Leider handelt es sich bei beiden um englischsprachige Werke.

Wie schon angedeutet, ist die gelieferte Entwicklungsumgebung Standard bei Metacomco. Dies gilt auch für das Link-Format. Dadurch ist es möglich, Funktionen einzubinden, die in einer anderen Metacomco-Sprache geschrieben sind oder sich an das Format des Entwicklungspakets von Atari halten. Der Compiler wird auf der Programmdiskette zusammen mit der Arbeitsumgebung geliefert. Dabei handelt es sich um einen Mehrphasen-Übersetzer. Er ist allerdings standardmäßig so eingestellt, daß er den Zwischencode im Speicher hält. So ist auch ohne Festplatte oder RAM-Floppy ein angenehmes, zügiges Arbeiten möglich, sieht man einmal von der Ladezeit ab.

Wer sich nicht scheut, eine etwas seltsam anmutende Notation zu lernen, oder wer sehr maschinennah arbeiten muß, aber trotzdem nicht auf den Komfort einer Hochsprache verzichten will, findet in BCPL sicher die richtige Sprache. Aber auch alle, die gerne die grafische Oberfläche des ST programmieren, erhalten in der vorliegenden Version eine umfassende Bibliothek der GEM- und AES-Funktionen, die das auf einfache Weise ermöglichen. Eine interessante EigensSchaft von BCPL ist die Einbettung der bedingten Übersetzung in den Sprachumfang. Dadurch eignet sie sich besonders für die Implementierung von maschinenabhängigen Programmen.

Dies wird immer dann benötigt, wenn ein Programm auf unterschiedlicher Hardware laufen soll. Um Ihnen einen Eindruck von der Notation eines in BCPL geschriebenen Programms zu vermitteln, wollen wir hier einige kurze Fragmente mit Erläuterung vorstellen:

WHILE <Bedingung> DO Beginn eines Blocks
$ (
<Programmstück>
$)<
Ende eines Blocks
LET <Variablenname>
= <Wert>
Deklarieren einer lokalen Variablen und Initialisieren mit einem Wert
LET <Funktionsname>
(<Parameter>)
BE Definition einer Prozedur mit Parametern
$( Blockbeginn
<Programmstück>
$ ) Blockende

<Programmstück> kann entweder ein einzelner Befehl oder ein Block sein. Ein Block besteht aus einem oder mehreren Kommandos, die durch $ ( $) geklammert sind.

Nach diesem kurzen Ausflug in die Programmierung sollen nun in einem Überblick die Kontrollstrukturen, die Vergleichs- sowie die logischen Operatoren folgen, um die Leistungsfähigkeit der Sprache aufzuzeigen. Dies geschieht in der BCPL- üblichen Notation.

FOR <Variable> <Startwert> TO <Endwert> [BY <Inkrement>] DO <Programmstück> WHILE <Bedingung> DO <Programmstück> UNTIL <Bedingung> DO <Programmstück> <Programmstück> REPEATWHILE <Bedingung> <Programmstück> REPEATUNTIL <Bedingung> <Programmstück> REPEAT (Endlosschleife)

VergleichsoperatorAusführung
= oder EQgleich
~ = oder \ oder NEungleich
>größer
>=größer gleich
< oder LTkleiner
< oder LEkleiner gleich
Logische VerknüpfungenAusführung
&oder/\ oder LOGANDlogische UND-Verknüpfung
| oder \ / oder LOGORlogisches ODER
EQVlogische Gleichheit
NEQVausschließende ODER-Verknüpfung
<<links schieben
>>rechts schieben
NOT oder ~ oder \Negation

Zum Abschluß seien noch die arithmetischen Operatoren für die Ganzzahlarithmetik aufgezählt. Die vorliegende Implementierung bietet auch eine Fließkomma-Arithmetik; dabei wird den Operatoren ein * vorangestellt.

OperatorAusführung
*Multiplikation
/Division
REMRest modulo
+Addition
-Subtraktion
ABSAbsolutwertbildung

Auf alle Objekte kann man mittels Zeiger zugreifen und diese dadurch auch verändern Wenn man dies bedenkt und die vorhandenen Strukturen und Operatoren betrachtet, wird klar, daß hier eine sehr leistungsfähige und schnelle Sprache zur Verfügung steht. Die mathematischen Funktionen wie auch komfortable File-Operationen sind als Bibliotheksfunktionen enthalten. Sie werden mit sechs Beispielprogrammen auf der zweiten Diskette geliefert. So lassen sich mit diesem Übersetzerpaket sicher alle Probleme kodieren, die mit einem Algorithmus gelöst werden können.

Ob es allerdings sinnvoll ist, heute noch in BCPL zu programmieren, ist fraglich, denn aus dieser Sprache hat sich meiner Ansieht nach eine bessere, nicht weniger leistungsfähige entwickelt, nämlich C. Dies sollte jeder bedenken, der sich entschließt, eine neue Programmiersprache zu erlernen, und sich für BCPL entscheidet. Auf jeden Fall erhält man aber mit dem vorliegenden Paket eine sehr gute Programmiersprache, die auch für professionelle Anwender geeignet ist.

Bezugsquelle:
G.Knupe GmbH & Co KG
Günterstr. 75
4600 Dortmund


Michael Beising
Aus: Atari-Magazin 09 / 1989, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite