Occam

Occam
Nyelvóra programozási nyelv , procedurális programozási nyelv , folyamatorientált programozási nyelv [d] , és behúzási nyelv [d]
Megjelent 1983
Szerző David May
Fejlesztő INMOS
Dialektusok occam-π (pi)
Befolyásolva CSP
befolyásolta Könnyű

Az Occam  egy magas szintű eljárási párhuzamos programozási nyelv , amelyet az 1980-as évek elején oxfordi tudósok egy csoportja fejlesztett ki David May vezetésével az angol INMOS Ltd. megbízásából. a transzputerek létrehozásával kapcsolatos munka részeként . A 14. századi angol filozófus, Occam Vilmos után nevezték el, és az Occam borotvájaként ismert maximája a projekt mottója.  

Közvetlen kapcsolat van az Occam nyelve és a transzputerek között: az INMOS transzputereket úgy tervezték, hogy az Occam objektumai és konstrukciói a lehető legjobb módon valósuljanak meg az utasításkészletükben. Valójában a transzputer az Ockham nyelv "szilícium megvalósítása". Az INMOS sokáig azt állította, hogy a transzputerekhez nincs szükség " asszembler " típusú programozási rendszerre, mivel az Occam teljesen helyettesíti azt.

Az Ockham azonban egy tipikus magas szintű nyelv , szintaktikailag hasonló a Pascalhoz vagy a C -hez.

Elméleti alapok

A nyelv az Anthony Hoare által kifejlesztett úgynevezett CSP-koncepción (az interakciós szekvenciális folyamatok fogalmán) alapul . Lényegében a CSP egy formalizmus a megfelelő számítási modell leírására, elég kifejező ahhoz, hogy tételeket írjon és bizonyítson rajta, és elég erős és egyértelmű ahhoz, hogy programozási nyelv legyen (több megvalósítás is ismert). A CSP szerint először egy elemi eseményhalmazt (ábécét) vezetünk be, majd ezekből folyamatokat építünk fel, és az imént leírt folyamatokból újakat építhetünk. A párhuzamosan futó folyamatok információt cserélnek egy puffer nélküli találkozási információcsere segítségével egy pár (és csak egy pár) folyamat között egy speciális objektumon - egy csatornán keresztül . Az interakció során a csatornához forduló csererésztvevő először megvárja, hogy a partner készen álljon (a találkozási pont); az utóbbi bekövetkeztekor csere indul meg. A CSP-ben több párhuzamos folyamat által megosztott memória használata nem megengedett.

Szintaxis és szemantika

Az Ockham-nyelv alapfogalma a számítási folyamat; Egy folyamat fő jellemzője, hogy elindítható és befejezhető. A nyelv több egyszerű folyamatot határoz meg: a hozzárendelési folyamatot, a bemeneti és kimeneti folyamatokat egy csövön keresztül (a ? és a ! szimbólumokkal jelöljük ), a formális SKIP és STOP folyamatokat (az első azonnal befejeződik, a második soha), az időzítő olvasási és időzítőt késlelteti a folyamatokat. Az összes többi folyamat hierarchikus felépítéssel érhető el (a korábban meghatározottakon keresztül). Erre a célra az Ockham egy folyamatkonstruktor készletet biztosít: SEQ (meghatározza a folyamatok szekvenciális végrehajtásának folyamatát), PAR (meghatározza a folyamatok párhuzamos végrehajtásának folyamatát), valamint az IF feltételes folyamat konstruktora , a ciklikus folyamat. WHILE a folyamatkiválasztási folyamat ALT . Ebben az esetben a szabály az, hogy a SEQ vagy PAR típusú összetett folyamatot akkor tekintjük befejezettnek, ha az összes alkotó folyamat befejeződött. A folyamatok név szerint nevezhetők és hívhatók, paraméterek átadásával. A SEQ , PAR , IF és ALT folyamatok replikálhatók (szorozhatók) a FOR replikátor segítségével . Az ALT folyamat (mint a PAR ) indeterminizmust visz be a nyelvbe , mivel úgy gondolják, hogy ha több feltétel egyidejűleg teljesül, lehetetlen pontosan megjósolni az események jövőbeli menetét.

példa: Egy multiplexer, amely vég nélkül olvas a be[] csatornák tömbjéből, és továbbít a közös kimenetre, közbenső változó hőm MÉG IGAZ INT hőmérséklet: ALT i=0 N-HOZ az [i]-ben? hőm ki! hőm példa: Párhuzamos multiplexerek kaszkádja. A bemenet egy M*N be[ csatorna] tömbje, a kimenet a kimeneti csatorna. A ch[] M csatorna tömbjét használják a kaszkád multiplexerek közötti kommunikációhoz: PAR -- párhuzamos bemeneti multiplexerek kaszkádja PAR i=0 FOR M -- M párhuzamos multiplexer, amelyek mindegyike in[] N csatornáját dolgozza fel MÉG IGAZ INT hőmérséklet: ALT j=i*N FOR N in[j] ? hőm ch[i] ! hőm WHILE TRUE -- a gyökérmultiplexer M köztes csatornát olvas ch[] INT hőmérséklet: ALT i=0 M-RE ch[i] ? hőm ki! hőm példa: I/O pufferelési folyamat. A folyamatpuffer futtatása (in, out, N) lehetővé teszi, hogy a kimenő csatorna lemaradjon a bemeneti csatornától legfeljebb N üzenetet kell pufferelni a pufferfolyamatban: PROC puffer (CHAN OF INT be, ki, INT N) CHAN OF INT in.wait, out.wait: INT n : -- a pufferelt értékek száma [N]INT buff: SEQ n:=0 PAR – bemenet INT i, tetszőleges: -- i - puffer írási mutató SEQ i:=0 MÉG IGAZ SEQ Míg n<(N-1) SEQ ban ben? buff[i] n:=n+1 HA n=1 ki.várj! Bármi IGAZ UGRÁS i:=(i+1) MOD N be.várj? tetszőleges kimenet INT j, tetszőleges: -- j — mutató a pufferből való olvasáshoz SEQ j:=0 MÉG IGAZ SEQ ki.várj? Bármi WHILE n>0 SEQ ki! buff[j] n:=n-1 HA n=(N-2) be.várj ! Bármi IGAZ UGRÁS j:=(j+1) MOD N  :

A példák tanulmányozása során ne feledje, hogy a „két mínusz” szimbólum a megjegyzés elejétől a sor végéig, a „pont” szimbólum pedig . része lehet egy azonosítónak az Ockham nyelvben, és nincs különösebb jelentése. Kettőspont karakter : azt jelenti, hogy "a leírás vége". Az Ossam érzékeny a kis- és nagybetűkre az azonosítókban.

Az Occam nyelv érdekessége a behúzás (behúzás, "létra") beépítése a szintaxisába. Ez a népszerű és rendkívül kifejező Ockham struct kiemelő az egyetlen módja annak, hogy meghatározza a konstruktorok körét. Egy ilyen megoldás kétségtelen előnyei közé tartozik a szervizkarakterek számának csökkenése konstrukció írásakor (nincs szükség olyan szavakra, mint a BEGIN-END vagy a zárójelek), valamint a szövegformázás kényszerített szabványosítása, ami javítja az olvashatóságot .

Egy példa a "létra" fontosságára:

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

itt először a proc1, majd a proc21 és a proc22 párhuzamosan, és csak a leghosszabb befejezése után indul el a proc3. Ha a proc3 hívását egy szinttel jobbra toljuk, akkor megváltozik a kiértékelés sorrendje:

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

Itt a proc3 a proc21-el és a proc22-vel egy időben indul.


Verziók és megvalósítások

Hivatalosan a TDS (Transputer Development System) részeként az INMOS Ltd. megjelent az Occam 1.0, Occam 2.0 és Occam 2.1 implementációja. A cég megvásárlása és a transzputer projekt fejlesztéseinek visszaszorítása után az Occam 3 specifikációt az Occam fejlesztői magánkézben publikálták, majd a rajongók egy csoportja bevezette az Occam 2.5 nyelvet, ami az Occam 2.1 volt az Occam 3 néhány újításával. Ez utóbbit nem hajtották végre teljes mértékben.

Az Occam nyelv fejlesztése új adattípusok, magas szintű koncepciók és programozást megkönnyítő eszközök hozzáadásának irányába lépett. Ugyanakkor a nyelv filozófiája nem került átdolgozásra.

Vannak az Ockham implementációi más, nem transzputer architektúrákhoz is, többnyire amatőrekhez.

Ismeretesek olyan könyvtárak is, amelyek a CSP Occam alapkoncepciójának primitívumait valósítják meg, amely lehetővé teszi az Occam stílusban történő programozást más nyelveken.

Jegyzetek

Irodalom

Linkek