Concurrent ML
Appearance
	
	
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