Changelog ========= Changelog since the version 1.5.0. 2.0.0 ----- 2026-5-31 First major update after the initial stable version. This version is introducing many breaking changes and new features. If you want stability, please consider using 1.8 or waiting for 2.1. Update ~~~~~~ - Official macOS (Apple Clang) support. - The library can be compiled with exceptions disabled (``-fno-exceptions`` or ``/EHs-c-``). The interfaces depending on exceptions will be redirected to an error handling macro defined by the user. Its default behaviour is calling ``std::terminate`` immediately. - (Experimental) Listener for customizing error handling or recording registered entities. - Wrapper of AngelScript memory APIs (``script_allocator``) now can be used in constant evaluation. It will automatically fallback to constexpr allocation under this situation. - Merge the extension library and core library, dropping parts that is not customizable (see the Breaking Change part below). Now, the library is **completely header-only**. - Add more tools for implementing script debugging functionality. - Update I/O module to support formatting script types when ```` header is available. It also provides tools for quick integration with other formatting library like {fmt}. - Unify implementation of binding generators to make the codebase easier to maintain. - Decouple binding generator interfaces with complex AngelScript calling conventions - Tools for comparing script objects. - Enable CMake script to use local external package for developing offline. - Update compatibility with AngelScript 2.39 WIP. - Compile-time validation for signatures of behaviours, callbacks, etc. You can disable it by defining macro ``ASBIND20_CONFIG_NO_COMPILE_TIME_CHECKS``. - Update RAII helpers. - Now binding generators allow appending to existing types. Breaking Change ~~~~~~~~~~~~~~~ - String tools and compressed pair are moved into the namespace ``asbind20::util``. - ``as_allocator`` is renamed to ``script_allocator``. - **Extension library is removed**. Since asbind20 originated from a submodule of a personal project, many of the extensions were built for a private repository. I decided to migrate them to a separate open-source library in the future. Some of the extensions, like string extraction helper and section loader, are merged into the core library. - Use ``asbind20::objfirst`` / ``objlast`` to specify the position of object pointer/reference, if you want to specify them explicitly, instead of dealing with underlying calling convention details of AngelScript. - Redesign lock wrapper to fit common C++ paradigm for shared lock. - Now message callback and exception translator are registered by global functions, instead of ``asbind20::global``. Bug fix ~~~~~~~ - Fix issue when building with Unreal Engine 5 (PR #50 by ThaiNhatMinh) 1.8.0 ----- 2025-10-29 Update ~~~~~~ - ``script_invoke_result`` no longer stores the result inside it, now it will get the result when user needs it (lazy evaluation). According to benchmarks, this has the same performance as the handwritten code retrieving values from AS interfaces directly. It is even slightly faster than the plain handwritten code in some situation. Compared to handwritten implementation, the implementation from previous version is slower about 1% ~ 3%, and even worse when returning a value type with expensive copy construction, such as a string with extremely huge content. - Experimental support for enum with custom underlying type in AngelScript 2.39 WIP. - Utility for quickly implementing conversion rules for enums with underlying type other than ``int`` such as ``std::byte``. - Experimental support for script ``foreach``. - ``script_invoke_result`` now supports ``operator->`` for pointer type, which is useful for accessing members of returned reference types. - Expose ``get_context_result`` for easily retrieving result from context. - Add member function ``value_or`` for ``script_invoke_result``. - ``script_invoke_result`` can be converted to ``std::optional``. - ``script_invoke_result`` can be converted to ``std::expected`` if C++23 is available. - Backport to support Clang 15 toolchain. - More utilities. - Intermediate interfaces for creating generic wrappers have all moved into the internal namespace, in order to not confuse the users. Bug fix ~~~~~~~ - Fix error caused by generated default/copy constructor when registering a C array (``type[size]``) as value type. Breaking Change ~~~~~~~~~~~~~~~ - Due to the new lazy evaluation implementation of ``script_invoke_result``, it now can only be returned by script invocation tool. User cannot calls its constructor by value directly, e.g., returning a placeholder value when script failed. Please consider converting the code style described above to use ``std::optional`` (or ``std::expected`` if C++23 is available). Documentation ~~~~~~~~~~~~~ - Add Chinese README 1.7.1 ----- 2025-8-7 Update ~~~~~~ - Update compatibility with AngelScript 2.38.0. - Mark more pointers in parameter list by ``const``. - Add CMake flag for controlling the warning-as-error compiler flag during development and test. - Add test for clang-cl (Clang with MSVC-like interfaces) support. - Add nightly test for checking compatibility of asbind20 with the latest WIP version of AngelScript. - Add benchmarks for finding performance issues during development. Bug fix ~~~~~~~ - Add some missing utility interfaces for RAII helpers. Documentation ~~~~~~~~~~~~~ - Update and clarify. - Fix typo. 1.7.0 ----- 2025-7-19 Update ~~~~~~ - Fully support of x86 (32bit) Windows platform, including special treatment for ``__stdcall``. - Binding generator for reference type no longer requires the registered type to be complete type. - Policy for converting script initialization list for constructors accepting ``std::from_range(_t)`` when C++23 is enabled. Breaking Change ~~~~~~~~~~~~~~~ - Redesign interfaces of ``container::single`` to reduce some surprising behaviours. For example, the destructor won't clean the data, you need to call another function for releasing the data. Bug fix ~~~~~~~ - Fix mismatched declaration in array extension that may cause crash on x86 platform. - Fix CMake error when configuring with Clang 19 toolchain. Documentation ~~~~~~~~~~~~~ - Add information about using asbind20 in XMake projects. Removed ~~~~~~~ - GCC 12 support is dropped due to too many workarounds. Please use GCC 13 or newer. 1.6.0 ----- 2025-6-14 Update ~~~~~~ - Helper for registering modulo operator. - Composite property support. - Composite methods support including generic wrapper with or without variable types. - Official arm64 support. Previously, it works theoretically but not actually tested. - New tools for managing script function without increasing its reference count. It's useful when the programmer has deep understanding about the lifetime and want to write zero overhead code. - Adjust file structure for maintenance. - Slightly optimize memory usage of ``small_vector``. Breaking Change ~~~~~~~~~~~~~~~ - Removed ``script_function_base``. Use ``script_function`` instead. - ``asbind20::meta::compressed_pair`` changed to ``asbind20::compressed_pair`` - ``asbind20::meta::overloaded`` changed to ``asbind20::overloaded`` Bug fix ~~~~~~~ - Update compatibility with ``string_view`` of binding generators. - Fix compilation error when using an integer bigger than 8 bytes, such as ``__int128`` extension provided by Clang and GCC. Documentation ~~~~~~~~~~~~~ - Fix typo and wrong link. - Fix highlight script for AngelScript. - Add entrance for extension library for future update. (Currently, the documents of extensions are still incomplete) Deprecated ~~~~~~~~~~ - Support of GCC 12 will be dropped in the next release, because it requires too many workarounds. Please use GCC 13 or newer. 1.5.2 ----- 2025-5-13 Update ~~~~~~ Complete support of using AngelScript interfaces within ``AngelScript::`` namespace. (Thanks `GitHub @sashi0034 `_) 1.5.1 ----- 2025-4-21 Update ~~~~~~ - Some interfaces of ``container::single`` will return a ``bool`` value for checking result Bug fix ~~~~~~~ - Exception guarantee for ``notify_gc`` policy - Exception guarantee for ``small_vector`` - Fix memory leaks if any exception occurs in generated constructors / factories 1.5.0 ----- 2025-3-31 What's New ~~~~~~~~~~ Core Library ^^^^^^^^^^^^ - New tools for binding complex operator overloads - Interfaces of binding generator now all take ``std::string`` / ``std::string_view`` instead of ``const char*`` for convenience and consistency - Tools for multithreading with AngelScript - New tool named ``overload_cast`` for choosing desired overloaded functions Extension Library ^^^^^^^^^^^^^^^^^ First stable version of extension library released! Please check the comment in source code of extension for their documentation. Full documentation for extension library is coming soon. Documentation ~~~~~~~~~~~~~ Rewrite and migrate to Read the Docs. Bug Fix ~~~~~~~ - Generic wrapper may crash when returning some kinds of value type by value - Fix several bugs in ``small_vector``