about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* 2576 - distinguish allocated addresses from othersKartik K. Agaram2016-01-1956-3300/+3364
| | | | | | | | | | | | | | | | 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.
* 2575 - better messages on trace count failuresKartik K. Agaram2016-01-193-3/+13
|
* 2574Kartik K. Agaram2016-01-192-15/+12
|
* 2573 - check product type of 'new'Kartik K. Agaram2016-01-194-10/+38
| | | | | | | | | | | I realize that my current doesn't allow nesting a:b:c linear type syntax inside a dilated property. So you can't currently say: (recipe address:number) Need to fix that at some point. Non-trivial since linear syntax is oblivious to dilated syntax. I should probably make the dilated syntax more fundamental and introduce it at an earlier layer.
* 2572Kartik K. Agaram2016-01-191-1/+1
|
* 2571Kartik K. Agaram2016-01-196-4/+4
| | | | | Reorganize layers in preparation for a better way to manage heap allocations without ever risking use-after-free errors.
* 2570 - recipe variables are now fully type-checkedKartik K. Agaram2016-01-181-0/+31
|
* 2569Kartik K. Agaram2016-01-184-6/+17
|
* 2568Kartik K. Agaram2016-01-181-0/+17
|
* 2567Kartik K. Agaram2016-01-181-2/+7
|
* 2566 - typecheck 'call' on recipe variablesKartik K. Agaram2016-01-181-1/+25
|
* 2565 - typecheck 'call' on literal recipesKartik K. Agaram2016-01-181-0/+48
|
* 2564Kartik K. Agaram2016-01-182-8/+6
|
* 2563 - bring back 'call'Kartik K. Agaram2016-01-182-1/+59
| | | | Still need to type-check it, though.
* 2562Kartik K. Agaram2016-01-1713-49/+47
| | | | | | | | | | | | We want to use the type 'recipe' for recipe *variables*, because it seems nicer to say `recipe number -> number` rather than recipe-ordinal, etc. To support this we'll allow recipe names to be mentioned without any type. This might make a couple of places in this commit more brittle. I'm dropping error messages, causing them to not happen in some situations. Maybe I should just bite the bullet and require an explicit :recipe-literal. We'll see.
* 2561Kartik K. Agaram2016-01-176-32/+33
| | | | | Reorganize layers in preparation for a better, more type-safe implementation of first-class and higher-order recipes.
* 2560Kartik K. Agaram2016-01-131-5/+3
|
* 2559 - stop using 'next-ingredient' explicitlyKartik K. Agaram2016-01-125-30/+19
| | | | | I still need it in some situations because I have no way to set a non-zero default for an optional ingredient. Open question..
* 2558Kartik K. Agaram2016-01-122-2/+8
|
* 2557 - type-check most ingredients ahead of timeKartik K. Agaram2016-01-125-48/+86
|
* 2556Kartik K. Agaram2016-01-121-1/+2
|
* 2555Kartik K. Agaram2016-01-114-11/+11
|
* 2554 - give up on static pointer analysisKartik K. Agaram2016-01-111-126/+0
| | | | | Eventually you'll need to create a doubly-linked list, and `isolated` won't save you then.
* 2553 - keep failed specializations from generating spurious errorsKartik K. Agaram2015-12-285-17/+3
| | | | Thanks Caleb Couch.
* 2552Kartik K. Agaram2015-12-281-4/+4
|
* 2551 - add a space after variables in stashKartik K. Agaram2015-12-281-1/+8
|
* 2550Kartik K. Agaram2015-12-281-0/+1
|
* 2549Kartik K. Agaram2015-12-281-1/+3
|
* 2548 - teach 'print' to print integersKartik K. Agaram2015-12-2816-98/+164
| | | | | | | | | | Still can't print non-integer numbers, so this is a bit hacky. The big consequence is that you can't print literal characters anymore because of our rules about how we pick which variant to statically dispatch to. You have to save to a character variable first. Maybe I can add an annotation to literals..
* 2547Kartik K. Agaram2015-12-242-1/+7
|
* 2546 - another phase-ordering constraintKartik K. Agaram2015-12-192-2/+20
| | | | Thanks Caleb Couch.
* 2545Kartik K. Agaram2015-12-1534-260/+1182
| | | | update html
* support immutability checks in sandbox/ appKartik K. Agaram2015-12-158-18/+47
|
* three bugs fixedKartik K. Agaram2015-12-158-31/+253
| | | | | | | | | | | | | | | | | - notes bug in edit/ triggers in immutable but not master branch bug triggered by changes to layer 059: we're finding an unspecialized call to 'length' in 'append_6' hard to debug because trace isn't complete just bring out the big hammer: use a new log file length_2 from recipes.mu is not being deleted (bug #1) so reload doesn't switch length to length_2 when variant_already_exists (bug #2) so we end up saving in Recipe for a primitive ordinal so no valid specialization is found for 'length' (bug #3) why doesn't it trigger in a non-interactive scenario? argh, wasn't checking for an empty line at end. ok, confidence restored.
* bugfix after commit 2612Kartik K. Agaram2015-12-151-0/+21
|
* start working on checking address lifetimeKartik K. Agaram2015-12-151-0/+126
| | | | First some baseline tests that should never trigger warnings.
* start using the new checkKartik K. Agaram2015-12-152-8/+6
| | | | | | | | | | 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.
* improve error messageKartik K. Agaram2015-12-151-8/+16
|
* infect immutability across recipesKartik K. Agaram2015-12-151-2/+47
| | | | | | | | | | | | | | | | | If a product is contained-in some ingredient, then the caller will check the product for mutations as well. For example, consider this linked-list operation: b:address:list:number <- next a:address:list:number If 'a' is immutable in the surrounding recipe, you probably want 'b' to be immutable as well. You can achieve this by giving 'next' the following header (ignoring shape-shifting): recipe next a:address:list:number -> b:address:list:number/contained-in:a This is the theory, anyway. Rather to my surprise, this doesn't trigger any issues with existing code. That's probably too good to be true.
* next baby step: infect immutability across copiesKartik K. Agaram2015-12-151-15/+54
|
* fix a crash on unknown typeKartik K. Agaram2015-12-151-0/+11
|
* rest of edit/ fixedKartik K. Agaram2015-12-154-8/+8
| | | | No more bugs; phew.
* bugfix: phase orderingKartik K. Agaram2015-12-152-4/+49
|
* layer 3 of edit/ now workingKartik K. Agaram2015-12-154-10/+47
| | | | | Now I complain before running if a call somewhere doesn't line up with its ingredients, or if no specialization can be made to match it.
* chessboard.mu now workingKartik K. Agaram2015-12-151-3/+3
|
* layers 1 and 2 of edit/ now workingKartik K. Agaram2015-12-152-5/+5
|
* experiment: treat pure ingredients as immutableKartik K. Agaram2015-12-153-48/+257
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.)
* 2627Kartik K. Agaram2015-12-151-3/+3
|
* 2626Kartik K. Agaram2015-12-151-0/+2
|
* 2625Kartik K. Agaram2015-12-151-4/+1
|