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.

  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)

From Wikipedia, the free encyclopedia · View on Wikipedia

Developed by Nelliwinne