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`.