- ...
subexpression1.1
- The term eager does not have a
universally agreed-upon definition in the programming languages
community. In particular, it is occasionally confused in
a semantic scope with the term strict.
We use it here in the operational sense as described by
[AG94, p.268] and others to mean early
concurrent evaluation of the subexpression.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...[Moh90]1.2
-
Eager parallelism is intrinsic in the notion of a future,
however; see [RHH85] for details.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... evaluated1.3
- Not quite.
Since it is running in a separate task,
the suspended version usually does not have to save and restore as
many registers on the stack. This is significant; depending on the
amount of data it can be cheaper to allocate a suspension and garbage
collect it than to save and restore a lot of registers on the stack.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...thunks1.4
-
A thunk is a closure with no arguments,
capturing a form with an environment
needed to evaluate the form when the thunk is thawed.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... languages2.1
- This has
also been a factor in the decline of alternative,
language-specific architectures.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... language2.2
-
Virtual machines are sometimes called abstract machines
in the literature. This term may denote a higher level of
abstraction than virtual machine implies.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... performance2.3
-
Strictly speaking, this is true for non-NUMA designs too,
but for caching and virtual memory reasons, not network
design.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
dependent3.1
- The current DSI microkernel requires at least four.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... level3.2
-
At least for detection; suspension creation is
still an explicit operation at this level.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... preemption3.3
-
Actually, in the current implementation preemption is
allowed only on certain instructions, because
transient registers are not saved across context switches.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... scheduling3.4
- See
chapter 6 for clarification.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... mechanism4.1
-
Note that we are not talking about a side-effect visible
in Daisy.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... writer4.2
-
Due to a locality scheduling constraint that is explained
in chapters 5 and 6.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... 4.3
- See
chapter 5.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
pending4.4
-
If possible, signals are delivered to a processor using the
actual exception mechanism of the host (if this is too
expensive simple polling is used). However, because of
DSI's transient register design they can only be delivered
in DSI code at certain virtual instruction boundaries.
Therefore, they may get delivered in batches; see chapter
3 for further details.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... register-resident4.5
-
In some cases context windows cannot be fully mapped
to registers in the host and are partially implemented
in memory; this still speeds context switching by avoiding
intermediate structure manipulation and suspension swapping.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
space5.1
-
Again, with a different compaction scheme we would need
only one vector.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... created5.2
-
Along these lines, our model bears consideration for eager
parallel systems (e.g. using futures), which schedule processes
as they are created.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... 5.3
-
On the other hand, the snoopy cache architecture
used by these systems may be just as sensitive to locality
as a NUMA design [DAKM89].
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... language6.1
- Although this could be done with
strict arguments, revealed by strictness analysis [Hal87,HW87]; see chapter 8.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
parallelism6.2
-
At least potentially so. See section 5.2.2
and chapter 8.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
primitives6.3
-
The algorithms are loosely based on those used
for multisets [FW79,FW80b]; an indeterminate construct appearing
in earlier versions of Daisy.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... process6.4
-
This cannot happen under Daisy, but might under a language
with side-effects.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
marked7.1
-
Unless a collection occurs while DVISCAN is running,
in which case part of the list is marked, and no dangling devices
are collected on that occurrence.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... heap9.1
-
Although heap and stack segments are not allocated
until a process runs for the first time.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.