# Version history ## Libucl 0.5 - Streamline emitter has been added, so it is now possible to output partial `ucl` objects - Emitter now is more flexible due to emitter_context structure ### 0.5.1 - Fixed number of bugs and memory leaks ### 0.5.2 - Allow userdata objects to be emitted and destructed - Use userdata objects to store lua function references ### Libucl 0.6 - Reworked macro interface ### Libucl 0.6.1 - Various utilities fixes ### Libucl 0.7.0 - Move to klib library from uthash to reduce memory overhead and increase performance ### Libucl 0.7.1 - Added safe iterators API ### Libucl 0.7.2 - Fixed serious bugs in schema and arrays iteration ### Libucl 0.7.3 - Fixed a bug with macros that come after an empty object - Fixed a bug in include processing when an incorrect variable has been destroyed (use-after-free) ### Libucl 0.8.0 - Allow to save comments and macros when parsing UCL documents - C++ API - Python bindings (by Eitan Adler) - Add msgpack support for parser and emitter - Add Canonical S-expressions parser for libucl - CLI interface for parsing and validation (by Maxim Ignatenko) - Implement include with priority - Add 'nested' functionality to .include macro (by Allan Jude) - Allow searching an array of paths for includes (by Allan Jude) - Add new .load macro (by Allan Jude) - Implement .inherit macro (#100) - Add merge strategies - Add schema validation to lua API - Add support for external references to schema validation - Add coveralls integration to libucl - Implement tests for 80% of libucl code lines - Fix tonns of minor and major bugs - Improve documentation - Rework function names to the common conventions (old names are preserved for backwards compatibility) - Add Coverity scan integration - Add fuzz tests **Incompatible changes**: - `ucl_object_emit_full` now accepts additional argument `comments` that could be used to emit comments with UCL output ### Libucl 0.8.1 - Create ucl_parser_add_file_full() to be able to specify merge mode and parser type (by Allan Jude) - C++ wrapper improvements (by @ftilde) - C++ wrapper: add convenience method at() and lookup() (by Yonghee Kim) - C++ wrapper: add assignment operator to Ucl class (by Yonghee Kim) - C++ wrapper: support variables in parser (by Yonghee Kim) - C++ wrapper: refactoring C++ interface (by Yonghee Kim): - use auto variables (if possible) - remove dangling expressions - use std::set::emplace instead of std::set::insert - not use std::move in return statement; considering copy elision - C++ wrapper: fix compilation error and warnings (by Zhe Wang) - C++ wrapper: fix iteration over objects in which the first value is `false` (by Zhe Wang) - C++ wrapper: Macro helper functions (by Chris Meacham) - C++ wrapper: Changing the duplicate strategy in the C++ API (by Chris Meacham) - C++ wrapper: Added access functions for the size of a UCL_ARRAY (by Chris Meacham) - Fix caseless comparison - Fix include when EPERM is issued - Fix Windows build - Allow to reserve space in arrays and hashes - Fix bug with including of empty files - Move to mum_hash from xxhash - Fix msgpack on non-x86 - python: Add support to Python 3 (by Denis Volpato Martins) - python: Add support for Python 2.6 tests (by Denis Volpato Martins) - python: Implement validation function and tests (by Denis Volpato Martins) - python: Added UCL_NULL handling and tests (by Denis Volpato Martins) - Fix schema validation for patternProperties with object data (by Denis Volpato Martins) - Remove the dependency on NBBY, add missing include (by Ed Schouten) - Allow to emit msgpack from Lua - Performance improvements in Lua API - Allow to pass opaque objects in Lua API for transparent C passthrough - Various bugs fixed - Couple of memory leaks plugged