occam (limbaj de programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
occam
limbaj de programare
Autor INMOS
Data de origine 1983
Ultima versiune 2.1
Utilizare arhitecturi paralele
Paradigme programare structurată
Tastare puternic
Influențată de comunicarea proceselor secvențiale

occam este un limbaj de programare pentru arhitecturi paralele dezvoltat de INMOS pentru programarea rețelelor de computere INMOS și ulterior implementat și pentru alte platforme. Numele se referă la principiul aparatului de ras al lui Occam : în proiectarea limbajului, Inmos s-a limitat la un set minim de constructe, evitând să introducă ceea ce nu părea „strict necesar” în scopul limbajului. De fapt, occam poate fi descris și ca un limbaj de programare relativ scăzut, aproape un fel de asamblare . Modelul în care este inspirat limbajul sunt Procesele secvențiale de comunicare (CSP) descrise de CAR Hoare în celebra carte cu același nume.

Prezentare generală a limbii

Canale

Comunicarea dintre procese are loc prin canale numite. Un proces trimite date pe un canal prin operator ! și citește de pe un canal cu ? . Acești operatori au semantică bazată pe întâlnire , ceea ce înseamnă că un proces care încearcă să trimită sau să primească date pe un canal va rămâne suspendat până când un alt proces devine disponibil pentru a efectua operația complementară (adică să primească sau să trimită) pe același canal. Sintactic, ieșirea și intrarea iau următoarea formă ( c este o variabilă):

 canal1? c
 canal2! c

Rețineți că în toate exemplele de cod raportate în acest articol (spre deosebire de ceea ce s-ar putea aștepta de la un limbaj de nivel înalt ) indentarea și utilizarea spațiului alb sunt semnificative (alte limbi au această caracteristică; unele exemple sunt Python , Haskell și ABC ).

Structuri de control

Structurile de control ale lui Occam sunt inspirate de cele ale programării structurate , dar reinterpretate și extinse în contextul programării paralele. Structura de control SEQ introduce o listă de instrucțiuni care sunt executate secvențial (în cele mai multe limbi structurate, acest mod de execuție este implicit):

 SECV
   x: = x + 1
   y: = x * x

După cum vă puteți imagina ,: = este operatorul de atribuire .

Structura de control PAR specifică faptul că instrucțiunile ulterioare trebuie executate în paralel (simultan)

 PAR
   x: = x + 1
   y: = y * 2

PAR admite, de asemenea, o formă mai complexă, care are unele asemănări cu o buclă for , și este menționată în mod constant cu cuvintele cheie PAR-FOR. Următorul fragment de cod dobândește un număr întreg dat din patru canale paralele.

 PAR i = 0 PENTRU 4
 INT n
 Acolo] ? n [i]

Analogia cu „pentru buclă” privește utilizarea „contorului” i. La fel ca o buclă tradițională pentru buclă, fragmentul de cod afișat face cele de mai sus de cinci ori , „pentru i variind de la 0 la 4”; cu toate acestea, cele cinci operații de intrare nu sunt efectuate secvențial, ci în paralel.

Cadrul de control ALT implementează conceptul de comandă păzită al CSP-urilor . O gardă este o combinație între o condiție booleană și o instrucțiune de intrare / ieșire (ambele elemente sunt opționale). Un gardian „reușește” dacă starea sa booleană este adevărată și instrucțiunile sale de intrare sunt „gata” (adică există deja un alt proces disponibil la întâlnire , adică pentru a trimite datele solicitate sau pentru a primi datele trimise). Fiecare pază are o instrucțiune asociată care poate fi executată dacă pază are succes:

 ALT
   count1 <100 & c1? Data
     SECV
       count1: = count1 + 1
       fuzionat! Data
   count2 <100 & c2? Data
     SECV
       count2: = count2 + 1
       fuzionat! Data
   stare? cerere
     SECV
       afară! count1
       afară! număr2

Când instrucțiunea compusă ALT este atinsă de fluxul programului , protecțiile sunt evaluate. Dacă mai mult de unul are succes, se alege unul (în mod arbitrar) și se execută instrucțiunea corespunzătoare.

Occam 2

occam 2 este o extensie a occam realizată de INMOS în 1987 . În practică, occam 2 poate fi considerat ca prima versiune „utilizabilă” a limbajului, în timp ce prima versiune avea mai mult conotația unui prototip. Printre principalele adăugiri ale occam 2 se numără un sistem de tip mai bogat (cu numere în virgulă mobilă , caractere, numere întregi de diferite dimensiuni) și subrutine („funcții”).

Occam 2.1

occam 2.1 este a doua extensie de limbaj, dezvoltată de INMOS în 1995 . În ciuda numelui (care, conform convențiilor normale, ar indica modificări „minore”), occam 2.1 introduce numeroase inovații relevante, inclusiv:

  • capacitatea de a da nume definite de programator tipurilor;
  • record
  • operatori noi (de ex. BYTESIN)
  • capacitatea de a defini matrice de canale (această caracteristică a fost utilizată în exemplele de mai sus)
  • capacitatea de a include matrici ca tip de funcții returnate

Pentru o listă completă a caracteristicilor occam 2.1, care este în prezent versiunea „finală” a limbii, consultați manualul de referință .

Alte versiuni

INMOS a produs specificații pentru o nouă versiune de occam (occam 3), disponibilă online , dar nu au fost realizate implementări lingvistice. Unele dintre inovațiile din occam 3 au fost incluse într-un compilator pentru occam 2.1 dezvoltat de o echipă independentă cunoscută sub numele de echipa KRoC , din acronimul prin care este cunoscut compilatorul: Kent Retargettable Occam compiler . Limba compilată de KRoC a fost ulterior redenumită informal ca occam 2.5, un număr de versiune care ar indica faptul că limba este cumva „la jumătatea drumului” între occam 2 și occam 3.

Bibliografie

linkuri externe

Controlul autorității LCCN ( EN ) sh86007899
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT