Eisspeedway

occam

occam
Pojawienie się

1983

Paradygmat

imperatywny, proceduralny, współbieżny

Aktualna wersja stabilna

2.1 (stabilna) / 1994

Twórca

David May

occamjęzyk programowania, opracowany w roku 1983 przez firmę INMOS, a będący praktyczną implementacją formalizmu CSP (z ang. Communicating Sequential Processes[1][2]). Język opracowany został i był przede wszystkim wykorzystywany jako narzędzie programowania transputerów. Nazwa pochodzi od nazwiska Williama Ockhama, kojarzonego z „brzytwą Ockhama”.

occam jest językiem proceduralnym. Charakterystyczną jego cechą jest wsparcie dla programowania współbieżnego. Program w occamie uruchamia typowo wiele procesów, które mogą komunikować się między sobą za pośrednictwem nazwanych kanałów komunikacyjnych. Komunikacja za pośrednictwem kanałów jest synchroniczna – komunikujące się procesy mogą kontynuować wykonanie, dopiero gdy zakończy się wymiana danych. Kanały zapewniają więc również synchronizację procesów.

W implementacji transputerowej język wyposażony jest w możliwość zdefiniowania rozmieszczenia procesów na sieci procesorów, z wykorzystaniem połączeń pomiędzy nimi jako kanałów komunikacyjnych.

occam jest językiem świadomie minimalistycznym i bardzo formalnie zdefiniowanym. Zabronione są wszelkie konstrukcje, które mogłyby prowadzić do niejednoznaczności działania programu (np. równoległe procesy nie mogą modyfikować żadnych wspólnych lokacji pamięci, do których mają dostęp). Umożliwia to formalne dowodzenie poprawności programów napisanych w tym języku.

Obecnie istnieje działający na współczesnych komputerach kompilator occama, KRoC (ang. Kent Retargetable occam Compiler). Kompiluje on programy do plików wykonywalnych działających współbieżnie. Wspiera on też post-mortem debugging, czyli debugowanie programu po błędzie, który spowodował jego wyłączenie, również wyłączenie spowodowane zakleszczeniem.

Wersje języka

occam 1

occam 1[3] (wydany w 1983 r.) był wstępną wersją języka. Ze katalogu typów danych, dostępnych z czasem w języku, wspierał tylko VAR, który był typem liczby całkowitej o zakresie uzależnionym od długości słowa w docelowej architekturze, oraz jedno wymiarowe tablice.

occam 2

occam 2[4] to rozszerzenie, stworzone przez INMOS Ltd w 1987 roku które dodało liczby zmiennoprzecinkowe, funkcje, wielowymiarowe tablice i więcej typów danych takich jak liczby całkowite różnych rozmiarów (INT16, INT32) oraz bajty (BYTE).

Po tej korekcie, occam stał się językiem zdolnym do wyrażania użytecznych programów, podczas gdy occam 1 bardziej nadawał się do badania algorytmów i odkrywania nowego języka (chociaż należy zauważyć, że kompilator occama 1 był napisany w occamie 1, co udowadnia, że dało się w tamtej wersji języka pisać programy o znaczącym rozmiarze i stopniu skomplikowania).

occam 2.1

occam 2.1[5] był ostatnim z serii ulepszeń occama, w które miała wkład firma INMOS. Zdefiniowany w 1994 r., miała na niego wpływ wcześniejsza propozycja języka occam 3 (zwanego także "occam91" we wczesnych fazach jego rozwoju), stworzonego przez Geoffa Barretta w INMOSie we wczesnych latach dziewięćdziesiątych. Ulepszony Podręcznik Użytkownika opisujący occam 3 był rozprowadzany w społeczności[6], ale język nigdy nie otrzymał działającego kompilatora.

occam 2.1 wnosić nową funkcjonalność do occama 2, mianowicie:

  • Nazwane typy danych (DATA TYPE x IS y)
  • Nazwane rekordy (ang. named records)
  • Spakowane rekordy (ang. packed records)
  • Osłabienie niektórych reguł konwersji typów
  • Nowe operatory (np. BYTESIN)
  • Ponowne typowanie (ang. channel retyping) kanałów i tablice kanałów
  • Możliwość zwracania tablicy o stałym rozmiarze z funkcji

Pełna lista zmian jest dostępna w Dodatku P instrukcji użytkowania[7].

occam-π

occam-π[8] to popularna nazwa wariantu occama zaimplementowanego przez późniejsze wersje kompilatora KRoC. Dodanie symbolu "π" (pi) do nazwy "occam"jest aluzją do faktu, że occam zaimplementowany przez KRoC zawiera wiele pomysłów inspirowanych przez Pi calculus. Zawiera znaczącą liczbę rozszerzeń do wersji 2.1, na przykład:

  • Zagnieżdżone protokoły
  • Tworzenie procesu w czasie wykonania
  • Mobilne kanały, dane i procesy
  • Rekurencję
  • Dziedziczenie protokołów
  • Konstruktory tablic
  • Rozszerzone rendezvous

Zobacz też: Erlang (język programowania)

Przypisy

  1. http://www.usingcsp.com/cspbook.pdf
  2. Communicating Sequential Processes, C.A.R. Hoare. Prentice Hall International Series in Computer Science, 1985. ISBN 0-13-153271-5 (0-13-153289-8)
  3. INMOS: occam Programming Manual. Prentice-Hall, 1984. ISBN 0-13-629296-8.
  4. Ericsson-Zenith: occam 2 Reference Manual. Prentice-Hall, 1988. ISBN 0-13-629312-3.
  5. INMOS: occam 2.1 Reference Manual. SGS-THOMSON Microelectronics Ltd, 1995-05-12.
  6. Geoff Barrett, Steven Ericsson-Zenith, occam 3 Reference Manual, INMOS, 31 marca 1992 [dostęp 2008-03-24].
  7. INMOS occam 2.1 Reference Manual
  8. Fred Barnes and Peter Welch: occam-pi: blending the best of CSP and the pi-calculus. 2006-01-14. [dostęp 2006-11-24].

Linki zewnętrzne