diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-05-12 10:22:26 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-05-12 10:22:26 -0700 |
commit | cdf2822743b3beeb37ebc3deea8e08b6130698c5 (patch) | |
tree | b7946314d79e8df95eb16703b65832e20f7ee620 /html/channel.mu.html | |
parent | bd222553d7bc7d91d3eebae5639b01f58c8f7c75 (diff) | |
download | mu-cdf2822743b3beeb37ebc3deea8e08b6130698c5.tar.gz |
4242 - get rid of refcounts entirely
We're going to lean back into the experiment of commit 4179 back in Jan. If we delete memory it's up to us to ensure no pointers into it survive. Since deep-copy depends on our refcounting infrastructure, it's gone as well. So we're going to have to start watching out for pointers shared over channels.
Diffstat (limited to 'html/channel.mu.html')
-rw-r--r-- | html/channel.mu.html | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/html/channel.mu.html b/html/channel.mu.html index f69af8e5..fdb5c2dc 100644 --- a/html/channel.mu.html +++ b/html/channel.mu.html @@ -59,7 +59,7 @@ if ('onhashchange' in window) { <pre id='vimCodeElement'> <span id="L1" class="LineNr"> 1 </span><span class="Comment"># example program: communicating between routines using channels</span> <span id="L2" class="LineNr"> 2 </span> -<span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L3'>producer</a> <a href='075channel.mu.html#L47'>sink</a>:&:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -> </span><a href='075channel.mu.html#L47'>sink</a>:&:<a href='075channel.mu.html#L47'>sink</a>:char [ +<span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L3'>producer</a> <a href='075channel.mu.html#L40'>sink</a>:&:<a href='075channel.mu.html#L40'>sink</a>:char<span class="muRecipe"> -> </span><a href='075channel.mu.html#L40'>sink</a>:&:<a href='075channel.mu.html#L40'>sink</a>:char [ <span id="L4" class="LineNr"> 4 </span> <span class="Comment"># produce characters 1 to 5 on a channel</span> <span id="L5" class="LineNr"> 5 </span> <span class="Constant">local-scope</span> <span id="L6" class="LineNr"> 6 </span> <span class="Constant">load-inputs</span> @@ -71,20 +71,20 @@ if ('onhashchange' in window) { <span id="L12" class="LineNr">12 </span> <span class="Comment"># other threads might get between these prints</span> <span id="L13" class="LineNr">13 </span> $print <span class="Constant">[produce: ]</span>, n, <span class="Constant">[ </span> <span id="L14" class="LineNr">14 </span><span class="Constant">]</span> -<span id="L15" class="LineNr">15 </span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special"><-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, n +<span id="L15" class="LineNr">15 </span> <a href='075channel.mu.html#L40'>sink</a> <span class="Special"><-</span> <a href='075channel.mu.html#L60'>write</a> <a href='075channel.mu.html#L40'>sink</a>, n <span id="L16" class="LineNr">16 </span> n <span class="Special"><-</span> add n,<span class="Constant"> 1</span> <span id="L17" class="LineNr">17 </span> <span class="muControl"> loop</span> <span id="L18" class="LineNr">18 </span> <span class="Delimiter">}</span> -<span id="L19" class="LineNr">19 </span> close <a href='075channel.mu.html#L47'>sink</a> +<span id="L19" class="LineNr">19 </span> close <a href='075channel.mu.html#L40'>sink</a> <span id="L20" class="LineNr">20 </span>] <span id="L21" class="LineNr">21 </span> -<span id="L22" class="LineNr">22 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L22'>consumer</a> <a href='075channel.mu.html#L43'>source</a>:&:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -> </span><a href='075channel.mu.html#L43'>source</a>:&:<a href='075channel.mu.html#L43'>source</a>:char [ +<span id="L22" class="LineNr">22 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L22'>consumer</a> <a href='075channel.mu.html#L36'>source</a>:&:<a href='075channel.mu.html#L36'>source</a>:char<span class="muRecipe"> -> </span><a href='075channel.mu.html#L36'>source</a>:&:<a href='075channel.mu.html#L36'>source</a>:char [ <span id="L23" class="LineNr">23 </span> <span class="Comment"># consume and print integers from a channel</span> <span id="L24" class="LineNr">24 </span> <span class="Constant">local-scope</span> <span id="L25" class="LineNr">25 </span> <span class="Constant">load-inputs</span> <span id="L26" class="LineNr">26 </span> <span class="Delimiter">{</span> <span id="L27" class="LineNr">27 </span> <span class="Comment"># read an integer from the channel</span> -<span id="L28" class="LineNr">28 </span> n:char, eof?:bool, <a href='075channel.mu.html#L43'>source</a> <span class="Special"><-</span> read <a href='075channel.mu.html#L43'>source</a> +<span id="L28" class="LineNr">28 </span> n:char, eof?:bool, <a href='075channel.mu.html#L36'>source</a> <span class="Special"><-</span> read <a href='075channel.mu.html#L36'>source</a> <span id="L29" class="LineNr">29 </span> <span class="muControl">break-if</span> eof? <span id="L30" class="LineNr">30 </span> <span class="Comment"># other threads might get between these prints</span> <span id="L31" class="LineNr">31 </span> $print <span class="Constant">[consume: ]</span>, n:char, <span class="Constant">[ </span> @@ -95,10 +95,10 @@ if ('onhashchange' in window) { <span id="L36" class="LineNr">36 </span> <span id="L37" class="LineNr">37 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L37'>main</a> [ <span id="L38" class="LineNr">38 </span> <span class="Constant">local-scope</span> -<span id="L39" class="LineNr">39 </span> <a href='075channel.mu.html#L43'>source</a>:&:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special"><-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">3/capacity</span> +<span id="L39" class="LineNr">39 </span> <a href='075channel.mu.html#L36'>source</a>:&:<a href='075channel.mu.html#L36'>source</a>:char, <a href='075channel.mu.html#L40'>sink</a>:&:<a href='075channel.mu.html#L40'>sink</a>:char <span class="Special"><-</span> <a href='075channel.mu.html#L44'>new-channel</a> <span class="Constant">3/capacity</span> <span id="L40" class="LineNr">40 </span> <span class="Comment"># create two background 'routines' that communicate by a channel</span> -<span id="L41" class="LineNr">41 </span> routine1:num <span class="Special"><-</span> <span class="muControl">start-running</span> <a href='channel.mu.html#L3'>producer</a>, <a href='075channel.mu.html#L47'>sink</a> -<span id="L42" class="LineNr">42 </span> routine2:num <span class="Special"><-</span> <span class="muControl">start-running</span> <a href='channel.mu.html#L22'>consumer</a>, <a href='075channel.mu.html#L43'>source</a> +<span id="L41" class="LineNr">41 </span> routine1:num <span class="Special"><-</span> <span class="muControl">start-running</span> <a href='channel.mu.html#L3'>producer</a>, <a href='075channel.mu.html#L40'>sink</a> +<span id="L42" class="LineNr">42 </span> routine2:num <span class="Special"><-</span> <span class="muControl">start-running</span> <a href='channel.mu.html#L22'>consumer</a>, <a href='075channel.mu.html#L36'>source</a> <span id="L43" class="LineNr">43 </span> wait-for-routine routine1 <span id="L44" class="LineNr">44 </span> wait-for-routine routine2 <span id="L45" class="LineNr">45 </span>] |