| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
We'll worry later about implementing them in mu.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
I'm still figuring out the idioms, and it doesn't seem like there's an
easy way to avoid redundant allocations and arg reading.
At least for generic functions we want to optimize for each call-site,
we can create subsidiary labels to jump to.
Also, this is the first genuine use for random access to a function's
arguments.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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!'.
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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?
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
The hope is that those labels will help us test the race condition by
hooking into the scheduler.
Hooking into the scheduler will complicate the task of dropping racket
and running tests natively. But we'll worry about that later.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
| |
Was already working, test was just stale. Reassuring.
|
|
|
|
|
| |
Too hard to canonicalize routines in traces, with their nested tables.
Give up for now.
|
|
|
|
| |
But handoff test still failing.
|
|
|
|
|
|
|
|
| |
'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.
|
|
|
|
| |
Oh right, because I wasn't using default-scope when checking to wake up.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|