Release 0.4.5 58 commits since last release. NEWS This relase brings several improvements to the system surrounding Viua VM as a whole and should make writing programs in Viua much better experience. Also, one *very old* bug has been fixed. CHANGELOG 1) Higher-order functions Viua type system supports functions as a first class objects. Function can be stored as objects in registers (or rather, an ilussion of such behaviour is created) and called via these objects. New test cases were developed to provide example implementations of some canonical concepts involving first-calss functions. The 'sample/asm/functions/higher_order' directory contains source code with implementations of apply(), invoke(), map() and filter() functions. invoke() function may be particularly interesting as it provides an implementation of argument list unpacking known from Python *args. It takes two arguments - a function object and a vector of parameters it should be passed. 2) Better organisation of CPU code CPU::dispatch() method (one of the biggest ones) have been moved to a separate file to speed up compilation. More of such refactoring is needed - especially for assembler, bytecode generator and debugger as they are mostly implemented in one big source file making threading of their compilation process impossible. 3) Minor improvements in debugger The 'cpu.jump' command has been improved - it understands '+N' operands for jumping +N instructiond forward, locations in bytecode given in hexadecimal, and 'sizeof(opcode)' jumps. Also, debugger uses disassembler code generator for printing all of the opcodes being executed. This means no more 'no printer function defined for this opcode' messages. 4) VERY IMPORTANT bugfix in assembler Branch calculation has been fixed. Jumps and branches no longer crash the machine if they are defined in second and later functions in file.