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 .
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 ] .
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:
eXeneO bibliotecă [5] este scrisă în CML care implementează un model reactiv paralel al interfeței grafice cu utilizatorul sub sistemul X Window .
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
Limbaje de programare | |
---|---|
|