Souběžné ML | |
---|---|
Sémantika | Synchronní zasílání zpráv |
Jazyková třída | funkční , konkurenceschopný |
Typ provedení | vložené |
Autor | John H. Reppy |
Uvolnění | |
Typový systém | Hindley-Milner |
Byl ovlivněn | Standardní ML |
ovlivnil |
kompetitivní rozšíření pro [2] OCaml , Haskell , Scheme , Java |
Licence | OTEVŘENO |
webová stránka | cml.cs.uchicago.edu |
Plošina | Standardní ML |
OS | multiplatformní |
Concurrent ML (CML) je staticky typovaný konkurenční programovací jazyk vyššího řádu , který je zabudován do univerzálního jazyka Standard ML [3] [2] .
Realizováno jako knihovna. Zahrnuto ve standardní distribuci kompilátorů SML/NJ a MLton . S minimálními změnami je plánováno začlenění CML do standardu budoucího nástupce jazyka ML .
CML implementuje model synchronního předávání zpráv rozšířením SML o typované kanály a prvotřídní synchronní abstrakce zvané události . Tento mechanismus umožňuje zapouzdřit složité komunikační a synchronizační protokoly jako prvotřídní objekty , což podporuje skrytí skutečných komunikačních kanálů pod abstraktními datovými typy , a tím zlepšuje modularitu . [3] [2]
CML byl vyvinut v době, kdy procesory s hardwarovým paralelismem byly luxusem, takže jeho rané implementace se soustředily na fyzicky sekvenční provádění. Následně byl vyvinut "Parallel Concurrent ML" [2] , který efektivněji pracuje na moderních procesorech.
Za vytvoření a vývoj CML se zasloužil především John Reppy [ 4 ] .
Concurrent ML vyniká mezi většinou vestavěných jazyků v tom, že nemá jedinou implementaci, ale dvě zásadně odlišné. To je způsobeno rozdíly mezi standardními implementacemi ML v jejich zamýšleném účelu a použitých strategiích kompilace:
V CML je napsána knihovna eXene[5] , která implementuje paralelní reaktivní model grafického uživatelského rozhraní pod X Window System .
Ahoj světe! “ pro konzoli. Tím se vytvoří vlákno , které vytvoří strunu . Toto vlákno nejprve vytvoří další vlákno, které vytiskne do konzole první řádek přijatý na kanálu a poté odešle řetězec " ahoj, světe! " do tohoto vytvořeného kanálu. ".
struktura Hello = struct open CML fun hello () = let val c : string chan = channel () in spawn ( fn () => TextIO . print ( recv c ) ); odeslat ( c , "ahoj světe! \n " ); exit () konec fun main ( jméno , argv ) = RunCML . doit ( fn () => ignorovat ( spawn hello ), NONE ) end
Programovací jazyky | |
---|---|
|