CML Programming 15-312 Foundations of Programming Languages Frank Pfenning, Fall 02 Following Concurrent Programming in ML, John H. Reppy, Cambridge University Press, 1999. cell.sml -- two implementations of a storage cell primes.sml -- an implementation of the sieve of Eratosthenes util.sml -- utility to execute CML code, run CML code with U.apply sources.cm -- SML CM group definition, compile with CM.make (); Note: you need to cml or cml-cm to run this code. See http://people.cs.uchicago.edu/~jhr/cml/ The CML structure defined the following types and functions % Spawning and exiting threads type thread_id val spawn : (unit -> unit) -> thread_id val exit : unit -> 'a % Synchronous communication channels type 'a chan val channel : unit -> 'a chan val send : 'a chan * 'a -> unit val recv : 'a chan -> 'a % Events and choice type 'a event val sendEvt : 'a chan * 'a -> unit event val recvEvt : 'a chan -> 'a event val never : 'a event val alwaysEvt : 'a -> 'a event val wrap : 'a event * ('a -> 'b) -> 'b event val choose : 'a event list -> 'a event val sync : 'a event -> 'a val select : 'a event list -> 'a % Advanced event-related functions val wrapHandler : 'a event * (exn -> 'a) -> 'a event val guard : (unit -> 'a event) -> 'a event val withNack : (unit event -> 'a event) -> 'a event val timeOutEvt : Time.time -> unit event val atTimeEvt : Time.time -> unit event val sameChannel : 'a chan * 'a chan -> bool % Polling val sendPoll : 'a chan * 'a -> bool val recvPoll : 'a chan -> 'a option % Additional thread-related functions val getTid : unit -> thread_id val sameTid : thread_id * thread_id -> bool val compareTid : thread_id * thread_id -> order val hashTid : thread_id -> word val tidToString : thread_id -> string val spawnc : ('a -> unit) -> 'a -> thread_id val joinEvt : thread_id -> unit event val yield : unit -> unit