| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
'default-scope' is now 'default-space'
'closure-generator' is now 'next-space-generator'
The connection to high-level syntax for closures is now tenuous, so
we'll call the 'outer scope' the 'next space'.
So, let's try to create a few sentences with all these related ideas:
Names map to addresses offset from a default-space when it's provided.
Spaces can be strung together. The zeroth variable points to the next
space, the one that is accessed when a variable has /space:1.
To map a name to an address in the next space, you need to know what
function generated that space. A corollary is that the space passed in
to a function should always be generated by a single function.
Spaces can be used to construct lexical scopes and objects.
|
| |
|
| |
|
|
|
|
|
| |
We expect users to come across mu from arbitrary bits of code, so try to
make each line as self-contained as possible.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
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.
|