From d4b4d018c76409a96b82bee1e81c735648e57918 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 14 Dec 2014 13:21:32 -0800 Subject: 428 - cleanup odds and ends --- channel.mu | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) (limited to 'channel.mu') diff --git a/channel.mu b/channel.mu index fa6d89c3..0ee53774 100644 --- a/channel.mu +++ b/channel.mu @@ -1,48 +1,48 @@ (function producer [ ; produce numbers 1 to 5 on a channel - ((default-scope scope-address) <- new (scope literal) (30 literal)) - ((chan channel-address) <- next-input) + (default-scope:scope-address <- new scope:literal 30:literal) + (chan:channel-address <- next-input) ; n = 0 - ((n integer) <- copy (0 literal)) + (n:integer <- copy 0:literal) { begin - ((done? boolean) <- less-than (n integer) (5 literal)) - (break-unless (done? boolean)) + (done?:boolean <- less-than n:integer 5:literal) + (break-unless done?:boolean) ; other threads might get between these prints - (print-primitive ("produce: " literal)) - (print-primitive (n integer)) - (print-primitive ("\n" literal)) + (print-primitive (("produce: " literal))) + (print-primitive n:integer) + (print-primitive (("\n" literal))) ; 'box' n into a dynamically typed 'tagged value' because that's what ; channels take - ((n2 integer-address) <- new (integer literal)) - ((n2 integer-address deref) <- copy (n integer)) - ((n3 tagged-value-address) <- new-tagged-value (integer-address literal) (n2 integer-address)) - ((chan channel-address deref) <- write (chan channel-address) (n3 tagged-value-address deref)) - ((n integer) <- add (n integer) (1 literal)) + (n2:integer-address <- new integer:literal) + (n2:integer-address/deref <- copy n:integer) + (n3:tagged-value-address <- new-tagged-value integer-address:literal n2:integer-address) + (chan:channel-address/deref <- write chan:channel-address n3:tagged-value-address/deref) + (n:integer <- add n:integer 1:literal) (loop) } ]) (function consumer [ ; consume and print integers from a channel - ((default-scope scope-address) <- new (scope literal) (30 literal)) - ((chan channel-address) <- next-input) + (default-scope:scope-address <- new scope:literal 30:literal) + (chan:channel-address <- next-input) { begin ; read a tagged value from the channel - ((x tagged-value) (chan channel-address deref) <- read (chan channel-address)) + (x:tagged-value chan:channel-address/deref <- read chan:channel-address) ; unbox the tagged value into an integer - ((n2 integer-address) <- maybe-coerce (x tagged-value) (integer-address literal)) + (n2:integer-address <- maybe-coerce x:tagged-value integer-address:literal) ; other threads might get between these prints - (print-primitive ("consume: " literal)) - (print-primitive (n2 integer-address deref)) - (print-primitive ("\n" literal)) + (print-primitive (("consume: " literal))) + (print-primitive n2:integer-address/deref) + (print-primitive (("\n" literal))) (loop) } ]) (function main [ - ((chan channel-address) <- new-channel (3 literal)) + (chan:channel-address <- new-channel 3:literal) ; create two background 'routines' that communicate by a channel - (fork (consumer fn) (chan channel-address)) - (fork (producer fn) (chan channel-address)) - (sleep (2000 literal)) ; wait for forked routines to effect the transfer + (fork consumer:fn chan:channel-address) + (fork producer:fn chan:channel-address) + (sleep 2000:literal) ; wait for forked routines to effect the transfer ]) -- cgit 1.4.1-2-gfad0