Souběžné ML

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 .

Podrobnosti

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

Implementace

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:

Aplikace

V CML je napsána knihovna eXene[5] , která implementuje paralelní reaktivní model grafického uživatelského rozhraní pod X Window System .

Ukázkový kód

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

Poznámky

  1. 110.79 Distribuční  soubory
  2. 1 2 3 4 Reppy, 2009 .
  3. 12 Reppy , Xiao, 2007 .
  4. Domovská stránka Johna Reppyho . Získáno 24. července 2015. Archivováno z originálu 27. července 2015.
  5. eXene - vícevláknová sada nástrojů X-Window System napsaná v ConcurrentML . Datum přístupu: 24. července 2015. Archivováno z originálu 22. února 2012.

Literatura

  • John Reppy, Claudio V. Russo, Yingqi Xiao. Paralelní ConcurrentML . — Mezinárodní konference o funkčním programování (ICFP), 2009.

Odkazy

Norman Ramsey. Souběžné programování v ML  // Technická zpráva CS-TR-262-90. — Princetonská univerzita, 1990.