Skip to content
Release 0.8.0

NEWS

This is another release introducing substantial changes to machine's code and
capabilities.

CLOSURES

Viua 0.8.0 sports much better support for closures than previous releases by
giving programmers way to choose which parts of the environment (which values) are
captured and how they are captured (by copy, by move, or by reference).
The cost for this feature is lost backwards compatibility.

VIRTUAL PROCESSES

Threads are renamed to processes.
A unit of execution in Viua VM is a "virtual process".
Each virtual process is separated from every other one.
Processes communicate only by means of message packages.
That does not sound very much like a definition of a "thread".

INTER-FUNCTION TAILCALLS

Viua 0.8.0 supports inter-function tailcalls.
Looping can be now be elegantly implemented using recursion instead of
assembler-like `branch` and `jump` instructions.

IMMEDIATE COPY ON PASS-BY-COPY

Starting with this version, machine immediately copies parameters passed by copy.

FOREIGN CALL OFFLOADING

Before this version FFI calls were blocking whole machine, i.e. if one process called
a foreign function, no other process could run until foreign function returned.
This was caused by the fact that machine was single-threaded.
Viua 0.8.0 spawns two threads: one for running native Viua code, and a second one
for running foreign code.
The process that called a foreign function is suspended until the foreign function returns
but all other VM processes are not.

STANDARD LIBRARY IMPROVEMENTS

Some additions and improvements were made to standard library modules `std::misc`,
`std::vector` and `std::functional`.