ML concomitent

ML concomitent
Semantică Mesaje sincrone
Clasa de limba funcțional , competitiv
Tipul de execuție încorporat
Autor John H Reppy
Eliberare
Tip sistem Hindley-Milner
A fost influențat ML standard
influențat extensii competitive pentru [2]
OCaml , Haskell , Scheme , Java
Licență deschis
Site-ul web cml.cs.uchicago.edu
Platformă ML standard
OS multiplatformă

Concurrent ML (CML)  este un limbaj de programare competitiv de ordin superior tip static , care este încorporat în limbajul de uz general Standard ML [3] [2] .

Implementat ca o bibliotecă. Inclus în distribuția standard a compilatoarelor SML/NJ și MLton . Cu modificări minime, CML este planificat să fie inclus în standardul viitorului limbaj ML succesor .

Detalii

CML implementează modelul de transmitere a mesajelor sincrone prin extinderea SML cu canale tipizate și abstracții sincrone de primă clasă numite evenimente . Acest mecanism permite ca protocoale complexe de comunicare și sincronizare să fie încapsulate ca obiecte de primă clasă , încurajând ascunderea canalelor de comunicare reale sub tipuri de date abstracte și, prin urmare, îmbunătățind modularitatea . [3] [2]

CML a fost dezvoltat într-o perioadă în care procesoarele cu paralelism hardware erau un lux, așa că implementările sale timpurii s-au concentrat pe execuția secvențială fizică. Ulterior, a fost dezvoltat „Parallel Concurrent ML” [2] , executând mai eficient pe procesoare moderne.

Crearea și dezvoltarea CML se datorează în principal lui John Reppy [ 4 ] . 

Implementare

Concurrent ML se remarcă printre cele mai multe limbaje încorporate prin faptul că nu are o singură implementare, ci două fundamental diferite. Acest lucru se datorează diferențelor dintre implementările standard ML în scopul propus și strategiile de compilare utilizate:

Aplicație

eXeneO bibliotecă [5] este scrisă în CML care implementează un model reactiv paralel al interfeței grafice cu utilizatorul sub sistemul X Window .

Exemplu de cod

Bună lume! ' pentru consolă. Acest lucru generează un fir care creează o țeavă șir . Acest thread generează mai întâi un alt fir care tipărește pe consolă prima linie primită pe canal și apoi trimite șirul „ hello, world! ” către canalul generat. ".

structura Hello = struct open CML fun hello () = let val c : string chan = canal () în spawn ( fn () => TextIO . print ( recv c ) ); trimite ( c , "bună, lume! \n " ); ieșire () sfârșit fun main ( nume , argv ) = RunCML . doit ( fn () => ignore ( spawn salut ), NONE ) termina

Note

  1. 110.79  Fișiere de distribuție
  2. 1 2 3 4 Reppy, 2009 .
  3. 12 Reppy , Xiao, 2007 .
  4. Pagina de pornire a lui John Reppy . Consultat la 24 iulie 2015. Arhivat din original la 27 iulie 2015.
  5. eXene - set de instrumente X-Window System multi-threaded scris în ConcurrentML . Data accesului: 24 iulie 2015. Arhivat din original pe 22 februarie 2012.

Literatură

  • Simon Marlow, Simon Peyton Jones, Andy Moran, John Reppy. Excepții asincrone în Haskell . - Conferința privind proiectarea și implementarea limbajului de programare (PLDI), 2001. Arhivat din {a.
  • John Reppy, Claudio V. Russo, Yingqi Xiao. Paralel ConcurrentML . — Conferința internațională privind programarea funcțională (ICFP), 2009.

Link -uri

Norman Ramsey. Programare simultană în ML  // Raport tehnic CS-TR-262-90. - Universitatea Princeton, 1990.