Abstract. We show how expressions written in a functional programming language can be robustly evaluated on a modular asynchronous spatial computer by compiling them into a distributed virtual machine comprised of reified bytecodes undergoing diffusion and communicating via messages containing encapsulated virtual machine states. Because the semantics of the source language are purely functional, multiple instances of each reified bytecode and multiple execution threads can coexist without inconsistency in the same distributed heap.
A Pourable ComputerLet us consider a hypothetical molecular computer of the far future. Outwardly, it might look like a beaker filled with water. However, instead of transistors made of silicon, its active components would be billions of instances of hundreds of different molecular species, all in solution. Some species would represent instructions while others would represent data. Whether instructions or data, the interactions between the molecules in solution would be rapid, highly specific, and diffusion driven. The resulting computational process would be parallel, distributed, spatial, and asynchronous.Compared to a conventional computer, a molecular computer of the kind described above would have several interesting properties. For example, if half of the contents of the beaker containing a running computation were poured into a second beaker we would expect the computation to continue uninterrupted in both. Similarly, if we were to continue this process, and were to pour half of the contents of the two beakers into two more beakers, we would expect the computation to continue uninterrupted in all four. Significantly, we would expect to be able to continue this process of dividing the computation until the volume of liquid in each beaker was so small that some beakers were missing instances of one or more of the molecular species necessary for the computation to continue. To summarize, we observe that, up to a point, dividing the computation into two changes neither its eventual result nor the time required for it to complete-it merely decreases the probability of its completion.We become aware of a second and equally interesting property when we consider the effect of pouring the contents of two beakers (previously divided) back into one. We would expect that the computation in the first beaker would reintegrate with the computation in the second. Reactants and products from the