about summary refs log tree commit diff stats
path: root/073list.mu
Commit message (Collapse)AuthorAgeFilesLines
* 2707Kartik K. Agaram2016-02-251-4/+0
|
* 2576 - distinguish allocated addresses from othersKartik K. Agaram2016-01-191-26/+26
| | | | | | | | | | | | | | | | 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.
* start using the new checkKartik K. Agaram2015-12-151-6/+4
| | | | | | | | | | I wasn't seeing errors because I wasn't using /contained-in in products yet. But it seems to work fine even after. One reason this isn't an invasive change is that it's opt-in. Most of the time it isn't triggered. You have to add the /contained-in check to trigger a check. But that's just like regular const checks in other languages: if you don't specify immutability you get no checks.
* experiment: treat pure ingredients as immutableKartik K. Agaram2015-12-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This isn't complete yet: a) If you copy a variable the copy is not checked for mutations. b) /contained-in might be a hack. It's needed because sometimes I want to pass in two pointers to a data structure, say for deleting something from a list. Both are conceptually the same structure, so it's unnecessary for both to be products as well. There's also technical reasons you *can't* return both, because if you pass in the same variable to both ingredients (say you want to remove the first element of a list), the products now must write to the same variable as well (thanks to our earlier /same-as-ingredient constraint), and what value gets written last is not something we want to be thinking about. c) Even if we stick with /contained-in, it's ambiguous. I'm using it sometimes to say "a belongs to b", sometimes to say "a _will_ belong to b after the recipe returns. Perhaps that distinction doesn't matter. We'll see. d) Should we be encouraged to say ingredients are contained in products? At the moment 'push' works only because of mu's incomplete analysis. Once we fix a) above, it's unclear what the right header should be. e) edit/ isn't close to working yet. (No more commit numbers since I'm now starting a branch, and can't rely on a stable ordering as I rebase. For the same reason I'm not including the changes to .traces/, to minimize merge conflicts.)
* 2617Kartik K. Agaram2015-12-021-1/+0
|
* 2606 - handle cycles inside stashKartik K. Agaram2015-11-291-1/+39
| | | | | | | | | The idea is that to-text-line should truncate blindly past some threshold, even if to-text isn't smart enough to avoid infinite loops. Maybe I should define a 'truncating buffer' which stops once it fills up. That would be an easy way to eliminate all infinite loops in to-text-line.
* 2505 - test_all_layers now passesKartik K. Agaram2015-11-291-15/+2
| | | | | | Drop the display-list test because it's subsumed by the stash-on-list test right below, which doesn't require the notion of a screen from later layers.
* 2504 - support to-text in 'stash'Kartik K. Agaram2015-11-281-0/+11
|
* 2483 - to-text can now handle listsKartik K. Agaram2015-11-271-0/+50
| | | | | 'append' also implicitly calls 'to-text' unless there's a better variant.
* 2442Kartik K. Agaram2015-11-151-2/+1
| | | | | | Fix the drawback in the previous commit: if an ingredient is just a literal 0 we'll skip its type-checking and hope to map type ingredients elsewhere.
* 2441 - never miss any specializationsKartik K. Agaram2015-11-151-9/+1
| | | | | | | | | I was failing to specialize calls containing literals. And then I had to deal with whether literals should map to numbers or characters. (Answer: both.) One of the issues that still remains: shape-shifting recipes can't be called with literals for addresses, even if it's 0.
* 2430 - make room for more transformsKartik K. Agaram2015-11-131-0/+62