Occam

Occam
Sprog klasse programmeringssprog , proceduresprog , procesorienteret programmeringssprog [d] og indrykningssprog [d]
Dukkede op i 1983
Forfatter David May
Udvikler INMOS
Dialekter occam-π (pi)
Blev påvirket CSP
påvirket Lethed

Occam  er et højt niveau proceduremæssigt parallelt programmeringssprog udviklet i begyndelsen af ​​1980'erne af en gruppe Oxford-forskere ledet af David May på vegne af det engelske firma INMOS Ltd. som en del af arbejdet med at skabe transputere . Opkaldt efter den engelske filosof fra det 14. århundrede, William af Occam, og hans maksime, kendt som Occams barbermaskine , er projektets motto.  

Der er en direkte sammenhæng mellem Occams sprog og transputere: INMOS transputere er designet, så Occams objekter og konstruktioner implementeres i deres instruktionssæt på bedst mulig måde. Faktisk er transputeren en "siliciumimplementering" af Ockham-sproget. I lang tid hævdede INMOS, at transputere ikke krævede et programmeringssystem af typen " assembler ", da Occam fuldstændig erstatter det.

Ockham er dog et typisk sprog på højt niveau , syntaktisk ligner Pascal eller C.

Teoretisk grundlag

Sproget er baseret på det såkaldte CSP-koncept (konceptet om interagerende sekventielle processer ), udviklet af Anthony Hoare . I det væsentlige er CSP en formalisme til at beskrive den tilsvarende beregningsmodel, udtryksfuld nok til at skrive og bevise sætninger på den, og kraftfuld og utvetydig nok til at være et programmeringssprog (der kendes adskillige implementeringer). Ifølge CSP introduceres først et sæt elementære begivenheder (alfabet), derefter konstrueres processer ud fra dem, og nye kan bygges ud fra de netop beskrevne processer. Processer, der kører parallelt, udveksler information ved hjælp af en bufferløs rendezvous-udveksling af information mellem et par (og kun et par) af processer gennem et specielt objekt - en kanal . Når den interagerer, venter den udvekslingsdeltager, der først henvendte sig til kanalen, på, at partneren er klar (mødestedet); når sidstnævnte sker, påbegyndes en udveksling. Brug af hukommelse, der deles af flere parallelle processer i CSP'en, er ikke tilladt.

Syntaks og semantik

Grundbegrebet i Ockham-sproget er beregningsprocessen; Det vigtigste kendetegn ved en proces er, at den kan startes og afsluttes. Sproget definerer flere simple processer: tildelingsprocessen, input- og outputprocesser gennem et rør (angivet med symbolerne ? og ! ), de formelle SKIP- og STOP- processer (den første afsluttes med det samme, den anden aldrig), timerens læsning og timeren forsinke processer. Alle andre processer kan opnås ved hierarkisk konstruktion (gennem tidligere definerede). Til dette formål leverer Ockham et sæt af proceskonstruktører: SEQ (definerer processen med sekventiel udførelse af processer), PAR (definerer processen med parallel udførelse af processer), samt konstruktøren af ​​den betingede proces IF , den cykliske proces Mens processen udvælgelse ALT . I dette tilfælde er reglen, at en sammensat proces af typen SEQ eller PAR anses for afsluttet, når alle dens indgående processer er afsluttet. Processer kan navngives og kaldes ved navn, ved at sende parametre. SEQ , PAR , IF og ALT processerne kan replikeres (multipliceres) ved hjælp af FOR -replikatoren . ALT - processen (som PAR ) introducerer indeterminisme i sproget , da det menes, at hvis flere betingelser er opfyldt samtidigt, er det umuligt præcist at forudsige det fremtidige begivenhedsforløb.

eksempel: En multiplexer, der uendeligt læser fra rækken af ​​kanaler ind[] og sender til den fælles kanal ud, ved hjælp af mellemliggende variabel temp MENS SAND INT temp: ALT i=0 FOR N i [i] ? Midlertidig ud! Midlertidig eksempel: Kaskade af parallelle multipleksere. Indgangen er en matrix af M*N in[ kanaler], outputtet er udkanalen. Et array af M kanaler ch[] bruges til kommunikation mellem multipleksere i kaskaden: PAR -- kaskade af parallelle inputmultipleksere PAR i=0 FOR M -- M parallelle multipleksere, der behandler N kanaler af i[] hver MENS SAND INT temp: ALT j=i*N FOR N i[j] ? Midlertidig ch[i]! Midlertidig WHILE TRUE -- root multiplexer læser M mellemliggende kanaler ch[] INT temp: ALT i=0 FOR M ch[i] ? Midlertidig ud! Midlertidig eksempel: I/O-bufferproces. Ved at køre procesbufferen (ind, ud, N) kan udkanalen falde bagud i ind-kanalen op til N meddelelser, der skal bufres inde i bufferprocessen: PROC buffer( CHAN OF INT in, out, INT N) CHAN OF INT in.wait, out.wait: INT n : -- optælling af bufferværdier [N]INT buff: SEQ n:=0 PAR—input INT i, enhver: -- i - buffer skrive pointer SEQ i:=0 MENS SAND SEQ MENS n<(N-1) SEQ i? buff[i] n:=n+1 HVIS n=1 ud.vent! nogen RIGTIGT SPRINGE i:=(i+1) MOD N vente? ethvert output INT j, enhver: -- j — pointer til at læse fra buffer SEQ j:=0 MENS SAND SEQ ud.vente? nogen MENS n>0 SEQ ud! buff[j] n:=n-1 HVIS n=(N-2) vente! nogen RIGTIGT SPRINGE j:=(j+1) MOD N  :

Når du studerer eksemplerne, skal du huske på, at "to minus"-symbolet - betyder begyndelsen af ​​kommentaren til slutningen af ​​linjen, og "dot"-symbolet . kan være en del af en identifikator i Ockham og har ikke nogen særlig betydning. Kolonkarakter : betyder "slutningen af ​​beskrivelsen". Ossam er følsom over for store/små bogstaver i identifikatorer.

Et interessant træk ved Occam-sproget er inklusion af indrykning (indrykning, "stige") i dets syntaks. Denne populære og meget udtryksfulde Ockham struct highlighter er den eneste måde at specificere konstruktørernes omfang. Blandt de utvivlsomme fordele ved en sådan løsning er reduktionen i antallet af tjenestetegn, når du skriver en konstruktion (der er ikke behov for ord som BEGIN-END eller krøllede parenteser) og den tvungne standardisering af tekstformatering, hvilket øger deres læsbarhed .

Et eksempel på vigtigheden af ​​"stigen":

SEQ proc1() PAR proc21() proc22() proc3()

her vil proc1 blive udført først, derefter vil proc21 og proc22 blive udført parallelt, og først efter afslutningen af ​​den længste af dem vil proc3 starte. Hvis vi flytter opkaldet til proc3 et niveau til højre, ændres rækkefølgen af ​​evalueringen:

SEQ proc1() PAR proc21() proc22() proc3()

Her starter proc3 samtidig med proc21 og proc22.


Versioner og implementeringer

Officielt, som en del af TDS (Transputer Development System), INMOS Ltd. implementeringer af Occam 1.0, Occam 2.0 og Occam 2.1 blev frigivet. Efter købet af virksomheden og indskrænkningen af ​​udviklingen på transputerprojektet blev Occam 3-specifikationen privat udgivet af Occam-udviklerne. Senere implementerede en gruppe entusiaster Occam 2.5-sproget, som var Occam 2.1 med nogle innovationer fra Occam 3 Sidstnævnte var ikke fuldt implementeret.

Udviklingen af ​​Occam-sproget gik i retning af at tilføje nye datatyper, højniveaukoncepter og værktøjer, der letter programmering. Samtidig blev sprogets filosofi ikke revideret.

Der er implementeringer af Ockham til andre ikke-transputerarkitekturer, for det meste amatørarkitekturer.

Der er også kendte biblioteker, som implementerer primitiverne i det grundlæggende Occam-koncept i CSP, som tillader programmering i Occam-stilen på andre sprog.

Noter

Litteratur

Links