Jump to content

Concurrent ML

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Bohanlon (talk | contribs) at 08:59, 22 January 2006. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Concurrent ML (CML) is a concurrent extension of the Standard ML programming language.

Sample Code

Here is sample code to print "hello, world" to the console. It spawns a thread which creates a channel for strings. This thread then spawns another thread which prints the first string that is received on the channel, and then sends the "hello, world" string on the channel. It uses SML/NJ and CML:

cml_test.cm:

   Library
       structure Main
   is
       cml_test.sml
       
       $cml/cml.cm
       $/basis.cm

cml_test.sml:

   structure Main =
       struct
           open CML
           
           fun test () =
           (
               let val c : string chan = channel () in
                   spawn (fn () => TextIO.print (recv (c)));
                   send (c, "hello, world\n")
               end
           )
           
           fun hello () = RunCML.doit
           (
               (fn () => ignore (spawn test)),
               NONE
           )
       end

Running:

   $ sml cml_test.cm
   Standard ML of New Jersey v110.55 [built: Mon Jan 16 16:54:23 2006]
   [scanning cml_test.cm]
   [parsing (cml_test.cm):cml_test.sml]
   [library $cml/cml.cm is stable]
   [library $cml/cml-internal.cm is stable]
   [library $cml/core-cml.cm is stable]
   - Main.hello ();
   [autoloading]
   [autoloading done]
   hello, world
   val it = 1 : OS.Process.status