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 <format> 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<void> 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