diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-01-19 23:18:03 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-01-19 23:18:03 -0800 |
commit | 455fbac64f101b05f7eaca89b84470569e4df3fd (patch) | |
tree | 32cfd5b092ad86086e4d15992bb10fd06a12bf13 /counters.mu | |
parent | 7163e18a774781c62f0c0542e4cb9037f6a71d22 (diff) | |
download | mu-455fbac64f101b05f7eaca89b84470569e4df3fd.tar.gz |
2576 - distinguish allocated addresses from others
This is the one major refinement on the C programming model I'm planning to introduce in mu. Instead of Rust's menagerie of pointer types and static checking, I want to introduce just one new type, and use it to perform ref-counting at runtime. So far all we're doing is updating new's interface. The actual ref-counting implementation is next. One implication: I might sometimes need duplicate implementations for a recipe with allocated vs vanilla addresses of the same type. So far it seems I can get away with just always passing in allocated addresses; the situations when you want to pass an unallocated address to a recipe should be few and far between.
Diffstat (limited to 'counters.mu')
-rw-r--r-- | counters.mu | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/counters.mu b/counters.mu index 22f5554f..b69b2eee 100644 --- a/counters.mu +++ b/counters.mu @@ -1,24 +1,24 @@ # example program: maintain multiple counters with isolated lexical scopes # (spaces) -recipe new-counter n:number -> default-space:address:array:location [ +recipe new-counter n:number -> default-space:address:shared:array:location [ default-space <- new location:type, 30 load-ingredients ] -recipe increment-counter outer:address:array:location/names:new-counter, x:number -> n:number/space:1 [ +recipe increment-counter outer:address:shared:array:location/names:new-counter, x:number -> n:number/space:1 [ local-scope load-ingredients - 0:address:array:location/names:new-counter <- copy outer # setup outer space; it *must* come from 'new-counter' + 0:address:shared:array:location/names:new-counter <- copy outer # setup outer space; it *must* come from 'new-counter' n/space:1 <- add n/space:1, x ] recipe main [ local-scope # counter A - a:address:array:location <- new-counter 34 + a:address:shared:array:location <- new-counter 34 # counter B - b:address:array:location <- new-counter 23 + b:address:shared:array:location <- new-counter 23 # increment both by 2 but in different ways increment-counter a, 1 b-value:number <- increment-counter b, 2 |