about summary refs log tree commit diff stats
path: root/mu.arc.t
Commit message (Collapse)AuthorAgeFilesLines
...
* 354 - stepping back, test-driving 'addr' helper againKartik K. Agaram2014-11-281-0/+27
|
* 353 - found lots of holes in array supportKartik K. Agaram2014-11-271-34/+34
| | | | | I've uncovered a few while enhancing 'interpolate', but I'll wait to fix them all before I commit the enhancements.
* 352 - 'interpolate' as a poor man's printfKartik K. Agaram2014-11-271-2/+101
|
* 351 - break/loop from nested blocksKartik K. Agaram2014-11-271-0/+44
|
* 349 - jump to labelKartik K. Agaram2014-11-271-0/+21
|
* 348Kartik K. Agaram2014-11-271-5/+5
|
* 347 - allow 'arg' channel to be rewoundKartik K. Agaram2014-11-271-0/+17
|
* 346Kartik K. Agaram2014-11-271-7/+7
|
* 345Kartik K. Agaram2014-11-271-39/+0
|
* 344 - about to give up on rewrite rulesKartik K. Agaram2014-11-271-0/+18
| | | | | | | | | | | | | | | | | I wanted to come up with some way to rewrite 'def-clause foo' to 'after foo/more-clauses', something like: rewrite def-clause [ (fn-name string-address) <- arg (label-name string-address) <- strcat (fn-name string-address deref) ("/more-clauses" literal) (body expr) <- arg reply `(after ,label-name ,body) ] But the quasiquote is still a nested expression that doesn't fit our model well. Still an open question how to do template interpolation in mu.
* 343 - experiment: rewrite rulesKartik K. Agaram2014-11-271-0/+21
| | | | We'll worry later about implementing them in mu.
* 342 - strcatKartik K. Agaram2014-11-271-1/+29
|
* 341 - standardize traces againKartik K. Agaram2014-11-271-0/+49
|
* 340Kartik K. Agaram2014-11-261-2/+2
|
* 339 - string literals for convenienceKartik K. Agaram2014-11-261-0/+18
| | | | | | I'm cheating a little when it comes to strings, making use of Racket primitives. But in principle it seems like a local transform to implement even in machine code.
* 338 - starting to work on string primitivesKartik K. Agaram2014-11-261-0/+12
|
* 337 - rename 'continue' instructions to 'loop'Kartik K. Agaram2014-11-261-18/+18
|
* 335 - tangle at labels scoped to functionsKartik K. Agaram2014-11-261-0/+30
|
* 334Kartik K. Agaram2014-11-261-0/+4
|
* 333Kartik K. Agaram2014-11-261-1/+2
|
* 323 - function clausesKartik K. Agaram2014-11-241-0/+27
| | | | | | | | | | | You can now call 'def' on a function name multiple times. Each time the instructions you provide are *prepended* to any existing instructions. One important use for this is when you define a new type and need to support it in all your generic methods. Now you can keep all those extensions in one place, near the definition of the type. To redefine a function, use 'def!'.
* 322Kartik K. Agaram2014-11-241-12/+12
|
* 321 - before/after can now come anywhereKartik K. Agaram2014-11-241-0/+17
| | | | | | This pollutes our traces with all 'system software'. Too much trouble to keep it out; just lump it for now. Who knows, might even be useful. Most of the time convert* labels are easy to grep out when debugging.
* 319 - ack, forgot to handle blocks when tanglingKartik K. Agaram2014-11-241-0/+15
| | | | | | | | | | | | Will the 'lightweight tools' really be all that useable if we encourage people to layer them one atop another and track precisely what inputs each can accept? Something to keep an eye on. In the meanwhile, we have a new (but very unrealistic) example demonstrating the tangling directives. There's still a big constraint on ordering: before/after clauses have to come before functions that need them.
* 316Kartik K. Agaram2014-11-241-7/+7
|
* 315 - handle before/after uniformly like defKartik K. Agaram2014-11-241-47/+67
|
* 314 - better syntax for functionsKartik K. Agaram2014-11-241-393/+527
|
* 313 - tangling primitivesKartik K. Agaram2014-11-241-0/+185
|
* 312Kartik K. Agaram2014-11-241-0/+11
|
* 311Kartik K. Agaram2014-11-241-3/+3
|
* 310Kartik K. Agaram2014-11-241-1/+1
|
* 306 - 'sleep' now watches for changes to a locationKartik K. Agaram2014-11-231-76/+14
| | | | | | | | | | | | This simplifies things a lot and eliminates the race condition. I think it's practical too, as long as you save a single location and don't permit sleeping on compound structures. I'm resigned to needing a lock in the native setting. Should I be concerned that I fixed a failing test by getting rid of hit? If I had alternatives, how would I save the old sleep implementation?
* 304 - a unit test for a race conditionKartik K. Agaram2014-11-231-0/+26
| | | | | | | | | | | Still failing, but worth memorializing for posterity. Race condition tests are still experimental, even more tied to a very specific implementation. If I make changes to 'write' the very 'wipe-read' label will go away. But then you just delete all tests relying on stale labels and try to think up new race conditions.
* 300 - missed a spotKartik K. Agaram2014-11-231-1/+53
| | | | | | Also uncovered a bug in convert-braces, which helps see a simpler close-offset. Instead of all that crap with first incrementing then waiting for counter to return to 0, just wait for counter to go to -1.
* 299 - labels inside functionsKartik K. Agaram2014-11-221-6/+38
|
* 298Kartik K. Agaram2014-11-221-10/+10
|
* 296 - finally, shared a channel between routinesKartik K. Agaram2014-11-221-2/+2
| | | | Was already working, test was just stale. Reassuring.
* 294 - read/write now pass channel by referenceKartik K. Agaram2014-11-221-25/+25
| | | | But handoff test still failing.
* 293 - unit test for misplaced deadlockKartik K. Agaram2014-11-221-0/+17
|
* 292 - back to state of commit 276Kartik K. Agaram2014-11-221-1/+1
| | | | | | | | | | | | | | | | What have we learned? a) You can't detect deadlock between running a thread and waking up sleeping threads -- you may miss threads that are about to become available. b) Most of the context-switching code in 'run' shouldn't assume routine* is correctly set. That's just for 'run-for-time-slice' and for checking on blocked threads. I was implicitly requiring it when I shouldn't, and not setting it when checking blocked threads. Before I fix the next failing test I want to write unit tests for a) above.
* 291 - figured out the channel-handoff problemKartik K. Agaram2014-11-211-1/+3
| | | | | | | | 'read' and 'write' pass in the channel by value, so they block on different *local* variables. Does this kill my plan to pervasively use call-by-value everywhere? No, we might be able to salvage it if channels are the only shared pointers.
* 290 - how was channel-write-block *ever* working?!Kartik K. Agaram2014-11-211-1/+5
| | | | Oh right, because I wasn't using default-scope when checking to wake up.
* 289 - finally back to deadlock detectionKartik K. Agaram2014-11-211-3/+24
|
* 288 - support sleeping while watching a memory locationKartik K. Agaram2014-11-211-2/+50
|
* 283Kartik K. Agaram2014-11-211-2/+5
|
* 282 - scheduler skips ahead when all routines are asleepKartik K. Agaram2014-11-211-4/+18
|
* 281Kartik K. Agaram2014-11-211-2/+15
|
* 280 - waking up sleeping routinesKartik K. Agaram2014-11-211-0/+40
| | | | Tests still hanging at some point.
* 277 - back up, start refactoring the schedulerKartik K. Agaram2014-11-211-24/+64
| | | | | | | | | In trying to share pipes between routines, I realized my scheduler was actually quite brittle. Changing scheduling-interval* shouldn't be required in most tests, and shouldn't change the outcome most of the time. Current state: all scheduler tests fail, but everything else passes.
* 276 - now fork can take any argsKartik K. Agaram2014-11-191-0/+14
| | | | | | | | | No oargs, though. Hopefully we don't need them. Use channels for passing data back. Drawback: channels must all be passed in by value, and their direction isn't obvious. Hard to tell when multiple threads read/write the same channel. Hopefully it's amenable to static analysis.