Samtidig ML

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 .

Detaljer

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 ] . 

Implementering

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:

Ansøgning

eXeneEt bibliotek [5] er skrevet i CML , der implementerer en parallel reaktiv model af den grafiske brugergrænseflade under X Window System .

Eksempelkode

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

Noter

  1. 110.79  Distributionsfiler
  2. 1 2 3 4 Reppy, 2009 .
  3. 12 Reppy , Xiao, 2007 .
  4. John Reppys hjemmeside . Hentet 24. juli 2015. Arkiveret fra originalen 27. juli 2015.
  5. eXene - multi-threaded X-Window System-værktøjssæt skrevet i ConcurrentML . Dato for adgang: 24. juli 2015. Arkiveret fra originalen 22. februar 2012.

Litteratur

  • John Reppy, Claudio V. Russo, Yingqi Xiao. Parallel ConcurrentML . — International konference om funktionel programmering (ICFP), 2009.

Links

Norman Ramsey. Samtidig programmering i ML  // Teknisk rapport CS-TR-262-90. - Princeton University, 1990.