Берілген программалау тілі CSP тіліне негізделген( Communicating Sequential Process- өзараәрекеттесуші тізбекті процесстер). Алдымен ** принцпін қысқаша қарастырамыз.
CSP алғашында 1978 жылы Тони Хоармен сипатталған. Бұл тіл Occam программалау тілін және тағы басқа соның ішіндегі Ада тілін жасауға ықпалын тигізді.
CSP тілі хабарды синхронды жіберуге және қорғалған өзараәрекеттесу негізделген.
Өзараәрекеттесу операторларын қарастырамыз.
Апроцессі В процесіне өрнек мәнінжіберу керек. CSP тілінде ол мынадай түрде болады:
process А {…В!е;…}
process В {…А?х…}
В!е операторы шығару операторы деп аталады. Ол В жіберілу процесін және осы процесске жіберетін өрнектің е мәнін береді. А?x енгізу операторы деп аталады. Ол А енгізу процесі мен қабылданған хабар жазылатын х айнымалысын көрсетеді. Берілген операторлар енгізу және шығару операторлары деп аталады. Енгізу және шығару операторлары процесті басқа процесс сәйкес келесі операторды оаындағанға дейін тоқтатады, содан кейін екі оператор бір уақытта орындалады. Егер с және х айнымалысының типтері сәйкес келсе, онда берілген операторлар келісілген деп аталады. өзара әрекеттесудің келесілген операторларының орындалуын үрестірілген меншіктелу депқарастыруға болады. Ондағы бір процссетің мәні екіншісіндегі айнымалыға меншіктеледі. өзараәрекеттесу жүргенде бұл процесстер синхрондалады, одан кейін жұмыстары тәуелсіз орындалады.
Occam тілі CSP тілін кеңейтеді. Occam тілінің шығуы «Occam алмасы« деген сөзден шыққан. Ол бірінші рет 80 жылдардың басында жасалған және транспьютермен жұмысқа арналған, қазір осы тілдің 3 нұсқасы бар.
Occam тілінің базалық элементтері хабарлаулар және үш қарапайым «процесс»: меншіктеу, енгізу және шығару болады. Меншіктеупроцесі қарапайым меншіктеу операторы. Енгізу және шығару процесі CSP тілінің енгізу және шығару командаларына ұқсас, бірақ каналдардың атаулары болады, ондағы әрбір канал бір ғана жіберуші мен алушыдан тұрады.
Базалық процесстер конструкторы көмегімен әдеттегі процестерге біріктіріледі. Тізбектегі конструктор параллель конструктор және өзараәрекеттсудің қорғалған операторы бар. Тілдің синтаксисіне сәйкес әрбір базалық процесс, конструктор және хабарлау жеке жолдан тұрады. Хабарлау қос нүктемен аяқталады,ал жазуларда шегінулер қолданылады.
Occam тіліндегі программа процесстердің статистикалық санына және өзараәрекеттесудің статистикалық жолынан тұрады. Рекурсия және динамикалық құрулардың басқа типтері және объектілердің атауларықолдамайды, сондықтан көптеген алгоритмдерді программалау қиын. Сонымен қатар, берілген қасиет программадағы процесстер санын анықтауға және олардың өзараәрекеттесу әдістерінкомпилятордың анықтауына мүмкіндік туғызады.
Берілген тілде құрамдас типтер диапозоны шектелген:
REAL32, REAL64, INT, BOOL.
Барлық хабарлаулар қос нүктемен анықталады.
Occam тілінде екі базалық констуктор қолданылады: тізбекті орындалу үшін SEQ және параллель үшін PAR конструкторы көмегімен құрылады. Мысалы:
INT x,y:
SEQ
X:=X+1
Y:=Y+1
Процесстер PAR конструкторы көмегімен құрылады. Олар каналдар арқылы өзараәрекеттеседі, оларға қатынау базалық енгізу ? және шығару! Операторлары арқылы жүзеге асырылады. Мысалы, төменде екі процесс көмегімен-біріншісі пернепақтадан оқу және екіншісі экранға жазу үшін қосбуферлеуді қолданатын программа берілген: процесстерқосымша канал comm арқылы хабарласады; бұл процесстің әрбіреуіде сһ жергілікті айнымальсы бар (сһ-бір символдық буфер).
CHAN OF BYTE comm:
PAR
WHILE TRUE-пернетақтадан енгізу процесі
BYTE сһ:
SEQ
keyboard ?ch
comm ! сһ
Мұндағы keyboard және screen-келісім бойынша сыртқы құрылғылармен (пернетақта және экран) байланысқан каналдар.
Қорғалған өзараәрекеттесу ALT конструкторымен жасалады. Қорғау енгізу процессінен, немесе логикалық өрнектен және енгізу процесінен,немесе логикалық өрнек және SKIP конструкторынан тұрады.
Occam тілінде шығару командасын ALT конструкторын қорғауға қолдануға болмайды. Одан басқа, бұл тіл егер қолданылмаса бос хабарларды рұқсат етпейді.
Occam тілінің программаларының кейбір мысалынwww.cs.ncl.ac.uk/usr/local/kroc/current/course/examples-дан алуға болады.