Occam

Occam
Basisdaten
Paradigmen: imperativ, parallel
Erscheinungsjahr: 1985
Designer: David May
Entwickler: Inmos Ltd.
Aktuelle Version: 2.1  ()
Dialekte: occam-π
Beeinflusst von: Communicating Sequential Processes

Occam ist eine imperative, parallele Programmiersprache, die auf Communicating Sequential Processes aufbaut. Sie wurde um 1985 unter anderem von David May bei der Firma Inmos entwickelt und ist nach dem Philosophen und Logiker Wilhelm von Ockham (im Englischen auch Occam) benannt. Ihr Einsatzschwerpunkt liegt auf der Implementierung verteilter Systeme, insbesondere von Transputer-Systemen. Ursprünglich war sie für Mikroprozessoren von INMOS gedacht, existiert aber heute auch für andere Plattformen.

Grundkonzept

Occam wurde nach Wilhelm von Ockham benannt, da die Sprache in ihrem Ansatz dem Prinzip von Ockhams Rasiermesser folgt. Es existieren in Occam lediglich fünf Grundkonstrukte: Sequenz, Parallelität, Alternative, Bedingung und Schleife. Jeder dieser Konstrukte bildet einen eigenen Prozess, der aus einzelnen Statements besteht, die wiederum selbst Prozesse darstellen. Die Kommunikation zwischen den Prozessen erfolgt über Channels (deutsch: Kanäle). Mit einem Fragezeichen (?) werden Channels eingelesen und mit einem Ausrufezeichen (!) werden Daten auf einem Channel ausgegeben. Kommentare werden mit -- eingeleitet und reichen bis zum Zeilenende. Funktionsblöcke werden zusammengefasst, indem jeder Zeile der gleiche Einzug vorangestellt wird. Die beiden wichtigsten Konstrukte Sequenz und Parallelität sollen kurz vorgestellt werden. Besonders die Parallelität unterscheidet Occam von den sequenziellen Programmiersprachen wie C, BASIC oder Pascal.

Sequenz

Eine Sequenz wird mit dem Schlüsselwort SEQ eingeleitet. Occam verhält sich innerhalb einer Sequenz wie eine herkömmliche Programmiersprache.

SEQ
  EKanal ? a
  b := a * 5
  AKanal ! b

Im obigen Codefragment wird zunächst der Wert aus dem Channel EKanal ausgelesen und in der Variablen a abgelegt. Dann wird der Variablen b der fünffache Wert von a zugewiesen und die Variable b an den Channel AKanal ausgegeben. Die Abarbeitung der Statements erfolgt dabei der Reihe nach (sequentiell).

Parallelität

Parallel abzuarbeitende Anweisungen werden mit dem Schlüsselwort PAR eingeleitet. Jeder darin enthaltene Prozess wird dabei gleichzeitig gestartet.

PAR
  SEQ
    EKanal1 ? a
    EKanal2 ? b
    c := a * b
    AKanal1 ! c
  SEQ
    EKanal3 ? x
    EKanal4 ? y
    z := x + y
    AKanal2 ! z

Der gesamte PAR-Prozess besteht hier aus zwei SEQ-Prozessen, die ihrerseits wiederum aus einzelnen Statements bestehen. Die beiden SEQ-Prozesse werden (wegen der ihnen übergeordneten PAR-Anweisung) gleichzeitig gestartet und parallel abgearbeitet.

Hello, World! in Occam

PROC HelloWorld()
  []BYTE helloworldstring :
  SEQ
    helloworldstring := "Hello, World!"
    screen ! helloworldstring

Literatur

  • Ralf Steinmetz: OCCAM 2. Hüthig, Heidelberg 1988, ISBN 3-7785-1654-X.
  • Heinz Ebert: Transputer und Occam. Das Handbuch für Systementwickler. Heise, Hannover 1993, ISBN 978-3-88229-000-4 (781 S.).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.