Release 0.6.0 550 commits since last relase. NEWS This relase amounts to two months and a week of work. The immediate jump from v0.5.0 to v0.6.0 is justified, because not only the time period between releases is unusually long (in terms of Viua relases) but also because the change scope is unsusually broad. To sum up the relase in six words: > Refactoring, bugfixes, features. In large quantities. CHANGELOG 1) Added `Prototype` class for user-defined types User-defined types can be created with `class`, `derive`, `attach` and `register` instructions. Instances of these types are created with `new` instruction. Read sample code and documentation to learn more. 2) Better error messages after crash Long traces do not prevent users from discovering source of the crash - exception details are printed *after* the stack trace. 3) Documented and tested function fall-through behaviour Functions support falling-through to the next one. This could lead to endless loops should the "next" function call the "falling" one. Such bugs are prevented by limiting stack size to 8192 frames. The limit may be changed at compile time. An `Exception` is thrown when the limit is exceeded. 4) EXCALL opcode is no more The `excall` instruction has been removed from the bytecode definition, and `call` instructions should be used instead. This provides a uniform call interface for both native and foreign functions. 5) EXIMPORT opcode is no more The `eximport` instruction has been renamed to `import`. 6) `VIUAPATH` and `VIUAAFTERPATH` used by `link` instruction It is now possible to put Viua libraries and tell the machine where to look for them. 7) Added `VIUAPRELINK` and `VIUAPREIMPORT` environment variables These environment variables may be used to tell the machine to always import and link specified modules. Note that the machine must be able to find requested modules on its `PATH` variables. 8) Support for relative jumps in assembler Users can now write `jump -9` or `branch 4 +8 +1` to tell the assembler to generate jumps relative to the current instruction index. Note: jumps are recalculated as absolute in final executables. 9) Merged pull-requests fixing build issues from @saper A big "Thank you" for @saper for sending pull requests that fixed some build issues on FreeBSD. 10) More language constructs added to assembler For example, instruction counting using `[ (instr0) (instr1) ... (instrN) ]` syntax or instruction nesting using `instr2 (instr1 (instr0 op0))` syntax. Again, read sample code and documentation to learn more. 11) Dynamic dispatch using `msg` instructions Viua supports dynamic dispatch of methods and all types that have registered at least one method. 12) User-defined types written in C++ Viua provides support for nearly-direct usage of classes defined in C++ from machine's bytecode. This is done using black magic, pointers to members and virtual functions. The most important thing to know is that a C++ class must derive from `Type` and provide methods with correct signatures to be loadable into machine's typesystem. Read sample code and documentation to learn more. 13) Better implementation of references References should not leak memory now. 14) Altered catch-throw mechanism instructions Renamed `try` instruction to `enter`, and `tryframe` to `try` in order to have code read in a more intuitive way. 15) Added `std::io` module Very basic I/O capabilities. 16) Added `std::random` module Very basic random-related functions using standard Linux interfaces. 17) Bytecode size and jumps are encoded using `uint64_t` This makes the bytecode size bigger, but allows creating programs much bigger than 65 kilobytes.