[Haskell-cafe] Imagining a G-machine
Derek Elkins
derek.a.elkins at gmail.com
Wed May 16 19:29:02 EDT 2007
Albert Y. C. Lai wrote:
> A native G-machine --- physical, or chemical, or biological, but not a
> repressed simulation over the imperative cpu-memory architecture --- is
> the dream of every lazy-functional programmer of great devotion. If only
> it became the dominant computing architecture! People would say, Haskell
> is high-level assembly because it is the closest to the bare metal (or
> bare protein) and still supports all sorts of abstractions. People would
> ask, why is my C program five times slower than Haskell, and people
> would answer, that's because C is compiled to a stack of seven monad
> transformers (one of which is ContT to support longjmp), and because you
> should use more linked lists and fewer arrays. We truely rule the world
> when C programmers have to consult us for performance tips.
>
> A necessary condition for dominance is existence. Here is my crazy
> imagination of a native G-machine. It is worded as biotech but may as
> well be molecular computing or nanotech.
>
> The heap is a soup of nutrients. A node is a molecular structure made
> from the nutrients. A thunk is a lot of nodes linked up. Nodes and
> thunks are suspended in the soup. Allocation means constructing nodes
> and links from nutrients, and deallocation means unlinking nodes and
> eventually dismantling them back into nutrients. As a side effect,
> memory upgrade is cheap and convenient: Just go buy a can of Campbell
> soup (my favourite is the alphabet soup) and pour into your heap. There
> are 24-hour convenient stores at every street corner --- pervasive
> computing has never been so pervasive before.
>
> A thunk is nodes linked together and suspended in the soup. A theorem in
> graph theory asserts that all finite graphs can be embedded without
> crossing edges in 3D space, and we take advantage of this to space out
> the nodes in a complicated thunk. Still, it is not easy, being NP-hard
> and all. There is a relaxation heuristic for this: It simply requires
> nodes to be a bit repulsive to each other and links to be elastic, and
> they will sort things out themselves. (When they don't, a bit of shaking
> up helps tremendously.)
>
> Evaluation is performed by a small organism crawling over a thunk and
> performing its thunk-rewriting duty as per the G-machine. It applies
> enzymes to construct and deconstruct nodes and links from nutrients. It
> performs primitive arithmetic on its own. It maintains its own stack,
> inside or outside its body (to be investigated). It is possible to
> unleash several such evaluators for parallel computing. It is possible
> to enable reproduction to boost parallelism.
>
> To add garbage collection, roots send out a periodic (or sustained)
> signal to all connected nodes. Nodes receiving the signal do not
> self-destruct. Nodes not receiving the signal invokes their built-in
> self-destruct mechanism to dissolve themselves back into nutrients.
> There may be better schemes.
>
> Interacting with the outside world is open, but Andrew Gordon's thesis
> contains translations from monadic I/O to other I/O schemes, e.g.,
> continuations, streams, etc. Perhaps one of them can be adapted.
>
> Debugging can be done by making evaluators send radio signals concerning
> operations they perform; then a second computer can log these and you
> can review them. You can also use radio signals to instruct the
> evaluators to perform unusual operations on demand.
>
> The existence of a native G-machine is a necessary but not sufficient
> condition for world dominance. We still need to make it fast, compact,
> and cheap. There may also be better but totally different ways to
> realize a native G-machine.
Amorphous computing (http://www-swiss.ai.mit.edu/projects/amorphous/), including
biological computers (http://www-swiss.ai.mit.edu/~rweiss/bio-programming/), an
application domain for pure FP (http://www.eecs.harvard.edu/~mdw/proj/mp/) ?
More information about the Haskell-Cafe
mailing list