Release 0.5.0 249 commits since last release. NEWS This release introduces several major features and changes. It also continues the process of fixing machine's bytecode layout and assembly syntax. Features and changes introduced in this version are **huge**. They break compatibility with previous releases, but at the same time greatly enhance capabilities of the machine. Big newcomers are present both in standard runtime library, and in core code. Among them are: * full support for dynamic linking, * fixed exception handling, * better compile-time checking, * fixed external C++ libraries interface, * enhanced standard runtime modules, CHANGELOG 1) Changed interface for external C++ library modules Interface that C++ libraries must provide for the machine has been changed. Now, instead of two functions (`exports_names()` and `exports_pointers()`) they must provide only one (`exports()`). This single point of introduction makes it easier to spot interfacing bugs and to create external libraries for Viua. More information about external modules can be found in documentation. 2) Updated bytecode generation process Bytecode generation process has been split into two stages. Code responsible for each stage has also been separated. High level *program generation* is driven by a bytecode generation API provided by the `Program` class. Low-level *bytecode generation* is carried out using functions from `cg::bytecode` (i.e. *code generator - bytecode*) namespace. 3) Travis CI setup Not a feature in the core of the machine, but a feature nevertheless, Travis CI environment has been set up for the machine. 4) Opcode operands reordering Many opcodes had their operands reordered. The reason for this was to always have *target register* (i.e. the register whose value will be changed by the instruction) as first operand. 5) Better compile-time code checking Assembler is now able to catch more fatal errors during compilation. New code privdes the assembler with ability to verify frame balance of the program, i.e. detect frameless calls (situations where `CALL`, `FCALL` or `EXCALL` instructin is executed without active frame), and excessive frame spawning (where two frames are spawned without a calling instruction between). This is a first implementation of this feature and as such should not be treated as entirely bugless. Error reports are now more detailed and include line numbers to aid programmers in locating spotted bugs. 6) Dynamic linking This release introduces full support for dynamic linking of modules written in native language of Viua. Support is provided via `LINK` opcode, and `.signature:` and `.bsignature:` assembler directives. Combined with better standard runtime library, this feature shines. It is now possible to use the separate compilation capabilities machine provides to their fullest. Programs that should be self-contained can be compiled statically and sent over the network. Programs that should be lightweight and can rely on environment can use dynamic linking to carry around less bytes and always use newest versions of the code. 7) `ARGC` opcode This is a huge feature for frame introspection. Until release 0.5.0, only `main/1()` function could easily detect number of its parameters. Other functions had to wrap their parameters in a vector, and use `invoke/2()` from standard library when they needed such functionality. Now, with `ARGC` opcode available there is no need for such workaround. Wvery function may easily inspect how many arguments it got, and if needed obtain vector containing their copies with `misc::argsvector` block from standard runtime library. 8) Names of dynamically linked functions and blocks are not mangled Current scheme for name mangling of dynamically linked code blocks has been dropped until a better one emerges. A no-mangling scheme may be adopted should it prove reliable enough. 9) Installation of Viua header files Header files placement has been changed. They can be now installed under `/usr/include/viua` for easy access during compilation of external C++ libraries.