Occam | |
---|---|
Kieliluokka | ohjelmointikieli , prosessiohjelmointikieli , prosessisuuntautunut ohjelmointikieli [d] ja sisennyskieli [d] |
Esiintyi | 1983 |
Tekijä | David May |
Kehittäjä | INMOS |
Murteet | occam-π (pi) |
Vaikutettu | CSP |
vaikutti | Helppous |
Occam on korkean tason proseduaalinen rinnakkaisohjelmointikieli , jonka on kehittänyt 1980-luvun alussa David Mayn johtama Oxford-tutkijaryhmä englantilaisen INMOS Ltd :n puolesta . osana transutereiden luomistyötä . Nimetty 1300-luvulla eläneen englantilaisen filosofin William of Occam mukaan, ja hänen lauseensa, joka tunnetaan nimellä Occamin partaveitsi , on projektin motto.
Occamin kielen ja transputereiden välillä on suora yhteys: INMOS-muuntimet on suunniteltu niin, että Occamin objektit ja konstruktit toteutetaan käskysarjassaan parhaalla mahdollisella tavalla. Itse asiassa transputer on Ockham-kielen "pii-toteutus". INMOS väitti pitkään, että muuntajat eivät vaadi " assembler " -tyyppistä ohjelmointijärjestelmää, koska Occam korvaa sen kokonaan.
Ockham on kuitenkin tyypillinen korkean tason kieli , joka on syntaktisesti samanlainen kuin Pascal tai C.
Kieli perustuu ns. CSP-konseptiin ( vuorovaikutteisten peräkkäisten prosessien käsite ), jonka on kehittänyt Anthony Hoare . Pohjimmiltaan CSP on formalismi vastaavan laskennallisen mallin kuvaamiseen, riittävän ilmeikäs kirjoittaakseen ja todistaakseen siihen lauseita, ja riittävän tehokas ja yksiselitteinen ollakseen ohjelmointikieli (useita toteutuksia tunnetaan). CSP:n mukaan ensin esitellään alkeistapahtumien joukko (aakkoset), sitten niistä rakennetaan prosesseja ja juuri kuvatuista prosesseista voidaan rakentaa uusia. Rinnakkain käynnissä olevat prosessit vaihtavat tietoa käyttämällä puskuritonta tiedonvaihtoa prosessiparin (ja vain parin) välillä erityisen kohteen - kanavan - kautta . Vuorovaikutuksessa kanavalle kääntynyt vaihdon osallistuja odottaa ensin kumppanin olevan valmis (kohtaamispiste); kun jälkimmäinen tapahtuu, vaihto aloitetaan. Useiden rinnakkaisten prosessien jakaman muistin käyttö CSP:ssä ei ole sallittua.
Ockham-kielen peruskäsite on laskennallinen prosessi; Prosessin pääominaisuus on, että se voidaan aloittaa ja saattaa loppuun. Kieli määrittelee useita yksinkertaisia prosesseja: osoitusprosessin, syöttö- ja lähtöprosessit putken kautta (merkitty symboleilla ? ja ! ), muodolliset SKIP- ja STOP -prosessit (ensimmäinen päättyy välittömästi, toinen ei koskaan), ajastimen luku- ja ajastin. viivästyttää prosesseja. Kaikki muut prosessit voidaan saada hierarkkisella rakentamisella (aiemmin määriteltyjen prosessien kautta). Tätä tarkoitusta varten Ockham tarjoaa joukon prosessikonstruktoreja: SEQ (määrittää prosessien peräkkäisen suoritusprosessin), PAR (määrittää prosessien rinnakkaissuoritusprosessin) sekä ehdollisen prosessin IF rakentajan , syklisen prosessin. WHILE , prosessin valintaprosessi ALT . Tässä tapauksessa sääntönä on, että SEQ- tai PAR -tyypin yhdisteprosessi katsotaan valmistuneeksi, kun kaikki sen osaprosessit ovat valmiit. Prosesseja voidaan nimetä ja kutsua nimellä, ohittamalla parametrit. SEQ- , PAR- , IF- ja ALT - prosessit voidaan replikoida (kerrota) FOR -toistimen avulla . ALT - prosessi (kuten PAR ) tuo kieleen indeterminismin , koska uskotaan, että jos useat ehdot täyttyvät samanaikaisesti, on mahdotonta ennustaa tarkasti tulevaa tapahtumien kulkua.
esimerkki: Multiplekseri, joka lukee loputtomasti kanavajoukosta sisään[] ja lähettää yhteiselle ulostulokanavalle, käyttämällä välimuuttuvaa lämpötilaa TOSI INT lämpötila: ALT i=0 N:lle in [i] ? lämpötila ulos! lämpötila esimerkki: Rinnakkaisten multiplekserien kaskadi. Tulo on joukko M*N sisään[ kanavaa], lähtö on ulostulokanava. M-kanavaa ch[] käytetään kommunikointiin kaskadin multiplekserien välillä: PAR -- rinnakkaisten tulokanavoimien sarja PAR i=0 FOR M -- M rinnakkaismultiplekseria, jotka käsittelevät N kanavaa in[] TOSI INT lämpötila: ALT j=i*N N:lle in [j] ? lämpötila ch[i]! lämpötila WHILE TRUE -- juurimultiplekseri lukee M välikanavaa ch[] INT lämpötila: ALT i=0 M:lle ch[i]? lämpötila ulos! lämpötila esimerkki: I/O-puskurointiprosessi. Prosessipuskurin (sisään, ulos, N) suorittaminen mahdollistaa ulostulokanavan jäämisen sisääntulokanavan taakse enintään N viestiä puskuroitavaksi puskurointiprosessin sisällä: PROC-puskuri (CHAN OF INT sisään, ulos, INT N) CHAN OF INT in.wait, out.wait: INT n : -- puskuroitujen arvojen määrä [N]INT-ihminen: SEQ n:=0 PAR — syöttö INT i, mikä tahansa: -- i - puskurin kirjoitusosoitin SEQ i:=0 TOSI SEQ WHILE n<(N-1) SEQ sisään? buff[i] n:=n+1 JOS n = 1 ulos. Odota! minkä tahansa TOTTA OHITA i:=(i+1) MOD N in. odota? mikä tahansa lähtö INT j, mikä tahansa: -- j — osoitin puskurista luettavaksi SEQ j:=0 TOSI SEQ ulos. odota? minkä tahansa WHILE n>0 SEQ ulos! buff[j] n: = n-1 JOS n=(N-2) sisään. odota! minkä tahansa TOTTA OHITA j:=(j+1) MOD N :Esimerkkejä tutkiessa tulee pitää mielessä, että "kaksi miinus" -symboli tarkoittaa kommentin alusta rivin loppuun ja "piste"-symboli . voi olla osa tunnistetta Ockhamissa, eikä sillä ole erityistä merkitystä. Kaksoispiste : tarkoittaa "kuvauksen loppua". Ossam on herkkä isoille/pienille kirjaimille tunnisteissa.
Occam-kielen mielenkiintoinen piirre on sisennyksen (sisennys, "tikkaat") sisällyttäminen sen syntaksiin. Tämä suosittu ja erittäin ilmeikäs Ockham struct -korostin on ainoa tapa määrittää konstruktorien laajuus. Tällaisen ratkaisun kiistattomia etuja ovat palvelumerkkien määrän vähentäminen konstruktiota kirjoitettaessa (ei tarvita sanoja, kuten BEGIN-END tai kiharasulkuja) ja tekstin muotoilun pakotettu standardisointi, mikä lisää niiden luettavuutta .
Esimerkki "tikkaiden" tärkeydestä:
SEQ proc1() PAR proc21() proc22() proc3()tässä suoritetaan ensin proc1, sitten proc21 ja proc22 suoritetaan rinnakkain, ja vasta pisimmän niistä valmistumisen jälkeen proc3 käynnistyy. Jos siirrämme kutsun proc3:lle yhden tason oikealle, arviointijärjestys muuttuu:
SEQ proc1() PAR proc21() proc22() proc3()Tässä proc3 alkaa samaan aikaan kuin proc21 ja proc22.
Virallisesti osana TDS (Transputer Development System) INMOS Ltd. Occam 1.0, Occam 2.0 ja Occam 2.1 toteutukset julkaistiin. Yrityksen oston ja transputer-projektin kehityksen rajoittamisen jälkeen Occam 3 -spesifikaatio julkaistiin yksityisesti Occam-kehittäjien toimesta. Myöhemmin joukko harrastajia otti käyttöön Occam 2.5 -kielen, joka oli Occam 2.1 ja joitain Occam 3:n innovaatioita. Jälkimmäistä ei toteutettu täysin.
Occam-kielen kehitys suuntautui uusien tietotyyppien, korkean tason konseptien ja ohjelmointia helpottavien työkalujen lisäämiseen. Samaan aikaan kielen filosofiaa ei tarkistettu.
Ockhamista on toteutuksia muille, ei-transputer-arkkitehtuureille, enimmäkseen amatööriarkkitehtuureille.
Tunnetaan myös kirjastoja, jotka toteuttavat CSP:n Occam-peruskonseptin primitiivit, mikä mahdollistaa ohjelmoinnin Occam-tyyliin muilla kielillä.
Ohjelmointikielet | |
---|---|
|