Samtidig ML | |
---|---|
Semantik | Synkron meddelelse |
Sprog klasse | funktionel , konkurrencedygtig |
Udførelsestype | indlejret |
Forfatter | John H Reppy |
Frigøre |
|
Type system | Hindley-Milner |
Blev påvirket | Standard ML |
påvirket |
konkurrencedygtige udvidelser til [2] OCaml , Haskell , Scheme , Java |
Licens | åben |
Internet side | cml.cs.uchicago.edu |
Platform | Standard ML |
OS | på tværs af platforme |
Concurrent ML (CML) er et højere-ordens statisk skrevet konkurrerende programmeringssprog, der er indlejret i det generelle sprog Standard ML [3] [2] .
Implementeret som bibliotek. Inkluderet i standardfordelingen af SML/NJ og MLton compilere . Med minimale ændringer er CML planlagt til at blive inkluderet i standarden for det fremtidige efterfølger ML-sprog .
CML implementerer modellen for synkron meddelelsesoverførsel ved at udvide SML med indtastede kanaler og førsteklasses synkrone abstraktioner kaldet hændelser . Denne mekanisme tillader komplekse kommunikations- og synkroniseringsprotokoller at blive indkapslet som førsteklasses objekter , hvilket tilskynder til at skjule de faktiske kommunikationskanaler under abstrakte datatyper og derved forbedre modulariteten . [3] [2]
CML blev udviklet på et tidspunkt, hvor processorer med hardwareparallelisme var en luksus, så dens tidlige implementeringer fokuserede på fysisk sekventiel eksekvering. Efterfølgende blev "Parallel Concurrent ML" [2] udviklet , der blev eksekveret på moderne processorer mere effektivt.
Oprettelsen og udviklingen af CML skyldes hovedsageligt John Reppy [ 4 ] .
Concurrent ML skiller sig ud blandt de fleste indlejrede sprog ved, at det ikke har en enkelt implementering, men to fundamentalt forskellige. Dette skyldes forskelle mellem Standard ML- implementeringer i deres tilsigtede formål og de anvendte kompileringsstrategier:
eXeneEt bibliotek [5] er skrevet i CML , der implementerer en parallel reaktiv model af den grafiske brugergrænseflade under X Window System .
Hej verden! ' for konsollen. Dette afføder en tråd , der skaber et strengrør . Denne tråd afføder først en anden tråd, der udskriver den første linje, der modtages på kanalen, til konsollen, og derefter sender strengen " hello, verden! " til den affødte kanal. ".
struktur Hej = struktur åben CML sjovt hej () = lad val c : streng chan = kanal () i spawn ( fn () => TextIO . print ( recv c ) ); send ( c , "hej verden! \n " ); exit () ende fun main ( navn , argv ) = RunCML . doit ( fn () => ignorer ( spawn hej ), INGEN ) ende
Programmeringssprog | |
---|---|
|