Execution model
Programs written for Viua VM are organised into functions and data. Functions are sequences of instructions operating on data stored in registers. A register is a slot which may contain a value (a valueless, empty register is said to be void).
At runtime, functions are invoked and their instructions executed. A function invocation comes in two flavours - synchronous and concurrent. Synchronous invocation is a simple function call which suspends the caller until the callee finishes execution. Concurrent invocation involves an actor ie, an independent, isolated process to run the callee.
In both cases the arguments (actual parameters) are passed to the callee via the arguments register set, and the value produced by the callee is returned to the called as a return value. Details of how this is achieved in each case are different, though.
The synchronous inocation is the simpler case. The call instruction suspends the caller and produces a value in the output register.
The concurrent inocation's return value is available indirectly. In this case the call instruction returns a PID of the spawned process. This PID can be queried about the callee actor's state and, eventually, read its return value. This is a concept similar to a future when considering its usefulness in fetching return values of asynchronous function calls.
The PID also serves as a means of communication. It can be used to send messages to the process associated with it. This message exchange is the only means of communication between running actors.