From 00182740f9d0e15f662065988ea1d317808a3b88 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sun, 18 Jan 2026 22:09:39 +0530 Subject: [PATCH 001/102] readme update. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b19850a..bbbb9c73 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ First, create an instance of `rtl::CxxMirror` – ```c++ auto cxx_mirror = rtl::CxxMirror({ /* ...register all types here... */ }); ``` -The `cxx_mirror` object provides access to the runtime reflection system. It enables querying, introspection, and instantiation of registered types without requiring compile-time type knowledge at the call site. +The `cxx_mirror` object provides access to the runtime reflection system. It enables function and method invocation, as well as type instantiation, without requiring compile-time type knowledge at the call site. It can reside in any translation unit. To make it globally accessible and ensure it is initialized only when needed, a singleton access interface can be used – ```c++ // MyReflection.h From 8e492a6a24d7b63c0c429b1c425657282266e8f6 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 08:20:04 +0530 Subject: [PATCH 002/102] Readme update. --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bbbb9c73..3bdd3866 100644 --- a/README.md +++ b/README.md @@ -56,12 +56,11 @@ First, create an instance of `rtl::CxxMirror` – ```c++ auto cxx_mirror = rtl::CxxMirror({ /* ...register all types here... */ }); ``` -The `cxx_mirror` object provides access to the runtime reflection system. It enables function and method invocation, as well as type instantiation, without requiring compile-time type knowledge at the call site. -It can reside in any translation unit. To make it globally accessible and ensure it is initialized only when needed, a singleton access interface can be used – +The `cxx_mirror` object provides access to the runtime reflection system. It stores metadata for all registered entities and supports name-based lookup. The object may reside in any translation unit. To make it globally accessible while ensuring lazy initialization, a singleton access interface can be used – ```c++ // MyReflection.h namespace rtl { class CxxMirror; } // Forward declaration, no includes here! -struct cxx { static rtl::CxxMirror& mirror(); }; // The Singleton. +struct cxx { static rtl::CxxMirror& mirror(); }; // The singleton interface. ``` define and register everything in an isolated translation unit – ```c++ From 28b662b38d749ca1c090e0519e2afcde2b5a02e2 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 09:51:28 +0530 Subject: [PATCH 003/102] Readme update. --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3bdd3866..7e21f5f1 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ if (!classPerson) { /* Class not registered. */ } ``` `rtl::CxxMirror` provides two lookup APIs that return reflection metadata objects: `rtl::Record` for any registered type (class, struct or pod) and `rtl::Function` for non-member functions. -From `rtl::Record`, registered member functions can be queried as `rtl::Method`. These are metadata descriptors (not callables) and are returned as `std::optional`, which will be empty if the requested entity is not found. +From `rtl::Record`, registered member functions can be obtained as `rtl::Method`. These are metadata descriptors (not callables) and are returned as `std::optional`, which will be empty if the requested entity is not found. Callables are materialized by explicitly providing the argument types we intend to pass. If the signature is valid, the resulting callable can be invoked safely. For example, the overloaded constructor `Person(std::string, int)` – @@ -138,7 +138,7 @@ rtl::method getName = oGetName->targetT() .argsT().returnT(); auto [err, ret] = getName(robj)(); // Invoke and receive return as std::optional. if (err == rtl::error::None && ret.has_value()) { - std::cout << ret.value(); + std::string nameStr = ret.value(); } ``` If the return type is also not known at compile time,`rtl::Return` can be used – @@ -147,8 +147,7 @@ rtl::method getName = oGetName->targetT() .argsT().returnT(); auto [err, ret] = getName(robj)(); // Invoke and receive rtl::RObject as return, wrapping std::string underneath. if (err == rtl::error::None && ret.canViewAs()) { - const std::string& name = ret.view()->get(); - std::cout << name; // Safely view the returned std::string. + std::string nameStr = ret.view()->get(); // Safely view the returned std::string. } ``` ### How RTL Fits Together From 4b49812dc8a0c5a62b95e6f20c6e92a17652e968 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 17:20:35 +0530 Subject: [PATCH 004/102] Design doc update. --- README.md | 12 +++--- .../DESIGN_PRINCIPLES_AND_FEATURES.md | 38 ++++++++++++------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 7e21f5f1..443cf3cf 100644 --- a/README.md +++ b/README.md @@ -120,8 +120,8 @@ if (!oGetName) { /* Member function not registered */ } ``` And materialize a complete type-aware caller – ```c++ -rtl::method getName = oGetName->targetT() - .argsT().returnT(); +rtl::method getName = oGetName->targetT().argsT() + .returnT(); if (!getName) { std::cerr << rtl::to_string(getName.get_init_err()); } @@ -134,8 +134,8 @@ The above `getName` invocation is effectively a native function-pointer hop, sin If the concrete type `Person` is not accessible at the call site, its member functions can still be invoked by erasing the target type and using `rtl::RObject` instead. The previously constructed instance (`robj`) is passed as the target – ```c++ -rtl::method getName = oGetName->targetT() - .argsT().returnT(); +rtl::method getName = oGetName->targetT().argsT() + .returnT(); auto [err, ret] = getName(robj)(); // Invoke and receive return as std::optional. if (err == rtl::error::None && ret.has_value()) { std::string nameStr = ret.value(); @@ -143,8 +143,8 @@ if (err == rtl::error::None && ret.has_value()) { ``` If the return type is also not known at compile time,`rtl::Return` can be used – ```c++ -rtl::method getName = oGetName->targetT() - .argsT().returnT(); +rtl::method getName = oGetName->targetT().argsT().returnT(); + auto [err, ret] = getName(robj)(); // Invoke and receive rtl::RObject as return, wrapping std::string underneath. if (err == rtl::error::None && ret.canViewAs()) { std::string nameStr = ret.view()->get(); // Safely view the returned std::string. diff --git a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md index a6702599..7bd36ab5 100644 --- a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -1,27 +1,39 @@ -### 🪶 No Static Globals, No Macros, No Surprises +### 🪶 Registration Model and Metadata Lifetime -RTL does not rely on: +RTL does not use macro-based reflection, implicit static initialization at program startup, or centralized global registries. +All registration is performed lazily and explicitly by user code, and registered metadata persists for the lifetime of the process. -* Hidden static registration -* Centralized global registries -* Preprocessor hacks +For every registered type, method, or function, RTL creates a **dedicated dispatch object** that encapsulates: -Instead, registration is explicit and lazy. +* The callable pointer (function, method, or functor) +* The associated reflection metadata -For each registered type, RTL contributes **two lightweight entries** into its process-local tables: +These dispatch objects are defined in: -* A **lambda wrapper** placed in a scoped `static` `std::vector` and is responsible for making the final call using the actual functor. -* A **raw function pointer** stored in a parallel scoped `static` `std::vector`, used to detect and prevent redundant registrations. +``` +rtl/dispatch/function_ptr.h +rtl/dispatch/method_ptr.h +``` + +Each dispatch object is: + +* Created **exactly once per unique registration** +* Stored in a process-lifetime `std::list` +* Reused across all `rtl::CxxMirror` instances +* Never duplicated, regardless of how many times or where the same registration statement is executed -From there, `rtl::CxxMirror` does not hold onto heavyweight state. It is **as ordinary as any local variable** — you can construct one, keep it alive for the entire application, or discard it after a short-lived query. The `CxxMirror` can be materialized again with the same or different set of types. RTL guarantees that **materializing the same registration statement multiple times** (for example): +Repeated registration attempts always resolve to the same existing object. + +`rtl::CxxMirror` does not own or duplicate this metadata. It is a lightweight, ordinary object that can be constructed, copied, or destroyed without affecting the underlying registration state. Mirrors may be created with different type sets, and the same registration statements can be materialized multiple times. + +For example: ```cpp rtl::type().member().method("getName").build(&Person::getName); ``` -will always yield **exactly the same metadata**, without ever admitting redundant lambdas or functors into the static tables. - -> *"Mirrors are **cheap and repeatable**: the metadata is stable, redundant entries are never entertained, and the user remains in full control of a mirror’s lifetime."* +will always yield the same metadata and dispatch object for `Person::getName`. +The lifetime of registered metadata is independent of any individual `CxxMirror` instance and persists for the duration of the program. --- From 2a2f895bcf661055452e43a774a71ba2eb3fff8e Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 18:02:08 +0530 Subject: [PATCH 005/102] Design doc update. --- README.md | 8 ++++---- .../DESIGN_PRINCIPLES_AND_FEATURES.md | 17 ++++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 443cf3cf..b6d7731e 100644 --- a/README.md +++ b/README.md @@ -46,10 +46,6 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Tooling-Friendly Architecture*** – Reflection data is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. - -[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md) -[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md) - ## A Quick Preview: Reflection That Looks and Feels Like C++ First, create an instance of `rtl::CxxMirror` – @@ -170,6 +166,10 @@ These callable types are regular value types: they can be copied, moved, stored When invoked, only type-erased callables return an `rtl::error`, with results provided as `rtl::RObject` *(when both the return and target types are erased)* or as `std::optional` *(when only the target type is erased)*, while fully type-aware callables return `T` directly with no error (by design). +[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +  +[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md) + ### How to Build (Windows / Linux) ```sh mkdir build && cd build diff --git a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md index 7bd36ab5..10d09cf8 100644 --- a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -33,21 +33,24 @@ rtl::type().member().method("getName").build(&Person::getName); ``` will always yield the same metadata and dispatch object for `Person::getName`. -The lifetime of registered metadata is independent of any individual `CxxMirror` instance and persists for the duration of the program. +The lifetime of registered metadata is independent of any individual `rtl::CxxMirror` instance and persists for the duration of the program. --- -### ⚡ Reflective Call Performance +### ⚡ Reflective Call Materialization and Performance -Reflective calls in RTL are designed to be explicit, predictable, and minimal. The mechanism unfolds in two clear steps: +RTL employs a two-phase invocation model. Metadata queries return lightweight descriptors such as `rtl::Function` and `rtl::Method`, which must be explicitly **materialized** into callable objects by specifying the expected signature. -1. **Signature Matching** — Each call signature yields a unique type-ID, compared directly against the ID of the lambda-table holding the final call. With a single overload this resolves immediately; if multiple overloads exist, RTL just scans a tiny `std::vector` of candidate IDs. +This deferred materialization acts as a compile-time contract: the user declares the argument and return types they intend to use, and RTL validates and prepares an optimized invocation path accordingly. -2. **Call Dispatch** — Once the correct overload is identified, RTL performs constant-time `std::vector` indexing to retrieve the associated lambda wrapper. This wrapper executes a single hop to the underlying function pointer, forwarding the provided arguments perfectly. +Performance depends on how much type information is provided: -The net overhead of a reflective call is thus a handful of integer comparisons, one direct `std::vector` access, and one lambda-to-function-pointer indirection. There are no dynamic allocations, RTTI lookups, or hidden metadata traversals at call time. The cost is transparent and limited to exactly what is required for overload resolution and safe forwarding — no more, no less. +* **Fully specified signatures** compile to direct function-pointer calls, faster than `std::function`. +* **Type-erased signatures** invoke through a lightweight dispatch layer whose performance is comparable to `std::function` under real workloads. -> *"A reflective call in RTL is not free, but its cost is explicit, transparent, and no greater than what you would write by hand."* +By requiring explicit materialization, RTL produces lightweight, reusable callables that behave like ordinary value-type objects and can be stored in standard containers, letting developers control performance and safety at each call site. + +At call time, RTL performs no dynamic allocations, no RTTI lookups, and no hidden metadata traversals. The runtime cost is explicit, minimal, and comparable to what a developer would implement manually for equivalent type safety and flexibility. --- From 73bee763a306335436749a517e0fed919492a780 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 18:17:08 +0530 Subject: [PATCH 006/102] Design doc update. --- README.md | 8 +++--- .../DESIGN_PRINCIPLES_AND_FEATURES.md | 26 ++++--------------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index b6d7731e..a81f9ac9 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,10 @@ if (err == rtl::error::None && ret.canViewAs()) { std::string nameStr = ret.view()->get(); // Safely view the returned std::string. } ``` +[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +  +[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md) + ### How RTL Fits Together At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. @@ -166,10 +170,6 @@ These callable types are regular value types: they can be copied, moved, stored When invoked, only type-erased callables return an `rtl::error`, with results provided as `rtl::RObject` *(when both the return and target types are erased)* or as `std::optional` *(when only the target type is erased)*, while fully type-aware callables return `T` directly with no error (by design). -[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md) -  -[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md) - ### How to Build (Windows / Linux) ```sh mkdir build && cd build diff --git a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md index 10d09cf8..327ea0a2 100644 --- a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -48,7 +48,7 @@ Performance depends on how much type information is provided: * **Fully specified signatures** compile to direct function-pointer calls, faster than `std::function`. * **Type-erased signatures** invoke through a lightweight dispatch layer whose performance is comparable to `std::function` under real workloads. -By requiring explicit materialization, RTL produces lightweight, reusable callables that behave like ordinary value-type objects and can be stored in standard containers, letting developers control performance and safety at each call site. +By requiring explicit materialization, RTL produces lightweight, reusable callables that behave like ordinary value-type objects and can be stored in standard containers. At call time, RTL performs no dynamic allocations, no RTTI lookups, and no hidden metadata traversals. The runtime cost is explicit, minimal, and comparable to what a developer would implement manually for equivalent type safety and flexibility. @@ -56,29 +56,13 @@ At call time, RTL performs no dynamic allocations, no RTTI lookups, and no hidde ### 🛡 Exception-Free Guarantee -RTL is designed to be virtually exception-free. If an exception ever emerges from RTL, it signals that something deeper is wrong. In practice, such exceptions are almost always caused by client/user code and merely propagate through RTL. Internally, only one scenario could theoretically throw: +RTL is designed to be exception-free. In practice, any exceptions that occur are almost always introduced by user code and merely propagate through RTL. -* `std::any_cast` — guarded by strict, break-proof type checks that make throwing virtually impossible. +For all predictable failure cases, RTL reports errors through explicit error codes(`rtl::error`) rather than throwing exceptions. Critical assumptions are validated before execution, ensuring that failure conditions are detected early and handled in a controlled manner. -This is extremely unlikely, but not absolutely impossible — no system is perfect. -For every predictable failure case, RTL returns explicit error codes instead of throwing. -RTL validates all critical assumptions before proceeding, ensuring predictable behavior and eliminating mid-operation surprises. +This design promotes predictable behavior and avoids unexpected control flow during reflective operations. -> *"Exceptions should never surprise you — in RTL, failures are explicit, validated, and reported as error codes, not as hidden runtime traps."* - ---- - -### 🔒 Const-By-Default Discipline - -RTL enforces a *const-by-default* discipline. All objects **created through reflection** start as *logically-const* — they default to immutability. If no const overload exists, RTL will **automatically fall back** to the non-const overload, since these objects were never originally declared `const`. Explicit `rtl::constCast()` is only required when both const and non-const overloads are present. - -The guiding principle is simple: reflective objects are safe by default, and any mutation must be a conscious, visible decision by the caller. - -At the same time, RTL strictly respects **true-const** objects (e.g., declared-`const` instances or const return values). Such objects remain immutable inside RTL — any attempt to force mutation results in predictable error code (`rtl::error::IllegalConstCast`). - -> *"RTL never mutates true-const objects, and for RTL-created ones it defaults to const, falling back only if needed — explicit rtl::constCast() is required when both overloads exist."* - -This discipline complements RTL’s exception-free guarantee, ensuring both **predictability** and **safety** at the API boundary. +> *Exception-handling behavior has not yet been exhaustively stress-tested across all edge cases, but the system is architected to avoid exception-based control flow by design.* --- From 07f6f231b314cd1b2a15a6225784d4c474011880 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 19:28:23 +0530 Subject: [PATCH 007/102] Design doc update. --- README.md | 4 +-- .../DESIGN_PRINCIPLES_AND_FEATURES.md | 28 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index a81f9ac9..fcc87052 100644 --- a/README.md +++ b/README.md @@ -146,12 +146,12 @@ if (err == rtl::error::None && ret.canViewAs()) { std::string nameStr = ret.view()->get(); // Safely view the returned std::string. } ``` +### How RTL Fits Together + [![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md)   [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md) -### How RTL Fits Together - At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. RTL provides the following callable entities, designed to be as lightweight and performant as `std::function` (and in many micro-benchmarks, faster when fully type-aware): diff --git a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md index 327ea0a2..2e59c6a2 100644 --- a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -22,9 +22,10 @@ Each dispatch object is: * Reused across all `rtl::CxxMirror` instances * Never duplicated, regardless of how many times or where the same registration statement is executed -Repeated registration attempts always resolve to the same existing object. +Repeated registration attempts always resolve to the same existing object. This ensures deterministic behavior – +metadata identity is stable regardless of initialization order or how many translation units register the same type. -`rtl::CxxMirror` does not own or duplicate this metadata. It is a lightweight, ordinary object that can be constructed, copied, or destroyed without affecting the underlying registration state. Mirrors may be created with different type sets, and the same registration statements can be materialized multiple times. +`rtl::CxxMirror` does not own or duplicate this metadata. It encapsulates references to it as a lightweight, ordinary object. Mirrors may be created with different type sets, and the same registration statements can be materialized multiple times. For example: @@ -66,22 +67,21 @@ This design promotes predictable behavior and avoids unexpected control flow dur --- -### 🎁 Transparent Handling of Smart Pointers +### 🎁 Smart Pointer Handling -Reflection should never feel like a cage. -In everyday C++, if you hold a `std::unique_ptr` or `std::shared_ptr`, you don’t think twice about how to use it — you simply work with the object it points to, sometimes copying it, sometimes sharing it, sometimes moving it. RTL extends this same natural experience into runtime reflection. +RTL supports working with objects managed by `std::unique_ptr` and `std::shared_ptr` in a manner consistent with standard C++ usage. -Every heap object created through RTL is safely managed inside a smart pointer. Yet to you, as the developer, that detail is invisible. You can look at it as the smart pointer if you wish, or simply as the underlying type `T`. +Heap-allocated objects created through RTL are internally managed using smart pointers to ensure safe ownership and lifetime control. These details are not imposed on the user: reflected objects can be accessed either through their smart-pointer representation or through views of the underlying type `T`. -When you ask RTL to clone, it adapts to the situation in the most intuitive way: +When cloning or transferring reflected objects, RTL preserves the ownership semantics of the original type: -* If a type is naturally shared, you can get a shared view. -* If it is unique, RTL respects that uniqueness. -* And if the value itself can be copied, you can always ask for a fresh independent object. +* Objects intended to be shared can be accessed through shared ownership. +* Uniquely owned objects retain their uniqueness. +* Copyable values can be duplicated to produce independent instances. -The key idea is that RTL doesn’t force you into a wrapper-first mindset. Instead, it makes wrappers feel transparent — you can still reason in terms of *your type*, just as you would in normal C++. +This design allows developers to work with reflected objects using the same ownership and lifetime expectations they would apply in ordinary C++ code, without requiring special handling for reflection-specific wrappers. -> *"Developers shouldn’t have to think about “reflection semantics” versus “normal C++ semantics.” With RTL, the two worlds are aligned. Whether you’re holding a raw object or a smart pointer, the same intuition applies — reflection just works the way you expect."* +Reflection semantics are aligned with standard C++ object semantics, ensuring consistent behavior regardless of whether an object is accessed directly or through a smart pointer. --- @@ -96,7 +96,7 @@ The key idea is that RTL doesn’t force you into a wrapper-first mindset. Inste #### ✨ The Mirror & The Reflection -> *A client system hands off a `CxxMirror` to RTL — and RTL sees its reflection.* +> *A client system hands off a `rtl::CxxMirror` to RTL — and RTL sees its reflection.* That’s it. The mirror is a **single object**, typically returned from a function like: @@ -117,4 +117,4 @@ This design turns RTL into a **pluggable, runtime-agnostic consumer** of metadat * Reflect types from external libraries * Link in auto-generated metadata modules * Expose your reflection system to scripts or tools without tight coupling -* Swap different `CxxMirror` sources depending on build mode (dev/editor/runtime) +* Swap different `rtl::CxxMirror` sources depending on build mode (dev/editor/runtime) \ No newline at end of file From c21e351db3e4bbd68ab01f69b3a97ed28bd8fac1 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Mon, 19 Jan 2026 20:19:13 +0530 Subject: [PATCH 008/102] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fcc87052..48eb7627 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ It enables name-based discovery and invocation of functions, constructors, and o ```c++ std::string complexToStr(float real, float img); ``` -Using RTL, you can discover this function by name and invoke it dynamically – +Using RTL, you can discover this function by name and call it dynamically – ```c++ rtl::function cToStr = cxx::mirror().getFunction("complexToStr") ->argsT() @@ -44,7 +44,7 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Cross-Compiler Consistency*** – Implemented entirely in standard C++20, with no compiler extensions or compiler-specific conditional behavior. -* ***Tooling-Friendly Architecture*** – Reflection data is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. +* ***Tooling-Friendly Architecture*** – Reflection metadata is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. ## A Quick Preview: Reflection That Looks and Feels Like C++ @@ -77,7 +77,7 @@ rtl::CxxMirror& cxx::mirror() { return cxx_mirror; } ``` -`cxx_mirror` is an immutable, stack-allocated, value-type object and is safe to copy, but when used as a singleton (as shown above), implicit copies (e.g., `auto mirror = cxx::mirror();`) can unintentionally violate the singleton semantics, so `rtl::CxxMirror` restricts such copy construction. +`cxx_mirror` is an immutable, value-type object that allows only explicit copy construction. It does not own reflection metadata. ### RTL in action: @@ -236,4 +236,4 @@ If you’re interested in advancing practical runtime reflection in C++ and supp ## -***C++ joins the reflection party! – why should Java have all the fun?*** \ No newline at end of file +***C++ joins the reflection party! – why should Java have all the fun?*** From 25950ae72760d96042a0061f703d137093f11159 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Mon, 19 Jan 2026 22:05:24 +0530 Subject: [PATCH 009/102] design doc update. --- README.md | 4 +- .../DESIGN_PRINCIPLES_AND_FEATURES.md | 4 +- .../RTL_SYNTAX_AND_SEMANTICS.md | 0 .../WHY_CPP_REFLECTION_MATTERS.md | 0 .../benchmark_runs_string.log | 0 .../benchmark_runs_string_view.log | 0 .../flat-overhead-analysis.md | 0 text-sailors-log/DLLs-ThinkingOutLoud.md | 80 --- .../cloning-semantic-quirks-with-wrappers.md | 112 ---- .../cloning-semantics-at-a-glance.md | 104 ---- .../const-by-default-semantics.md | 142 ----- text-sailors-log/const-semantic-dialogues.md | 78 --- .../copy-constructor-reflection.md | 52 -- text-sailors-log/design-summary-RObject.md | 62 --- .../design-summary-RObjectUPtr.md | 67 --- text-sailors-log/progress-timline.md | 182 ------- text-sailors-log/reflection-apis-redefined.md | 514 ------------------ .../rtl-bind-function-design-log.md | 104 ---- ...l-created-shared-ptr-design-exploration.md | 60 -- .../smart-pointers-reflection-support.md | 97 ---- text-sailors-log/thread-safety-revised.md | 87 --- 21 files changed, 3 insertions(+), 1746 deletions(-) rename {text-design-docs => docs}/DESIGN_PRINCIPLES_AND_FEATURES.md (97%) rename {text-design-docs => docs}/RTL_SYNTAX_AND_SEMANTICS.md (100%) rename {text-design-docs => docs}/WHY_CPP_REFLECTION_MATTERS.md (100%) rename {text-benchmark-logs => docs}/benchmark_runs_string.log (100%) rename {text-benchmark-logs => docs}/benchmark_runs_string_view.log (100%) rename {text-benchmark-logs => docs}/flat-overhead-analysis.md (100%) delete mode 100644 text-sailors-log/DLLs-ThinkingOutLoud.md delete mode 100644 text-sailors-log/cloning-semantic-quirks-with-wrappers.md delete mode 100644 text-sailors-log/cloning-semantics-at-a-glance.md delete mode 100644 text-sailors-log/const-by-default-semantics.md delete mode 100644 text-sailors-log/const-semantic-dialogues.md delete mode 100644 text-sailors-log/copy-constructor-reflection.md delete mode 100644 text-sailors-log/design-summary-RObject.md delete mode 100644 text-sailors-log/design-summary-RObjectUPtr.md delete mode 100644 text-sailors-log/progress-timline.md delete mode 100644 text-sailors-log/reflection-apis-redefined.md delete mode 100644 text-sailors-log/rtl-bind-function-design-log.md delete mode 100644 text-sailors-log/rtl-created-shared-ptr-design-exploration.md delete mode 100644 text-sailors-log/smart-pointers-reflection-support.md delete mode 100644 text-sailors-log/thread-safety-revised.md diff --git a/README.md b/README.md index 48eb7627..32afacb2 100644 --- a/README.md +++ b/README.md @@ -148,9 +148,7 @@ if (err == rtl::error::None && ret.canViewAs()) { ``` ### How RTL Fits Together -[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md) -  -[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md) +[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. diff --git a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/docs/DESIGN_PRINCIPLES_AND_FEATURES.md similarity index 97% rename from text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md rename to docs/DESIGN_PRINCIPLES_AND_FEATURES.md index 2e59c6a2..bbf5a074 100644 --- a/text-design-docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -85,7 +85,7 @@ Reflection semantics are aligned with standard C++ object semantics, ensuring co --- -### 🧠 Tooling-Friendly Architecture +### 💡 Tooling-Friendly Architecture **RTL** separates the *generation* of reflection metadata from its *consumption*. This makes it ideal not just for runtime introspection, but also for external tools like: @@ -98,7 +98,7 @@ Reflection semantics are aligned with standard C++ object semantics, ensuring co > *A client system hands off a `rtl::CxxMirror` to RTL — and RTL sees its reflection.* -That’s it. The mirror is a **single object**, typically returned from a function like: +The mirror is a **single object**, typically returned from a function like: ```cpp extern const rtl::CxxMirror& MyReflection(); diff --git a/text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md similarity index 100% rename from text-design-docs/RTL_SYNTAX_AND_SEMANTICS.md rename to docs/RTL_SYNTAX_AND_SEMANTICS.md diff --git a/text-design-docs/WHY_CPP_REFLECTION_MATTERS.md b/docs/WHY_CPP_REFLECTION_MATTERS.md similarity index 100% rename from text-design-docs/WHY_CPP_REFLECTION_MATTERS.md rename to docs/WHY_CPP_REFLECTION_MATTERS.md diff --git a/text-benchmark-logs/benchmark_runs_string.log b/docs/benchmark_runs_string.log similarity index 100% rename from text-benchmark-logs/benchmark_runs_string.log rename to docs/benchmark_runs_string.log diff --git a/text-benchmark-logs/benchmark_runs_string_view.log b/docs/benchmark_runs_string_view.log similarity index 100% rename from text-benchmark-logs/benchmark_runs_string_view.log rename to docs/benchmark_runs_string_view.log diff --git a/text-benchmark-logs/flat-overhead-analysis.md b/docs/flat-overhead-analysis.md similarity index 100% rename from text-benchmark-logs/flat-overhead-analysis.md rename to docs/flat-overhead-analysis.md diff --git a/text-sailors-log/DLLs-ThinkingOutLoud.md b/text-sailors-log/DLLs-ThinkingOutLoud.md deleted file mode 100644 index d48bf8be..00000000 --- a/text-sailors-log/DLLs-ThinkingOutLoud.md +++ /dev/null @@ -1,80 +0,0 @@ -### ReflectionTemplateLibrary (RTL) — Design Log - -*Author: Neeraj Singh* -*Date: 2025-08-28* - ---- - -## Core Vision - -RTL is designed as a **pure C++ runtime reflection system** that eliminates the need for macros, boilerplate, or special compilers. Unlike traditional attempts that only cover type introspection, RTL enables **full type usage reflectively**: constructing, invoking methods, accessing properties, and cloning — all with type safety and zero overhead abstraction. - ---- - -## Key Revelations & Insights - -### 1. Beyond Handles — True Reflective DLL Communication - -Traditionally, DLLs expose a handful of opaque handles and C-like APIs. With RTL, however, we can: - -* Load a DLL dynamically. -* Obtain **type info, methods, and objects as handles**. -* Pass PODs and c-strings with ABI safety. -* Invoke methods reflectively, as if types were known at compile time. - -This blurs the line between host and DLL. The DLL no longer feels foreign — **all its types are accessible via reflection**. Programmers can work with it using pure C++ syntax, without worrying about handles or memory quirks. - -**Revelation:** RTL turns DLLs into **transparent C++ modules**, not just opaque binaries. - ---- - -### 2. Unit Testing Reinvented with RTL - -With RTL, unit tests no longer need macro-heavy frameworks (like gtest, Catch2, etc.). Instead: - -* Tests are written as **pure C++ classes**. -* A host application can load these classes **reflectively** from a DLL. -* The test runner can execute test cases dynamically without any registration macros. - -**Impact:** CI/CD pipelines can directly run reflected tests — a **JUnit-like experience for C++**. - -**Revelation:** Macro-based test frameworks exist only because **runtime reflection was missing** in C++. - ---- - -### 3. DLL Boundary Abstraction Layer - -While DLLs normally require manual handle and lifetime management, RTL can provide an **API layer** that: - -* Automates DLL loading/unloading. -* Manages lifetimes of reflected objects. -* Exposes the DLL’s internal types as if they were local to the project. - -**Effect:** The DLL boundary disappears — programmers interact reflectively in C++ as if everything were part of one codebase. - ---- - -### 4. Safe Widening & Relaxed Parameter Matching - -* RTL supports **safe widening conversions** for PODs (e.g., `int → double`, `const char* → std::string`). -* This makes reflected calls much more natural and robust across DLL boundaries. - -**Impact:** Function invocation feels seamless even when type signatures differ slightly. - ---- - -### 5. Industry Implications - -* **Macro-based frameworks** (testing, serialization, RPC) exist only due to missing reflection. -* **Plugin ecosystems** in C++ can now be designed with the same transparency as Java/.NET. -* **Adoption Resistance?** Some may resist due to fear of dynamic features in C++, but the **utility will outweigh resistance**. - -**Revelation:** RTL can become the **go-to pattern** for plugin/DLL design and reflective test execution. - ---- - -## Next Steps - -* Maintain a **DLL-specific design log** (chronological, PDF) alongside this Canvas. -* Expand CI/CD integration examples (CTest, GitHub Actions, etc.). -* Keep cross-referencing insights between the main log (Canvas) and the DLL log. diff --git a/text-sailors-log/cloning-semantic-quirks-with-wrappers.md b/text-sailors-log/cloning-semantic-quirks-with-wrappers.md deleted file mode 100644 index cfabb144..00000000 --- a/text-sailors-log/cloning-semantic-quirks-with-wrappers.md +++ /dev/null @@ -1,112 +0,0 @@ -# RTL Design Evolution Log - -## Milestone: Cloning Semantics — Unified Control with `rtl::copy` - -**Date:** 2025-08-16 -**Author:** Neeraj Singh - ---- - -### Problem Context - -Cloning objects inside RTL (`RObject`) originally had semantics tied only to value-copying. While this worked for most user-defined types, ambiguity and inconsistency emerged when dealing with **STL wrappers** such as `std::shared_ptr`, `std::unique_ptr`, and `std::optional`: - -* Should cloning a wrapper clone the *wrapper itself* (shallow copy)? -* Or should it clone the *underlying contained type* (deep copy)? -* What happens when the contained type is **non-copyable**? -* How do we make this intuitive yet efficient for real-world use? - -Performance concerns also came into play: deep-copying wrappers like `shared_ptr` in performance-critical applications would be wasteful when shallow-copy semantics (ref-count increments) are usually what developers expect. - -### Early Exploration - -1. **Default to Value Copy:** - - * Simple and safe. - * But performance-heavy when working with smart pointers. - * Non-intuitive: developers returning/consuming wrappers usually expect to work with the wrapper itself. - -2. **Default to Wrapper Copy:** - - * Better aligned with performance and developer expectations for `shared_ptr` and `optional`. - * But breaks intuition for cases where deep-copy of the underlying type was actually intended. - -Neither extreme fully captured the range of C++-native expectations. - -### Final Design - -To reconcile the competing needs, a **two-axis control** was introduced: - -```cpp -enum class alloc { Heap, Stack }; -enum class copy { Auto, Value, Wrapper }; - -template -std::pair clone() const; -``` - -#### Modes of Operation - -* **`copy::Value`** → Force deep copy of the contained entity `T`. - - * Errors out with `TypeNotCopyConstructible` if `T`’s copy ctor is deleted. - * Heap/stack behavior respected via `alloc`. - -* **`copy::Wrapper`** → Copy the wrapper itself. - - * `std::shared_ptr` shallow-copy increments ref-count. - * `std::unique_ptr` is forbidden (`TypeNotCopyConstructible`). - * Heap allocation of wrapper is disallowed (`StlWrapperHeapAllocForbidden`). - -* **`copy::Auto`** → Context-sensitive default: - - * If object was **RTL-allocated** (heap objects wrapped in `unique_ptr` internally): treat wrapper as transparent → **Value copy**. - * If object is a **non-RTL wrapper** (e.g., obtained from user return value): treat wrapper as significant → **Wrapper copy**. - -This provides an API that is **intuitive for developers**, while giving them control when they need it. - -However, RTL never performs deep copies internally during normal operations. All internal access uses zero-cost, read-only views by reference. - ---- - -### Error Handling Philosophy - -* **Fail Fast, No UB**: every illegal operation returns a clear `rtl::error`. - - * `error::EmptyRObject` if attempting to clone an empty `RObject`. - * `error::NotWrapperType` if `Wrapper` mode is requested on non-wrapper. - * `error::StlWrapperHeapAllocForbidden` if heap clone of wrapper is attempted. - * `error::TypeNotCopyConstructible` if underlying entity is not copyable. -* No silent fallbacks — clarity is always preferred. - -### Benefits - -* **Performance-Aware Defaults**: `Auto` intelligently chooses between shallow and deep copy based on context. -* **C++-Native Intuition**: Mirrors how developers think about copying raw types vs. wrappers in day-to-day C++. -* **Explicit Overrides**: Power users can explicitly request deep or shallow copy. -* **Consistency & Safety**: No hidden behavior, all outcomes expressed via `rtl::error`. - -### Example Use - -```cpp -// Smart default: deep-copy value if RTL-allocated, else shallow-copy wrapper -auto [err0, copy0] = robj.clone(); - -// Explicit deep-copy -auto [err1, copy1] = robj.clone(); - -// Explicit shallow-copy of shared_ptr wrapper -auto [err2, copy2] = robj.clone(); -``` - ---- - -### Why This Matters - -Reflection systems in C++ live at the intersection of **type safety**, **performance**, and **developer intuition**. By separating `alloc` and `copy` dimensions: - -* RTL ensures **safe lifetime management**. -* Developers get **precise control** without boilerplate. -* The library avoids performance pitfalls while staying faithful to native C++ semantics. - -This design resolves one of the most subtle challenges in runtime reflection — making **wrapper types transparent when desired, but still first-class citizens when needed**. diff --git a/text-sailors-log/cloning-semantics-at-a-glance.md b/text-sailors-log/cloning-semantics-at-a-glance.md deleted file mode 100644 index e9344bd0..00000000 --- a/text-sailors-log/cloning-semantics-at-a-glance.md +++ /dev/null @@ -1,104 +0,0 @@ -# 🔄 Cloning Semantics — At a Glance - -Cloning in RTL is explicit and predictable. -When you call: - -```cpp -auto [err, copyObj] = robj.clone(); -``` - -you control **where** the clone is created (`alloc::Heap` vs `alloc::Stack`) and **what** is cloned (`copy::Value` vs `copy::Wrapper` vs `copy::Auto`). - ---- - -## 📌 The `copy` modes - -### `copy::Value` - -Deep copy of the underlying *contained type `T`*. -Wrappers are treated as transparent. - -✅ Examples: - -* `RObject` of `std::shared_ptr` → copy of `int`. -* `RObject` of `std::unique_ptr` → copy of `MyType` (if copy-constructible). - -❌ Errors if: - -* Contained type is not copy-constructible. -* Wrapper forbids value copy (e.g. `unique_ptr` with deleted copy ctor). - ---- - -### `copy::Wrapper` - -Copy the wrapper itself (shallow copy semantics). -Contained entity is *not* copied. - -✅ Examples: - -* `RObject` of `std::shared_ptr` → shallow copy (`use_count` increases). -* `RObject` of `std::optional` → copy of the optional wrapper. - -❌ Errors if: - -* Wrapper is not copyable (e.g. `unique_ptr`). -* Heap allocation of wrapper is disallowed (`StlWrapperHeapAllocForbidden`). - ---- - -### `copy::Auto` *(Default)* - -RTL decides based on context: - -* If object came from **RTL-managed heap allocation** (`unique_ptr` wrapping a constructed type) → deep-copy `Value`. -* If object came from an **external wrapper** (e.g. return value `shared_ptr`) → shallow-copy `Wrapper`. - -✅ Intuitive: -Behaves like “do what a C++ dev would expect here.” -You get value-copies for RTL-created objects, wrapper-copies for externally-supplied smart pointers. - -⚠️ Important Clarification -When an object originates from an RTL-managed heap allocation (internally wrapped in std::unique_ptr), the default copy::Auto resolves to Value semantics. - -* However, RTL never performs deep copies internally during normal operations. All internal access uses zero-cost, read-only views by reference. -* A deep copy of the contained type only occurs if the user explicitly requests it via clone(). - -This ensures maximum efficiency while keeping semantics intuitive. - ---- - -## 📌 The `alloc` modes - -* **`alloc::Stack`** → new clone lives on the stack. -* **`alloc::Heap`** → new clone lives on the heap. -* Heap + Wrapper is forbidden → `error::StlWrapperHeapAllocForbidden`. - ---- - -## ⚡ Examples - -```cpp -RObject robj = reflect(std::make_shared(42)); - -// Deep copy the int (wrapper is transparent). -auto [e0, vCopy] = robj.clone(); - -// Shallow copy the shared_ptr (reference-counted). -auto [e1, wCopy] = robj.clone(); - -// Let RTL decide: shared_ptr → wrapper copy. -auto [e2, autoCopy] = robj.clone(); -``` - ---- - -## 🧭 Quick Rules of Thumb - -* Want the **thing inside**? → `copy::Value` -* Want the **wrapper itself**? → `copy::Wrapper` -* Don’t want to think about it? → `copy::Auto` - ---- - -👉 With this, RTL cloning semantics mirror **how you’d naturally treat smart pointers and wrappers in C++** — no surprises, no magic, just transparent, explicit control. diff --git a/text-sailors-log/const-by-default-semantics.md b/text-sailors-log/const-by-default-semantics.md deleted file mode 100644 index 679a0995..00000000 --- a/text-sailors-log/const-by-default-semantics.md +++ /dev/null @@ -1,142 +0,0 @@ -# Design Log: Const Semantics in RTL - -**Author:** Neeraj Singh -**Date:** 2025-08-24 - ---- - -## Overview - -This document details the **const semantics** in RTL (ReflectionTemplateLibrary-CPP), covering the distinction between RTL-created (logically-const) objects and externally provided (true-const) objects. It also explains how method binding, overload resolution, and error handling are governed by this model. - ---- - -## Core Principles - -1. **Const-by-Default Discipline** - - * All objects created via RTL reflection are treated as immutable by default. - * External objects passed to RTL retain their declared constness without alteration. - -2. **Two Kinds of Constness** - - * **Logically-Const (RTL-Created):** Objects appear immutable but may be safely cast internally by RTL. - * **True-Const (External):** Objects declared const by user code; RTL strictly respects their constness and never applies const\_cast internally. - ---- - -## Method Binding & Overload Resolution - -### 1. RTL-Created Objects (Logically-Const) - -* **Default:** RTL always prefers binding to the `const` overload of a method. -* **Fallback:** If no `const` overload exists but a non-const overload is present, RTL applies a *safe logical const\_cast* and binds to the non-const overload. -* **Explicit Choice:** If both overloads exist, the user may explicitly select which to bind by using `rtl::constCast()`. - -### 2. Externally Provided Objects (True-Const) - -* **Allowed Binding:** RTL binds only to `const` overloads. -* **Illegal Binding Attempt:** If the user explicitly attempts to bind a true-const object to a non-const overload, RTL reports: - - * `rtl::error::IllegalConstCast`. -* **Missing Const Overload:** If only a non-const overload exists (no `const` variant), RTL reports: - - * `rtl::error::ConstOverloadMissing`. -* **Guarantee:** RTL never internally const\_casts true-const objects. - ---- - -## Error Semantics - -* `rtl::error::IllegalConstCast` → Raised when the user attempts to bind a true-const object to a non-const method. -* `rtl::error::ConstOverloadMissing` → Raised when a true-const object attempts a call but no `const` overload is available. - ---- - -### 📌 Const Overload Handling: Native C++ vs RTL - -**Objective:** Verify whether RTL’s fallback and overload resolution for const/non-const methods aligns with native C++ semantics. - ---- - -#### 🟦 Native C++ Const Method Resolution - -* **Case 1: Call on `const T` / `const T&` / `const T*`:** - - * Only `const` member functions are viable. - * If only a non-const overload exists → **compile-time error**. - * User may `const_cast` and call non-const, but that’s UB if the object is truly const. - -* **Case 2: Call on non-const `T` / `T&` / `T*`:** - - * If both const and non-const overloads exist → compiler **chooses the non-const overload**. - - * Reason: binding to a non-cv-qualified `this` is a better match than converting to `const this`. - * If only the const overload exists → call is **valid**. A non-const object **can call a const member**. - ---- - -#### 🟦 RTL Const Method Resolution - -* **True-const objects (external const instances):** - - * RTL mirrors native C++ strictly. - * Only const overloads are considered. - * If missing → returns **`rtl::error::ConstOverloadMissing`**. - * If user explicitly attempts a constCast → **`rtl::error::IllegalConstCast`**. - -* **Logically-const objects (RTL-created, safe for const\_cast):** - - * RTL defaults to **binding the const overload** even if both exist → defensive by design. - * User can explicitly call the non-const overload via **`rtl::constCast()`** when intended. - * If only non-const exists, RTL safely **falls back to non-const** (guaranteed safe, since RTL owns the object). - ---- - -#### ✅ Cross-Verification Result - -* With a **non-const object**, native C++ picks non-const overload if available, otherwise falls back to const overload. -* With a **const object**, native C++ restricts to const overloads, otherwise errors. -* RTL matches this baseline but adds safety defaults for **logically-const** objects: - - * Defaults to const when both are present. - * Requires explicit opt-in (`rtl::constCast()`) for non-const. - * Provides error signaling instead of UB for illegal casts. - ---- - -📖 **Conclusion:** -RTL’s fallback is fully aligned with native C++ semantics for true constness, while extending the model with explicit safety rules and clearer error channels for logically-const cases. This preserves C++ familiarity while adding reflection-layer discipline. - - -## Strengths of the Model - -* **Safety First:** Prevents unsafe const-casting on external objects. -* **Flexibility:** Allows controlled safe relaxation of constness on RTL-managed objects. -* **Clarity:** Overload resolution is predictable and explicit. -* **Alignment with C++:** Fully consistent with const-correctness principles. - ---- - -## Considerations - -* **Documentation Needs:** Users must clearly understand the distinction between logically-const and true-const. -* **Testing:** Edge cases (e.g., methods with only non-const overloads) must be thoroughly verified. -* **Consistency:** Const semantics must remain uniform across cloning, moving, and nested reflection contexts. - ---- - -## Comparative Note - -* **Java Reflection:** Does not enforce constness; all members can be accessed/mutated freely. -* **C# Reflection:** Similar to Java, though `readonly` exists at field level; reflection can still override it. -* **RTL:** Unique in enforcing const-by-default while distinguishing between safe logical const-casts (for RTL-owned objects) and strict const adherence (for external objects). - ---- - -## Summary - -The const semantics in RTL establish a principled model: - -* **RTL-created objects:** const by default, but safe to relax when needed; users may explicitly call non-const overloads with `rtl::constCast()`. -* **External objects:** const is strictly enforced; unsafe relaxation is disallowed. diff --git a/text-sailors-log/const-semantic-dialogues.md b/text-sailors-log/const-semantic-dialogues.md deleted file mode 100644 index 3800dfcd..00000000 --- a/text-sailors-log/const-semantic-dialogues.md +++ /dev/null @@ -1,78 +0,0 @@ -### 🗨️ Dev Conversation (Revised): Evaluating RTL’s Handling of C++ Const‑Method Quirks - -**Updated:** 2025-08-25 - -> Two engineers are evaluating RTL from the outside (they don’t own it). They’re cross‑checking RTL’s behavior against **native C++ const overload rules** and reconciling any gotchas. - ---- - -#### Quick refresher: Native C++ rules for `const` vs `non‑const` member overloads - -1. **Call on a `const` object** - - * Overload resolution prefers **`const`‑qualified** member functions. - * If **no `const` overload exists**, a direct call to a non‑const member is a **compile‑time error**. - * A user may write `const_cast(obj).nonConst()`; the call compiles, **but any mutation of an originally `const` object yields undefined behavior**. - -2. **Call on a non‑const object** - - * If both overloads exist, overload resolution prefers the **non‑const** overload. - * If **only a `const` overload** exists, **calling it is perfectly valid**; there is **no compile error**. (A non‑const object can call a `const` member function.) - -These are the ground truths we’ll map RTL onto. - ---- - -#### Conversation - -**Dev A:** I’m reading RTL’s docs about const semantics. They talk about “logically‑const” for RTL‑created objects and “true‑const” for external ones. Before we judge that, let’s sanity‑check against native C++ rules we just reviewed. - -**Dev B:** Right. In native C++, a `const` object can only call `const` members unless you `const_cast`—and mutating that object is UB. A non‑const object prefers the non‑const overload, but it can still call a `const` member if that’s the only one available. - -**Dev A:** Cool. Now, how does RTL line up? - -**Dev B:** From what I gather: - -* **True‑const objects (externally provided into RTL):** - RTL treats them like native C++ `const` objects. It **only considers `const` overloads**. - • If the `const` overload is **missing**, RTL returns **`rtl::error::ConstOverloadMissing`** instead of trying anything clever. - • If the user **explicitly** tries to bind to a non‑const overload using `rtl::constCast()`, RTL rejects it with **`rtl::error::IllegalConstCast`**. - • RTL never performs an internal `const_cast` on such objects. - -* **Logically‑const objects (created by RTL via reflection):** - RTL defaults to the `const` overload to keep things safe and predictable. - • If **both** overloads exist, users can **explicitly opt into** the non‑const one using **`rtl::constCast()`**. - • If the **`const` overload is missing** but a **non‑const** one exists, RTL may **safely fall back** to the non‑const overload by performing an internal, guaranteed‑safe logical `const_cast` (since RTL owns the object’s lifecycle). - • This mirrors the “you could `const_cast` in C++ if it’s safe,” but **with stronger guarantees** because RTL distinguishes logical vs true constness. - -**Dev A:** So we should tweak the summary line to be precise: *“If the reflected object is const, RTL only considers the const overload. If it doesn’t exist, you’ll get `ConstOverloadMissing`.”* → That’s **only** for **true‑const** objects, right? - -**Dev B:** Exactly. For **true‑const**, missing `const` → `ConstOverloadMissing`. But for **logically‑const** RTL‑created objects, **missing `const` + present non‑const** → RTL will legitimately call the non‑const overload (safe internal `const_cast`). - -**Dev A:** And on the non‑const side, does RTL emulate native C++’s preference for the non‑const overload when both exist? - -**Dev B:** Conceptually yes—but with RTL’s **const‑by‑default discipline**, calls start from a logically‑const stance. So by default, RTL picks the `const` overload; **users must be explicit** (via `rtl::constCast()`) to select the non‑const overload. That’s a deliberate design: *safety first, explicit mutation second.* - -**Dev A:** That’s fair. It’s stricter than C++’s default, but predictable. And it still lets you reach the non‑const path when you mean it. - -**Dev B:** Right. And the error taxonomy makes intent obvious: - -* `rtl::error::ConstOverloadMissing` → true‑const object, only non‑const overload exists. -* `rtl::error::IllegalConstCast` → explicit attempt to force a non‑const call on a true‑const object. -* No error for RTL‑created objects when falling back to a non‑const overload—the fallback is **by design** and **safe**. - -**Dev A:** Last cross‑check with native C++: non‑const object calling a `const` member when that’s the only option—valid in C++. Does RTL allow the analogous scenario? - -**Dev B:** Yes—that maps to either (a) true‑const objects calling `const` members (the only option), or (b) logically‑const objects defaulting to `const` members even if the underlying instance is mutable. Both are consistent. - -**Dev A:** Makes sense. So the headline is: *RTL codifies C++’s const rules at runtime, adds provenance‑aware safety (true‑const vs logically‑const), defaults to const for clarity, and requires explicit opt‑in for mutation via `rtl::constCast()`.* - -**Dev B:** Exactly. Cleaner than ad‑hoc const\_casts in user code, and safer than pretending const doesn’t matter at runtime. - ---- - -#### TL;DR - -* Native C++: `const` object → only `const` overload (non‑const needs cast; mutating originally `const` is UB). Non‑const object → prefers non‑const; may call `const` if that’s all there is. -* RTL (true‑const): only `const` overload; missing `const` → `ConstOverloadMissing`; forcing non‑const → `IllegalConstCast`. -* RTL (logically‑const): defaults to `const`; missing `const` but non‑const present → safe fallback to non‑const; both present → user can explicitly pick non‑const with `rtl::constCast()`. diff --git a/text-sailors-log/copy-constructor-reflection.md b/text-sailors-log/copy-constructor-reflection.md deleted file mode 100644 index bdfa04eb..00000000 --- a/text-sailors-log/copy-constructor-reflection.md +++ /dev/null @@ -1,52 +0,0 @@ -# RTL Design Evolution Log - -## Entry: Restricting Direct Copy Constructor Calls in Reflection - -**Date:** 2025-08-16 -**Author:** Neeraj Singh - -### Problem Context - -In C++, copy constructors are universally available (unless explicitly deleted), but their **direct invocation is not semantically equivalent** to creating new objects via constructors. In most cases, if a programmer knows the type `T`, they would simply invoke `T()` or `T(other)` themselves. Reflection should not encourage redundant or confusing usage patterns. - -During testing with POD types like `char`, it became clear that exposing direct copy constructor calls through `Record::create<>()` added no value and introduced ambiguity: - -```cpp -optional charType = cxx::mirror().getRecord(reflected_id::char_t); -auto [err, rchar] = charType->create('Q'); -EXPECT_TRUE(err == rtl::error::SignatureMismatch); -``` - -The call above attempts to use the copy constructor signature for `char`. RTL rejects it with a `SignatureMismatch` error — **by design**. - -### Design Decision - -* **No direct copy constructor invocation via `Record::create<>()`.** - - * If the user knows the type `T`, they should construct it directly. - * Reflection only steps in when type erasure or runtime indirection is needed. - -* **Copy semantics are still fully supported, but in the right places:** - - * `RObject::clone<>()` uses the implicitly registered copy constructor safely. - * `rtl::reflect(T)` lets you reflect an existing object (copy constructed into `RObject`) when you want to treat it as type-erased. - -### Why This Matters - -This design avoids feature-bloat while preserving clarity: - -* Prevents **unintuitive misuse** of copy constructors through reflection. -* Ensures reflection remains a **tool for runtime type-erasure** and not a redundant duplication of normal C++ syntax. -* Keeps `Record::create<>()` semantically tied to *real object construction* (default or parameterized), not copying. -* Developers who need copying in a reflection context still have a direct and intuitive API: `clone()` or `reflect()`. - -### Benefits - -* **Clarity:** Users immediately understand what `create<>()` means — it *creates*, not *copies*. -* **Safety:** Avoids accidental misuse that could lead to semantic confusion. -* **Consistency:** Copying is consistently handled through `clone()` across all types. -* **Alignment with C++ Philosophy:** If you know the type, do it in plain C++; reflection is for when you don’t. - ---- - -✅ **Final Rule:** `Record::create<>()` never binds to copy constructor overloads. Copy semantics are available only through `RObject::clone()` or `rtl::reflect(T)`. diff --git a/text-sailors-log/design-summary-RObject.md b/text-sailors-log/design-summary-RObject.md deleted file mode 100644 index f6239971..00000000 --- a/text-sailors-log/design-summary-RObject.md +++ /dev/null @@ -1,62 +0,0 @@ -RTL Design Evolution Log -Milestone: RObject – The Runtime Instance Container -Date: 2025-08-13 -Author: Neeraj Singh - ---- - -## Purpose - -`RObject` is the central runtime container in RTL — the bridge between compile-time registered metadata and actual object instances at runtime. It encapsulates: - -* The underlying value or pointer (type-erased in `std::any`). -* Ownership and lifetime management logic. -* Metadata (`RObjectId`) linking the instance to its reflection type info. -* Cloning and controlled movement. - -This design allows RTL to operate on objects without compile-time type knowledge while preserving safety, performance, and predictable semantics. - ---- - -## Core Characteristics - -* **Move-only:** No accidental copies; move constructor provided, move assignment deleted. -* **Explicit Cloning:** All duplication is via a stored `Cloner` function pointer; no hidden copies. -* **Type-Erased Storage:** `std::any` holds stack values, heap allocations, or wrapped move-only types like `std::unique_ptr`. -* **Consistent Metadata Link:** Every `RObject` carries an `RObjectId` to resolve runtime type operations. - ---- - -## Creation & Storage Rules - -* Built via type-trait-dispatched builders. -* Special handling for string-like types and raw C strings. -* Heap vs stack distinction recorded in metadata. -* Uses safe wrappers (e.g., `RObjectUptr`) for move-only types to ensure cross-compiler compatibility. -* RTL rule: **All `any_cast` operations retrieve values only as `const T&`** — preventing unwanted copies, even for copyable types. - ---- - -## Cloning & Lifetime Management - -* `Cloner` supports type-specific shallow or deep copies. -* Metadata preserves original allocation type and const-cast safety. -* Destructor access is validated — if deleted/private, heap allocation is rejected. -* No double-deletes or leaks across move and clone operations. - ---- - -## Interoperability & Conversion - -* Planned relaxed parameter type matching (e.g., `const char*` → `std::string`). -* Safe implicit conversions recognized. -* Works with values, refs, and pointers. - ---- - -## Benefits - -* **Predictable API:** Logical constness enforced; internal mutability for reflection only. -* **Cross-Compiler Consistency:** Single code path for MSVC, GCC, Clang. -* **Performance-Aware:** Avoids redundant copies and allocations. -* **Extensible:** Designed for future relaxed conversions, advanced lifetime rules, and complex type handling. diff --git a/text-sailors-log/design-summary-RObjectUPtr.md b/text-sailors-log/design-summary-RObjectUPtr.md deleted file mode 100644 index a9c63b84..00000000 --- a/text-sailors-log/design-summary-RObjectUPtr.md +++ /dev/null @@ -1,67 +0,0 @@ -RTL Design Evolution Log -Milestone: RObjectUptr – Safe Ownership of Move-Only Types -Date: 2025-08-13 -Author: Neeraj Singh - ---- - -## Problem Context - -While integrating `std::unique_ptr` support into `RObject` for storing move-only types, an issue surfaced: - -* `std::any` requires the contained type to be CopyConstructible when using certain APIs or performing unintended copy operations. -* `std::unique_ptr` is move-only and cannot be copied, making it incompatible with `std::any` in some compilers (notably MSVC) at the construction step itself. - -### Key Goal - -Store move-only types (especially `std::unique_ptr`) inside `RObject` without relying on compiler-specific quirks and without triggering copy construction. - ---- - -## Initial Exploration - -### Direct `std::any` Storage - -* Works in GCC/Clang for some cases, but fails on MSVC during `std::any` construction. -* Behavior inconsistent across compilers — unacceptable for RTL’s cross-platform guarantee. - -### Conditional Compilation - -* Possible workaround, but introduces complexity and risk of platform divergence. -* Violates RTL’s design principle of consistent behavior across compilers. - ---- - -## Final Design - -A dedicated wrapper class — **RObjectUptr** — was introduced: - -### Key Features - -* Stores the move-only type directly in a safe, non-copyable wrapper. -* Enforces no accidental copy-construction within RTL internals. -* **All `std::any_cast` operations in RTL retrieve values only via `const T&`** — guaranteeing that no copies are ever made, even for copyable types. -* Allows `RObject` to hold and operate on move-only types transparently. -* No compiler-specific hacks; same code path for MSVC, GCC, and Clang. - ---- - -## Core Design Decisions - -1. **No Ownership Transfer in Copy Constructor** - The wrapper ensures no implicit transfer or move in copy contexts — this avoids subtle ownership bugs. - -2. **No `std::move` in Copy Constructor** - Now a simple, safe, “harmless-looking” class — easier to maintain and audit. - -3. **One Code Path for All Compilers** - Consistency is a feature, not an afterthought. - ---- - -## Benefits - -* **Predictable Behavior:** Developers using RTL know that move-only types will *just work* without compiler-specific surprises. -* **Maintainability:** No preprocessor conditionals to juggle. -* **Safety First:** Internals of RTL can’t accidentally cause lifetime errors. -* **Extensibility:** Paves the way for storing other move-only, non-copyable types. diff --git a/text-sailors-log/progress-timline.md b/text-sailors-log/progress-timline.md deleted file mode 100644 index a5065a95..00000000 --- a/text-sailors-log/progress-timline.md +++ /dev/null @@ -1,182 +0,0 @@ -# RTL Milestone Timeline — RObject, `rtl::view`, and Cloning Semantics - -**Goal**: Build a non-intrusive, native-feeling runtime reflection system for C++ that preserves C++’s ownership, value categories, and performance expectations while enabling **relaxed parameter matching** across type-erased boundaries. - ---- - -## Phase 0 — Principles & North Star - -* **Non-intrusive**: No macros in user types. Registration is external and explicit. -* **C++-native intuition**: Reflected calls should behave like normal C++ calls (ownership, constness, overload resolution). -* **Zero accidental cost**: No hidden copies; pay only when you ask for it. -* **Deterministic lifetime**: Clear heap/stack semantics, explicit ownership. -* **Error-code based**: Robust, exception-free error paths. - ---- - -## Phase 1 — Why `RObject` exists - -**Problem**: After a reflected call, you often don’t know the static type of the result (or you want to pass it to another reflected call that expects a *different* but compatible type). - -**Solution**: `RObject` is a **type-erased, lifetime-aware runtime handle** that: - -* Stores the produced value (or pointer) and its metadata. -* Lets you **view** it as different target types (`view()`) when safe. -* Enables **relaxed parameter matching** by projecting the same stored entity into multiple compatible request shapes (e.g., `std::string` ↔ `const char*`, safe arithmetic widenings, etc.). - -**Design anchors**: - -* Internally uses `std::any` for storage (with strict rules, see Phase 2). -* Tracks allocation site and wrapper kind in `RObjectId` (heap/stack, wrapper type, const-cast safety). -* All internal access is via **read-only views by reference**; **no implicit cloning**. - ---- - -## Phase 2 — Storage & Ownership (type erasure without footguns) - -**Challenges** - -* `std::unique_ptr` cannot be copied; some toolchains reject placing it directly into `std::any`. -* `std::any` may trigger copy paths in naive designs. - -**Decisions** - -1. **Wrapper for move-only types**: Introduced `RObjectUPtr` — a simple, copyable-looking façade whose semantics are controlled by RTL. It enables consistent storage of `unique_ptr` across MSVC/GCC/Clang. -2. **`std::any` access rule**: **Every `any_cast` inside RTL is by `const T&` only**. Once constructed in-place, RTL never triggers a copy via `std::any` operations. -3. **Metadata (`RObjectId`)**: Records whether the stored entity is on heap or stack, whether it is a wrapper (`shared_ptr`, `unique_ptr`, etc.), and whether const-cast is safe (for RTL-managed instances only). - -**Outcomes** - -* Cross-compiler consistent behavior for move-only storage. -* No hidden copies; lifetime stays intuitive and explicit. - ---- - -## Phase 3 — `rtl::view` (see-through, zero-overhead access) - -**What a view is** - -* An immutable façade over the stored entity that **either** references the original value **or** materializes a value when a conversion is requested. -* Constructed with **bare types** only (`T`), then you decide how to consume it (ref/pointer/value) via `get()`. - -**Properties** - -* **Zero-copy until needed**: Viewing as the same type yields a const reference; viewing as different but compatible type *may* materialize a temporary (e.g., `std::string` from `const char*`). -* **No dangling**: The view’s lifetime is scoped to the `RObject` and call site. -* **Validation**: Views are only produced when statically/semantically safe; otherwise `std::optional` is empty. - -**Why it matters for relaxed matching** - -* A single stored value can be presented as `T`, `U`, or `V` if (and only if) conversions are safe by RTL policy. - ---- - -## Phase 4 — Smart Pointers: reflecting real-world ownership - -**Support added**: `std::unique_ptr`, `std::shared_ptr` - -**Semantics** - -* **`view>`**: - - * Multiple views can exist. Calling `get()` **moves** the pointer **once** out of the `RObject`-held storage; subsequent `get()` calls yield an empty `unique_ptr`. - * `RObject` itself remains valid after the move; only the contained `unique_ptr` becomes empty. -* **`view>`**: - - * `view->get()` as `const std::shared_ptr&` does **not** bump refcount. - * Acquiring by value creates a **shallow, ref-counted copy** (obvious from C++ intuition). -* **Transparent access to underlying `T`**: Users can request `view` directly; wrappers act as transparent containers whenever reasonable. - -**Safety rules** - -* RTL does **not** invent copying for noncopyable `T`. -* If the original object was **RTL-constructed on heap**, it is stored in an RTL-owned `unique_ptr` (transparent internally). Internal operations never deep-copy; cloning happens only on explicit request. - ---- - -## Phase 5 — Cloning Semantics (explicit, predictable) - -**Public API** - -```cpp -// Choose allocation site and clone target (Auto / Value / Wrapper) -template -std::pair RObject::clone() const; -``` - -**Copy target policy** - -* `copy::Value` → Deep-copy the **underlying value** `T` (if copy-constructible). Allocation site decided by `A`. -* `copy::Wrapper` → Copy the **wrapper** when applicable: - - * `shared_ptr` → shallow, ref-counted copy (allowed on `alloc::Stack`; **heap forbidden**). - * `unique_ptr` → not copyable → `error::TypeNotCopyConstructible`. -* `copy::Auto` → The intuitive default: - - * If the object is a **non-RTL** wrapper (e.g., a `shared_ptr` or a `unique_ptr` returned from user code), clone the **Wrapper**. - * If the object is **RTL-managed heap instance** (constructed via reflection, owned by RTL’s internal `unique_ptr`), clone the **Value** (deep-copy) *only when explicitly requested by the user via `clone()`*. - -**Allocation policy** - -* `alloc::Stack` → produces a stack-held instance when cloning `Value`, or a stack-held wrapper when cloning `Wrapper` (for `shared_ptr`). -* `alloc::Heap` → deep-copy to heap for `Value`; **forbid** heap-alloc of wrapper clones (`error::StlWrapperHeapAllocForbidden`). - -**Errors you’ll see** - -* `error::EmptyRObject`, `error::NotWrapperType`, `error::TypeNotCopyConstructible`, `error::StlWrapperHeapAllocForbidden`. - -**Crucial nuance** - -* *Efficiency preserved*: Despite the rule “If RTL-managed heap ⇒ deep-copy Value,” **RTL never performs hidden clones**. Internally, RTL only uses read-only references; cloning happens **solely** when the user calls `clone()`. - -**Evolution note** - -* Early iterations used an internal `EntityKind` (Value/Wrapper). Public API is now unified as `rtl::copy { Auto, Value, Wrapper }` for clarity. - ---- - -## Phase 6 — Relaxed Parameter Matching (roadmap & current policy) - -**Motivation**: Let users compose reflected calls without hand-writing glue types. - -**Current safe projections** - -* **String-like**: `const char* → std::string` (materialize), `std::string_view ↔ std::string` (configurable, conservative by default). -* **Arithmetic**: only **proven-safe widenings** (e.g., `int → long long`, `float → double`). No narrowing; no int↔float unless explicitly allowed. Policy backed by a compile-time trait (conservative by design). -* **Pointer/view**: From `unique_ptr` / `shared_ptr` to `T` via `view` (transparent read-only access), honoring ownership rules. - -**Future** - -* Enums, properties, composite types, inheritance — each with explicit, conservative matching tables. - ---- - -## Phase 7 — Testing Milestones - -* **`unique_ptr` round-trip**: reflect, multiple views, single-move extraction, post-move stability of `RObject`. -* **`shared_ptr` sharing**: ref-count behavior via read-only vs by-value access; wrapper clone vs value clone behavior; mixed ownership lifetimes. -* **User-defined noncopyable types** (`Node`): verify wrapper-level shallow clones succeed while value-level clones fail with `TypeNotCopyConstructible`; resource counters prove correct destruction. -* **Constructor misuse guard**: Calling `Record::create` with a copy-ctor signature reports `SignatureMismatch` (design choice: copy construction is reserved for `RObject::clone`). - ---- - -## Phase 8 — Performance & Safety Posture - -* **No hidden work**: All internal access is via const refs; no implicit deep copies. -* **Explicit costs**: Cloning is explicit; conversions happen only when `view` asks for them. -* **Thread- & exception-safety**: Error codes over exceptions; atomic counters for diagnostics; clear ownership tracking. -* **Cross-compiler consistency**: `RObjectUPtr` and `const-ref any_cast` discipline keep MSVC/GCC/Clang aligned. - ---- - -## Phase 9 — What’s Next - -* **Relaxed matching tables** (documented, auditable) for string-like and arithmetic families. -* **Property/Enum/Composite/Inheritance** reflection with the same semantics discipline. -* **ABI boundary story** (plugins): keeping binary boundaries stable by constraining surface types to ABI-friendly shapes. - ---- - -## One-liner Summary - -**RObject** stores *what you have*; **`rtl::view`** gives you *what you need*; **clone semantics** make the cost *explicit and intuitive*. Together, they enable relaxed parameter matching that still *feels like C++.* diff --git a/text-sailors-log/reflection-apis-redefined.md b/text-sailors-log/reflection-apis-redefined.md deleted file mode 100644 index 137ac67c..00000000 --- a/text-sailors-log/reflection-apis-redefined.md +++ /dev/null @@ -1,514 +0,0 @@ -Design log, 06/11/2025 -Author, Neeraj Singh. -------------------------------------- -# Why RTL's API is Different - -Most C++ reflection libraries follow patterns inherited from dynamically-typed languages like Python, Ruby, or JavaScript. These patterns make sense in those contexts—but they're fundamentally mismatched to C++'s nature as a statically-typed, performance-oriented language. - -RTL takes a different approach: **leverage C++'s type system instead of fighting it**. - ---- - -## The Traditional Reflection Model: "Shooting in the Dark" - -**The typical reflection API looks like this:** - -```cpp -// Traditional reflection (most libraries) -result = invoke("functionName", arg1, arg2, arg3); -``` - -**What happens at runtime:** - -1. **Lookup:** Hash map search for "functionName" (~10-50ns) -2. **Arity check:** Does argument count match? (~5ns) -3. **Type validation:** Do argument types match expected types? (~10-30ns) -4. **Type conversion:** Convert arguments if possible (~10-50ns) -5. **Dispatch:** Finally, call the function (~1-2ns) - -**If any step 1-4 fails:** Throw exception (after consuming all that time). - -**If you call this function 1,000 times:** Pay the lookup + validation cost 1,000 times. - ---- - -### **The Problems with This Model** - -#### **1. Performance Degrades at Scale** - -```cpp -// Every call repeats the entire lookup + validation process -for (int i = 0; i < 1000000; i++) { - invoke("processData", data[i]); // 1M × (lookup + validate + dispatch) -} -``` - -**Cost per call:** 30-100ns overhead, even if the function itself is fast. - -For a trivial function (say, 5ns of actual work), **you're spending 85-95% of time on reflection overhead**. - ---- - -#### **2. Error Handling is Reactive, Not Proactive** - -```cpp -try { - result = invoke("funcName", arg1, arg2); -} catch (const ReflectionException& e) { - // What failed? - // - Function not found? - // - Wrong argument count? - // - Type mismatch? - // - Can't convert types? - - // Parse error message to figure it out? 😞 -} -``` - -**You discover errors during the call, not before.** - -Every invocation is a gamble: will it work, or will it throw? - ---- - -#### **3. User Intent is Ambiguous** - -```cpp -invoke("compute", 42, 3.14); -``` - -**Questions the library must guess:** -- Is this a function taking `(int, double)`? -- Or `(double, double)` with int→double conversion? -- Or `(float, float)` with narrowing conversions? -- Or `(long, float)` with multiple conversions? - -**The library guesses. Sometimes it guesses wrong.** - ---- - -## The RTL Model: "Turn On the Lights First" - -RTL separates reflection into **two distinct phases**: - -### **Phase 1: Lookup & Validation (Once)** - -```cpp -rtl::function compute = - mirror.getFunction("compute") - ->argsT() - .returnT(); - -if (!compute) { - // Function doesn't exist or signature doesn't match - // Handle this ONCE, at setup time - std::cerr << "Function 'compute' not found or signature mismatch\n"; - return; -} -``` - -**This is where you "agree and commit":** -- "I want a function named `compute`" -- "That takes `(float, float)`" -- "And returns `std::string`" - -**If this succeeds:** You have a **valid, typed callable**. Invocation is guaranteed to work. - -**If this fails:** You get an empty `optional`. Handle it gracefully, once. - ---- - -### **Phase 2: Dispatch (Many Times, Zero Overhead)** - -```cpp -// Now call it as many times as you want -for (int i = 0; i < 1000000; i++) { - std::string result = compute(data[i].x, data[i].y); // Just dispatch -} -``` - -**What happens per call:** -1. **Dispatch:** Jump to function pointer (~1-2ns) -2. Done. - -**No lookup. No validation. No type checking. No exceptions.** - -**Just a single, native function pointer jump.** - ---- - -## Why This is Architecturally Superior - -### **1. Performance: Amortize the Cost** - -**Traditional Model:** -``` -Total cost = N × (Lookup + Validate + Dispatch) -1,000 calls = 1,000 × (50ns) = 50,000ns = 50µs -``` - -**RTL Model:** -``` -Total cost = 1 × (Lookup + Validate) + N × (Dispatch) -1,000 calls = 1 × (50ns) + 1,000 × (2ns) = 2,050ns = 2µs -``` - -**RTL is 24× faster for 1,000 calls.** - -**The more you call, the bigger RTL's advantage.** - ---- - -### **2. Error Handling: Fail Fast** - -**Traditional:** -```cpp -try { - for (auto& item : data) { - invoke("process", item); // Might fail on iteration 847 - } -} catch (...) { - // Crashed mid-loop. Now what? -} -``` - -**RTL:** -```cpp -auto process = mirror.getFunction("process")->argsT().returnT<>(); - -if (!process) { - // Failed at setup. Handle it BEFORE the loop. - return error("Function 'process' not found"); -} - -// If we get here, all 1,000 calls are guaranteed to work: -for (auto& item : data) { - process(item); // No try-catch needed -} -``` - -**Errors are discovered at lookup time, not call time.** - -**"Fail fast" done right.** - ---- - -### **3. User Intent is Explicit** - -**Traditional (ambiguous):** -```cpp -invoke("func", 42, 3.14); // What signature does user expect? -``` - -**RTL (explicit):** -```cpp -rtl::function func = ...; // User declares intent -func(42, 3.14); // Compiler enforces it -``` - -**No guessing. User's expectations are crystal clear.** - ---- - -### **4. Composability** - -RTL's callables are **first-class objects**: - -```cpp -// Store them -std::map> handlers; -handlers["onConnect"] = mirror.getFunction("handleConnect")->argsT(); -handlers["onDisconnect"] = mirror.getFunction("handleDisconnect")->argsT(); - -// Pass them around -void registerHandler(const std::string& event, rtl::function handler); - -// Compose them -auto combined = [f1, f2](int x) { f1(x); f2(x); }; -``` - -**You can't do this with `invoke("name", ...)` — the lookup is coupled to the call.** - ---- - -## The Type System is Your Friend - -### **Insight: Types Exist at the Call Site** - -When you write: -```cpp -int x = 42; -float y = 3.14f; -invoke("compute", x, y); -``` - -**The compiler knows `x` is `int` and `y` is `float`.** - -**Why throw away that information just to rediscover it at runtime?** - ---- - -### **RTL's Philosophy:** - -> **"C++ is statically typed. Users write typed code. Reflection should use those types, not fight them."** - -When you write: -```cpp -rtl::function compute = ...; -compute(x, y); -``` - -**The compiler:** -- Knows you're calling a function expecting `(int, float)` -- Knows you're passing `(int, float)` -- Validates this at compile time (if variables are typed) -- Generates the call with zero overhead - -**RTL just forwards the arguments. The compiler does the rest.** - ---- - -## The Two Design Decisions That Make This Work - -### **Decision 1: Let C++ Handle Implicit Conversions** - -**Most reflection libraries try to implement conversion logic:** - -```cpp -// What other libraries do (pseudocode): -if (arg_type == int && param_type == float) { - float converted = static_cast(arg); - // Now handle: double, long, short, unsigned... - // Also handle: const, pointers, references... - // Also handle: user-defined conversions... - // 5,000 lines later... -} -``` - -**RTL's approach:** - -```cpp -// User declares expected types -rtl::function func = ...; - -// User passes ints -func(61, 35); // Compiler converts int→float (standard C++) -``` - -**RTL doesn't handle conversions. C++ does.** - -**Benefits:** -- ✅ Zero conversion code to write/maintain -- ✅ Zero runtime overhead (compiler optimizes) -- ✅ All standard conversions work automatically -- ✅ User-defined conversions work automatically -- ✅ Perfect forwarding works -- ✅ Const-correctness preserved - -**RTL leverages the compiler instead of reimplementing it.** - ---- - -### **Decision 2: Decouple Lookup from Invocation** - -**Most libraries couple them:** -```cpp -invoke(name, args) = [Lookup + Validate + Call] as one operation -``` - -**RTL decouples them:** -```cpp -callable = lookup(name, signature) // Once -callable(args) // Many times -``` - -**This separation gives you:** -- ✅ Performance (amortize lookup cost) -- ✅ Safety (validate once, call many) -- ✅ Clarity (errors at lookup, not call) -- ✅ Composability (callables are values) - -**Single Responsibility Principle applied to reflection.** - ---- - -## A Complete Example: Before and After - -### **Traditional Reflection Library** - -```cpp -// Setup (none needed, everything happens at call-time) - -// Usage -void processData(const std::vector& data) { - for (const auto& point : data) { - try { - // Every call: lookup + validate + dispatch - auto result = reflection::invoke("computeValue", point.x, point.y); - - // Type-cast the result (runtime check) - double value = std::any_cast(result); - - // Use value... - } catch (const reflection::NotFoundException& e) { - // Function not found - } catch (const reflection::TypeMismatchException& e) { - // Type error - } catch (const std::bad_any_cast& e) { - // Wrong return type - } - } -} -``` - -**Problems:** -- ❌ Lookup + validation × N times (slow) -- ❌ Three different exception types to catch -- ❌ Runtime type casting required -- ❌ Errors discovered during loop (too late) - ---- - -### **RTL Approach** - -```cpp -// Setup (once, at initialization) -auto computeValue = mirror.getFunction("computeValue") - ->argsT() - .returnT(); - -if (!computeValue) { - // Handle error at setup time - return error("Function 'computeValue' not found or signature mismatch"); -} - -// Usage -void processData(const std::vector& data) { - for (const auto& point : data) { - // Just dispatch (no lookup, no validation, no exceptions) - double value = computeValue(point.x, point.y); - - // Use value... - } -} -``` - -**Benefits:** -- ✅ Lookup + validation once (fast) -- ✅ Zero exception handling in loop -- ✅ Statically typed result (no casting) -- ✅ Errors discovered before loop (fail fast) - ---- - -## When to Use Each API Style - -RTL provides **two APIs** for different scenarios: - -### **Typed API (When You Know Types)** - -```cpp -// You know the signature at the call site -rtl::function func = - mirror.getFunction("toString") - ->argsT() - .returnT(); - -std::string result = func(42, 100); // Compile-time type checking -``` - -**Use when:** -- You know the function signature -- You want compile-time type safety -- You need maximum performance (~1-2ns overhead) - ---- - -### **Type-Erased API (When Types are Unknown)** - -```cpp -// Runtime flexibility when types aren't known at compile time -auto [err, result] = mirror.getFunction("toString") - ->bind(obj) - .call(42, 100); - -if (err == rtl::error::None && result.canViewAs()) { - std::string str = result.view()->get(); -} -``` - -**Use when:** -- Loading plugins at runtime -- Scripting language integration -- Serialization/deserialization -- Generic tool building (debuggers, editors) - -**Even the type-erased API separates lookup from invocation:** -- Lookup: `getFunction("toString")` -- Invocation: `call(args)` - ---- - -## The Philosophy: "Ask, Don't Assume" - -**Traditional reflection:** -```cpp -invoke("func", args); // Hope it works, catch if it doesn't -``` - -**RTL:** -```cpp -auto func = mirror.getFunction("func")->argsT(); -if (func) { - func(args); // Guaranteed to work -} else { - // Handle the known error -} -``` - -**Instead of assuming the function exists and catching exceptions when it doesn't, RTL lets you ASK:** - -- "Does this function exist?" -- "Does it have this signature?" -- "Give me a callable if yes, null if no." - -**Then you decide what to do.** - -**This is:** -- More explicit (no hidden exceptions) -- More efficient (no wasted work on invalid calls) -- More composable (callables are values) - ---- - -## Summary: Two Key Insights - -### **1. C++ Has Types — Use Them** - -**Don't throw away type information just to rediscover it at runtime.** - -Let users declare expected types. Let the compiler handle conversions and validation. Reflection becomes a thin layer, not a complex runtime system. - ---- - -### **2. Separate Lookup from Dispatch** - -**Don't couple lookup + validation with every call.** - -Validate once at setup. Then dispatch becomes a single function pointer jump — as fast as C++ can possibly be. - ---- - -## The Result - -**RTL reflection calls are 10-50× faster than traditional reflection.** - -**Not through clever optimization tricks.** - -**Through better architecture.** - ---- - -**By thinking in C++ instead of copying dynamic languages, RTL achieves both flexibility AND performance.** - -**That's the RTL difference.** diff --git a/text-sailors-log/rtl-bind-function-design-log.md b/text-sailors-log/rtl-bind-function-design-log.md deleted file mode 100644 index 6c220fb6..00000000 --- a/text-sailors-log/rtl-bind-function-design-log.md +++ /dev/null @@ -1,104 +0,0 @@ -# Design Log: bind() — API semantics, purpose and usage - -**Author:** Neeraj Singh -**Date:** 2025-08-25 - ---- - -## Overview - -`bind()` is the central invocation API in RTL that expresses two responsibilities in one call: - -1. **Target binding** — which runtime object (if any) the method should be invoked on. -2. **Argument forwarding policy** — how call-site arguments are to be forwarded (value, lvalue-ref, rvalue-ref, const-ref). - -`bind()` therefore gives the user explicit control over *how* RTL should perceive the invocation context and *how* to forward arguments to resolve overloads correctly. This is essential in a C++ reflection system because value-category and constness affect overload selection and correctness. - ---- - -## API Surface (conceptual) - -```cpp -// Zero-argument form: no target, default forwarding -auto callSite = funcOrMethod->bind(); - -// Bind to an RObject target (by value) — used for instance methods -auto callSite = method->bind(RObject{...}); - -// Explicitly request treating the target as non-const -auto callSite = method->bind(rtl::constCast(RObject{...})); - -// Template form: specify forwarding categories for parameters -auto callSite = func->bind(); // e.g. bind() - -// Combination: bind the target and specify forwarding -auto callSite = method->bind(target); -``` ---- - -## Accepted argument types for `bind()` - -* `rtl::access::RObject` — binds the reflected object as the call target. This is the normal case for invoking instance methods. -* `rtl::constCast&&` (or equivalent explicit wrapper) — signals to RTL: "treat this RObject as non-const for this call". This is an explicit, user-driven request to relax logical constness; if the RObject is *true-const*, the runtime rejects the attempt (`rtl::error::IllegalConstCast`). - -`bind()` *only* accepts these target forms for instance binding. Passing other types as the target should be a compile-time error. - ---- - -## Template parameter pack (perfect-forwarding control) - -* `bind()` allows the caller to *explicitly declare the forwarding category* for each function parameter, e.g. `T`, `T&`, `T&&`, `const T&`. -* This is necessary because reflection cannot deduce value category from a runtime `any`-style container; when overload selection depends on rvalue vs lvalue, `bind<...>()` disambiguates the call. -* If omitted, RTL will attempt best-effort matching using available argument values; but some overloads (especially rvalue-ref overloads) require explicit `bind()` to select. - ---- - -## Semantics — how `bind()` interacts with RTL const model - -* If binding an **RObject created by RTL** (logically-const): - - * Default behavior: bind the target as logically-const (no mutation). Overload resolution will prefer `const` overloads. - * If `const` overload doesn't exist but a non-const overload does, RTL may internally perform a **safe logical `const_cast`** and call the non-const overload. - * If caller explicitly uses `rtl::constCast(RObject)` in `bind()`, RTL will select the non-const overload when safe. - -* If binding an **externally-provided true-const** RObject: - - * `bind()` preserves true constness. RTL will consider only `const` overloads. - * If user calls `bind(rtl::constCast(robj))`, RTL will reject with `rtl::error::IllegalConstCast`. - -* For **static functions**, the object-target passed to `bind()` is ignored (becomes a sink). However, `bind()` still controls perfect-forwarding for parameters. - ---- - -## Error behavior and diagnostics - -* `rtl::error::ConstCallViolation` — raised when a non-const method is attempted on a true-const object without constCast. -* `rtl::error::IllegalConstCast` — raised when user explicitly requests a constCast on a true-const object. -* `rtl::error::ConstOverloadMissing` — raised when a true-const object has no const overload to call. -* `rtl::error::SignatureMismatch` — raised when the forwarded argument types do not match any registered signature. - -Design note: `bind()` should validate as early as possible (during `bind()` return or immediately on `.call()` entry) and provide clear diagnostics. In debug builds provide helpful messages; in release builds keep errors lightweight. - ---- - -## Rationale and benefits - -* **Explicitness:** users can express intent (target identity, const-relaxation, forwarding categories) in a single, discoverable call. -* **Correctness:** avoids ambiguous runtime overload resolution; reduces accidental UB from naive const\_casts. -* **Ergonomics:** templates on `bind()` provide the minimal, explicit syntax needed for perfect-forwarding without changing the call-site semantics. -* **Consistency:** aligns with C++ overload and const rules while providing reflection-specific guarantees (logical vs true constness). - ---- - -## Recommended usage patterns - -* Use `bind()` with no template parameters for common cases where value-categories are natural (lvalue args, no rvalue-only overloads). -* Use `bind()` when you need to target rvalue-ref overloads. -* Use `bind(rtl::constCast(robj))` only when you intentionally want to invoke a non-const overload on an RTL-created object. -* Avoid binding an object to static methods in production code if you want stricter correctness. - ---- - -## Summary - -`bind()` is the explicit control point for method/function invocation in RTL. It unifies target binding and argument forwarding, enabling correct overload resolution in the face of C++'s value-category and const subtleties. The design balances strictness and ergonomics: conservative by default (favoring const), explicit when mutation or rvalue selection is intended. diff --git a/text-sailors-log/rtl-created-shared-ptr-design-exploration.md b/text-sailors-log/rtl-created-shared-ptr-design-exploration.md deleted file mode 100644 index b26efc45..00000000 --- a/text-sailors-log/rtl-created-shared-ptr-design-exploration.md +++ /dev/null @@ -1,60 +0,0 @@ -RTL Design Evolution Log -Date: 2025-08-19 -Author: Neeraj Singh - -# Design Exploration Log — `rtl::alloc::Shared` - -## 🧩 The Motivation - -So far, RTL supports cloning semantics across **stack**, **heap**, and **wrapper-aware** modes. But one common C++ pattern isn’t fully reflected yet: **shared ownership.** - -In native C++, developers often pass around `std::shared_ptr` instead of deep-copying or moving values — especially when sharing is cheaper and semantically correct. RTL should preserve this intuition by offering a reflection-level equivalent. - -## ✨ The Proposal: `rtl::alloc::Shared` - -Introduce a new allocation selector: - -```c++ -enum class alloc { - Stack, - Heap, - Shared, // NEW: share ownership instead of cloning - // (Wrapper/Auto handled as part of copy semantics) -}; -``` - -## 🔧 Behavior by Case - -* **If the RObject wraps a `std::shared_ptr`** → produce a shallow copy (increment ref count). - -* **If the RObject wraps a `std::unique_ptr` owned by RTL** → promote to `std::shared_ptr` via `std::shared_ptr(std::move(unique_ptr))`. RTL keeps the semantics natural — a unique resource can be turned into shared ownership. - -* **If the RObject holds a stack/heap `T` (value)** → allocate a new `std::shared_ptr` holding that value, making it shareable across RTL boundaries. - -* **If the RObject holds a `std::weak_ptr`** → lock and wrap into `std::shared_ptr` if valid, or fail gracefully with `error::ExpiredWeakPtr`. - -## 🎯 Why This Matters - -* **Performance** – avoids deep copies when unnecessary, mirrors what devs already do manually with `shared_ptr`. -* **Intuition** – fits seamlessly with C++ semantics. You can choose: value-copy, heap-owning unique, or shareable pointer — exactly what you’d expect. -* **Flexibility** – lets RTL adapt to client code that’s designed around sharing semantics without forcing developers to write workarounds. - -## 📝 Example - -```c++ -RObject robj = reflect(std::make_unique()); - -// Instead of deep-copying MyType, just create a shared wrapper -auto [err, sharedObj] = robj.clone(); - -// sharedObj now reflects `std::shared_ptr` -EXPECT_TRUE(sharedObj.canViewAs>()); -``` - -## 🌱 Design Status - -This is an **exploration**, not finalized yet. The semantics look natural and consistent, but needs validation through: - -* Performance tests (to ensure shared vs deep-copy is beneficial in practice). -* API ergonomics (does `Shared` feel natural to users, or is it surprising?). -* Integration with `copy::Auto` (does auto-selection need to consider `Shared`?). diff --git a/text-sailors-log/smart-pointers-reflection-support.md b/text-sailors-log/smart-pointers-reflection-support.md deleted file mode 100644 index 282e03cd..00000000 --- a/text-sailors-log/smart-pointers-reflection-support.md +++ /dev/null @@ -1,97 +0,0 @@ -# RTL Design Evolution Log - -## Milestone: Smart Pointer Reflection & Unwrap Semantics - -**Date:** 2025-08-15 -**Author:** Neeraj Singh - ---- - -### Problem Context - -While adding support for `std::unique_ptr`, `std::shared_ptr`, and `std::weak_ptr` to **RObject**, the challenge was to maintain: - -* Full reflection transparency. -* Correct ownership semantics. -* Cross-compiler compatibility. -* Intuitive behavior that matches native C++ usage. - -The goal: **Make working with reflected smart pointers feel as natural as working with them directly in C++.** - ---- - -### Key Challenges - -1. **Move-only types (`std::unique_ptr`)** - - * `std::any` requires `CopyConstructible` types in certain code paths. - * Direct storage of `unique_ptr` in `std::any` can fail on MSVC. - -2. **Shared ownership (`std::shared_ptr`)** - - * Reflection must preserve reference counts when passing between `RObject`s. - -3. **Weak references (`std::weak_ptr`)** - - * Reflection must allow locking to create temporary usable objects without accidental ownership transfer. - -4. **Developer intuition** - - * If you can do it in C++ normally, you should be able to do it via reflection — without unexpected surprises. - ---- - -### Final Design - -**1. Smart Pointer Storage** - -* All heap-created objects in RTL are wrapped in `std::unique_ptr` internally. -* The underlying type `T` can be accessed either as `std::unique_ptr` or directly as `T`. -* Deep-cloning from `unique_ptr` is the default when unwrapping. - -**2. `RObjectUptr` Wrapper** - -* Bypasses `std::any`'s copy-constructor requirement. -* Stores move-only types safely. -* Preserves cross-compiler behavior. - -**3. New Allocation Modes** - -* `alloc::Heap` – Normal heap allocation. -* `alloc::Stack` – Stack allocation. -* `alloc::UnwrapOnHeap` – Deep-clone underlying type `T` from inside smart pointer into a new heap object. -* `alloc::UnwrapOnStack` – Deep-clone underlying type `T` from inside smart pointer into a new stack object. - -**4. Transparent View Semantics** - -* If you know the type, you can view as `T` or `std::unique_ptr` directly. -* If you don't know the type, treating it as an opaque `RObject` is harmless — ownership rules are preserved. - ---- - -### Why This Matters - -In standard C++ development, handling smart pointers is muscle memory — you know when you can move, copy, or share. The **Unwrap-on-Heap/Stack** modes extend that instinct into reflection, allowing you to: - -* Safely clone from `unique_ptr` without stealing ownership. -* Share `shared_ptr` across reflected calls. -* Lock and use `weak_ptr` without surprises. - -The result: a **zero-friction reflection experience** where the developer’s mental model matches the runtime behavior. - ---- - -### Benefits - -* **Predictable behavior** — matches native C++ semantics. -* **Cross-platform consistency** — identical behavior on MSVC, GCC, and Clang. -* **Intuitive API** — unwrapping and cloning are explicit and intention-revealing. -* **Safe by default** — no accidental ownership leaks or lifetime bugs. - ---- - -### Next Steps - -* Expand test coverage for all combinations of smart pointer types and allocation modes. -* Document real-world usage patterns for devs unfamiliar with smart pointer internals. -* Add diagnostics when unwrapping fails due to inaccessible copy constructors. diff --git a/text-sailors-log/thread-safety-revised.md b/text-sailors-log/thread-safety-revised.md deleted file mode 100644 index f27f22ba..00000000 --- a/text-sailors-log/thread-safety-revised.md +++ /dev/null @@ -1,87 +0,0 @@ -# 📓 RTL Design Log — `CxxMirror` Thread-Safety & Singleton Model - -**Date:** 2025-08-29 -**Author:** Neeraj Singh - ---- - -## Background - -`rtl::CxxMirror` is the **root container** of RTL, holding all registrations (records, functions, methods, constructors). -By design, it should: - -* Be a **singleton** (one shared mirror across the program). -* Be **thread-safe** (registration happens once, and the mirror becomes immutable). -* Avoid unnecessary **runtime overhead** (locks, contention, etc.). - -Earlier, RTL used **internal locking** to guard critical sections during registration and query. This made the system **idiot-proof** — safe even if a user misused the mirror. - -At the same time, C++ itself guarantees that **`static`**\*\* local initialization is thread-safe and atomic\*\* (since C++11). This means that if a user follows the recommended *singleton pattern* (placing the mirror in a `static` local), the compiler already enforces thread-safety. - -This raised the question: -➡️ *Should RTL still keep internal locks even when the compiler already provides thread-safety guarantees?* - ---- - -## Initial Options Considered - -### Option 1 — Always Keep Locks - -* ✅ Safe in all cases (idiot-proof). -* ✅ Protects against misuse (e.g., non-static mirrors created across threads). -* ❌ Adds small but non-zero runtime overhead (mutex acquire/release). -* ❌ Redundant in canonical usage (`static` local mirror). - -### Option 2 — Remove Locks in `Static` Mode - -* ✅ Zero runtime overhead. -* ✅ Leverages compiler’s thread-safety. -* ❌ Risk of misuse: a user could instantiate a `CxxMirror` as a local/automatic variable in multiple threads and break invariants. -* ❌ “God mode” is nice for experts, but dangerous in practice. - -### Option 3 — Configurable Policy (ThreadSafe vs Static) - -* ✅ Gives users control (`rtl::CxxMirror` vs `rtl::CxxMirror`). -* ✅ Defaults to safe mode. -* ❌ Opens a footgun: users might misuse `Static` in a non-static context. -* ❌ Adds cognitive load (users must pick policies). - ---- - -## Later Idea: Template Singleton with Universe Indices - -We then considered making `CxxMirror` a **templated, compiler-enforced singleton**: - -* `CxxMirror` is **always static + thread-safe** by compiler guarantees. -* Users create **independent reflective universes** by indexing with a template parameter (`<0>, <1>, <2>…`). - -### Benefits - -* ✅ Compiler-enforced singleton. -* ✅ Zero runtime overhead. -* ✅ Multiple isolated universes. - -### Downsides - -* ❌ Burden on developers to manage indices. -* ❌ No semantic meaning behind numbers (risk of collisions, confusion). -* ❌ Removes flexibility of explicit construction. - ---- - -## 📅 Update — 2025-08-31 (Decision Reversal) - -After deeper consideration, we are **reverting to the original design** with **internal locking** and explicit user-managed construction. - -### Reasons for Reversal - -1. **Flexibility matters** — Users should retain the ability to explicitly construct and manage `rtl::CxxMirror`, not be forced into a rigid template+static model. -2. **Idiot-proof safety is already achieved** — Internal locks guarantee correctness even if a mirror is instantiated incorrectly (e.g., non-static, multi-threaded scenarios). -3. **Programmer responsibility is acceptable** — programmers will naturally recognize the essence of the singleton design pattern and use it wisely (placing the mirror in a `static` local). The docs can emphasize this idiom without enforcing it at the type system level. -4. **Simplicity of usage** — No need to manage artificial template indices or worry about collisions. - -### Final Takeaway - -> **CxxMirror will remain internally thread-safe via locks, with flexibility for explicit construction.** -> The **singleton pattern** (via `static` local) remains the recommended best practice, but it is *advisory, not enforced*. -> This keeps RTL both **idiot-proof and flexible**, avoiding unnecessary limitations while ensuring correctness in all usage scenarios. From 079bbc2c8a0619a96aafbf6bb2d1741dd2c9f5a4 Mon Sep 17 00:00:00 2001 From: neeraj Date: Mon, 19 Jan 2026 22:57:42 +0530 Subject: [PATCH 010/102] string_view: benchmark logs added. --- docs/benchmark_runs_string_view.log | 3150 +++++++++++++-------------- 1 file changed, 1575 insertions(+), 1575 deletions(-) diff --git a/docs/benchmark_runs_string_view.log b/docs/benchmark_runs_string_view.log index 0399b902..ceb8d40a 100644 --- a/docs/benchmark_runs_string_view.log +++ b/docs/benchmark_runs_string_view.log @@ -2,116 +2,116 @@ Starting benchmark runs... Binary: ./bin/RTLBenchmarkApp Log: ./benchmark_runs.log =================================== -[2025-11-04 11:28:24] >>> Run 1: workload scale = 0 +[2026-01-19 22:16:59] >>> Run 1: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T11:28:24+05:30 +2026-01-19T22:16:59+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 2685.07 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 0.38, 0.13, 0.04 +Load Average: 0.63, 0.46, 0.19 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- bm_call::direct__Function::set_string 0.614 ns 0.614 ns 1000000000 -bm_call::via_function_ptr__Function::set_string 1.02 ns 1.02 ns 683678776 -bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 569885030 +bm_call::via_function_ptr__Function::set_string 1.02 ns 1.02 ns 683568677 +bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 576541050 -bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 562884499 -bm_std::function_calls____Method::set_string 1.64 ns 1.64 ns 426729520 +bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 569030602 +bm_std::function_calls____Method::set_string 1.52 ns 1.52 ns 467624796 -bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 683865607 -bm_rtl::method_calls______Method::set_string 1.62 ns 1.62 ns 430515116 +bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 684146847 +bm_rtl::method_calls______Method::set_string 1.43 ns 1.43 ns 488587084 -bm_rtl::function__ErasedReturnType::set_string 3.04 ns 3.04 ns 230360121 -bm_rtl::method____ErasedReturnType::set_string 4.04 ns 4.04 ns 172858129 -bm_rtl::method____ErasedTargetType::set_string 4.26 ns 4.26 ns 166388092 -bm_rtl::method____ErasedTargetAndReturnType::set_string 4.74 ns 4.74 ns 149410247 +bm_rtl::function__ErasedReturnType::set_string 2.82 ns 2.82 ns 249372110 +bm_rtl::method____ErasedReturnType::set_string 3.31 ns 3.31 ns 212147428 +bm_rtl::method____ErasedTargetType::set_string 3.89 ns 3.89 ns 180614166 +bm_rtl::method____ErasedTargetAndReturnType::set_string 4.54 ns 4.54 ns 155811336 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1.48 ns 1.48 ns 466378476 +bm_call::direct__Function::get_string 1.44 ns 1.44 ns 488611796 -bm_call::via_function_ptr__Function::get_string 2.58 ns 2.58 ns 270570089 -bm_call::via_function_ptr____Method::get_string 2.59 ns 2.59 ns 269322401 +bm_call::via_function_ptr__Function::get_string 2.66 ns 2.66 ns 263520027 +bm_call::via_function_ptr____Method::get_string 2.46 ns 2.46 ns 285111058 -bm_std::function_calls__Function::get_string 2.76 ns 2.76 ns 251347073 -bm_std::function_calls____Method::get_string 3.27 ns 3.27 ns 217804162 +bm_std::function_calls__Function::get_string 2.46 ns 2.46 ns 285121216 +bm_std::function_calls____Method::get_string 3.20 ns 3.20 ns 219769186 -bm_rtl::function_calls__Function::get_string 2.58 ns 2.58 ns 270312043 -bm_rtl::method_calls______Method::get_string 2.98 ns 2.98 ns 230536281 +bm_rtl::function_calls__Function::get_string 2.26 ns 2.26 ns 310201816 +bm_rtl::method_calls______Method::get_string 2.76 ns 2.76 ns 260137507 -bm_rtl::function__ErasedReturnType::get_string 15.1 ns 15.1 ns 45710706 -bm_rtl::method____ErasedReturnType::get_string 15.8 ns 15.8 ns 44050977 -bm_rtl::method____ErasedTargetType::get_string 5.97 ns 5.97 ns 117370904 -bm_rtl::method____ErasedTargetAndReturnType::get_string 17.3 ns 17.3 ns 43244655 +bm_rtl::function__ErasedReturnType::get_string 13.7 ns 13.7 ns 51217947 +bm_rtl::method____ErasedReturnType::get_string 14.0 ns 14.0 ns 49918633 +bm_rtl::method____ErasedTargetType::get_string 6.75 ns 6.75 ns 103663468 +bm_rtl::method____ErasedTargetAndReturnType::get_string 15.5 ns 15.5 ns 45414826 ----------------------------------- -[2025-11-04 11:28:44] >>> Run 2: workload scale = 0 +[2026-01-19 22:17:19] >>> Run 2: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T11:28:44+05:30 +2026-01-19T22:17:19+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4611.4 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 0.78, 0.24, 0.08 +Load Average: 0.74, 0.50, 0.21 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 0.634 ns 0.634 ns 1000000000 +bm_call::direct__Function::set_string 0.615 ns 0.615 ns 1000000000 -bm_call::via_function_ptr__Function::set_string 1.08 ns 1.08 ns 654860358 -bm_call::via_function_ptr____Method::set_string 1.30 ns 1.30 ns 525150563 +bm_call::via_function_ptr__Function::set_string 1.03 ns 1.03 ns 684181498 +bm_call::via_function_ptr____Method::set_string 1.21 ns 1.21 ns 569642730 -bm_std::function_calls__Function::set_string 1.28 ns 1.28 ns 542946738 -bm_std::function_calls____Method::set_string 1.65 ns 1.65 ns 415930435 +bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 569800978 +bm_std::function_calls____Method::set_string 1.52 ns 1.52 ns 450875649 -bm_rtl::function_calls__Function::set_string 1.07 ns 1.07 ns 676793908 -bm_rtl::method_calls______Method::set_string 1.68 ns 1.68 ns 408934924 +bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 683995818 +bm_rtl::method_calls______Method::set_string 1.43 ns 1.43 ns 488611687 -bm_rtl::function__ErasedReturnType::set_string 3.20 ns 3.20 ns 229478489 -bm_rtl::method____ErasedReturnType::set_string 4.05 ns 4.05 ns 170238631 -bm_rtl::method____ErasedTargetType::set_string 4.22 ns 4.22 ns 164288125 -bm_rtl::method____ErasedTargetAndReturnType::set_string 4.68 ns 4.68 ns 150597958 +bm_rtl::function__ErasedReturnType::set_string 2.83 ns 2.83 ns 246485658 +bm_rtl::method____ErasedReturnType::set_string 3.30 ns 3.30 ns 214354534 +bm_rtl::method____ErasedTargetType::set_string 3.89 ns 3.89 ns 180045506 +bm_rtl::method____ErasedTargetAndReturnType::set_string 4.51 ns 4.51 ns 154404330 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1.43 ns 1.43 ns 474635786 +bm_call::direct__Function::get_string 1.44 ns 1.44 ns 487781988 -bm_call::via_function_ptr__Function::get_string 2.49 ns 2.49 ns 282523832 -bm_call::via_function_ptr____Method::get_string 2.48 ns 2.48 ns 283788061 +bm_call::via_function_ptr__Function::get_string 2.66 ns 2.66 ns 263194125 +bm_call::via_function_ptr____Method::get_string 2.46 ns 2.46 ns 285136636 -bm_std::function_calls__Function::get_string 2.69 ns 2.69 ns 256523801 -bm_std::function_calls____Method::get_string 3.11 ns 3.11 ns 225496053 +bm_std::function_calls__Function::get_string 2.46 ns 2.46 ns 285136994 +bm_std::function_calls____Method::get_string 3.18 ns 3.18 ns 228110017 -bm_rtl::function_calls__Function::get_string 2.56 ns 2.56 ns 271049574 -bm_rtl::method_calls______Method::get_string 2.95 ns 2.95 ns 242354631 +bm_rtl::function_calls__Function::get_string 2.26 ns 2.26 ns 310208330 +bm_rtl::method_calls______Method::get_string 2.72 ns 2.72 ns 256333628 -bm_rtl::function__ErasedReturnType::get_string 15.5 ns 15.5 ns 45846828 -bm_rtl::method____ErasedReturnType::get_string 15.7 ns 15.7 ns 44262788 -bm_rtl::method____ErasedTargetType::get_string 5.89 ns 5.89 ns 117265605 -bm_rtl::method____ErasedTargetAndReturnType::get_string 16.3 ns 16.3 ns 42284738 +bm_rtl::function__ErasedReturnType::get_string 13.8 ns 13.8 ns 51058389 +bm_rtl::method____ErasedReturnType::get_string 14.1 ns 14.1 ns 49524008 +bm_rtl::method____ErasedTargetType::get_string 6.75 ns 6.75 ns 103685569 +bm_rtl::method____ErasedTargetAndReturnType::get_string 15.1 ns 15.1 ns 46352459 ----------------------------------- -[2025-11-04 11:29:05] >>> Run 3: workload scale = 0 +[2026-01-19 22:17:39] >>> Run 3: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T11:29:05+05:30 +2026-01-19T22:17:39+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -119,101 +119,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.13, 0.35, 0.12 +Load Average: 0.81, 0.53, 0.22 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 0.543 ns 0.543 ns 1000000000 +bm_call::direct__Function::set_string 0.614 ns 0.614 ns 1000000000 -bm_call::via_function_ptr__Function::set_string 1.03 ns 1.03 ns 683567202 -bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 569508463 +bm_call::via_function_ptr__Function::set_string 1.02 ns 1.02 ns 683812844 +bm_call::via_function_ptr____Method::set_string 1.22 ns 1.21 ns 577612805 -bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 570111428 -bm_std::function_calls____Method::set_string 1.64 ns 1.64 ns 427615238 +bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 569775056 +bm_std::function_calls____Method::set_string 1.59 ns 1.59 ns 434079632 -bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 684124829 -bm_rtl::method_calls______Method::set_string 1.62 ns 1.62 ns 476008120 +bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 683787447 +bm_rtl::method_calls______Method::set_string 1.42 ns 1.42 ns 488613617 -bm_rtl::function__ErasedReturnType::set_string 3.02 ns 3.02 ns 230302984 -bm_rtl::method____ErasedReturnType::set_string 4.02 ns 4.02 ns 172265220 -bm_rtl::method____ErasedTargetType::set_string 4.26 ns 4.26 ns 164395945 -bm_rtl::method____ErasedTargetAndReturnType::set_string 4.67 ns 4.67 ns 151752309 +bm_rtl::function__ErasedReturnType::set_string 7.37 ns 7.37 ns 95035791 +bm_rtl::method____ErasedReturnType::set_string 7.78 ns 7.78 ns 90042208 +bm_rtl::method____ErasedTargetType::set_string 3.90 ns 3.90 ns 180433649 +bm_rtl::method____ErasedTargetAndReturnType::set_string 8.60 ns 8.60 ns 81448564 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1.41 ns 1.41 ns 495458672 +bm_call::direct__Function::get_string 1.44 ns 1.44 ns 488585969 -bm_call::via_function_ptr__Function::get_string 2.46 ns 2.46 ns 284981627 -bm_call::via_function_ptr____Method::get_string 2.49 ns 2.49 ns 280143091 +bm_call::via_function_ptr__Function::get_string 2.66 ns 2.66 ns 265152552 +bm_call::via_function_ptr____Method::get_string 2.46 ns 2.46 ns 284574733 -bm_std::function_calls__Function::get_string 2.66 ns 2.66 ns 263196386 -bm_std::function_calls____Method::get_string 3.11 ns 3.10 ns 227498153 +bm_std::function_calls__Function::get_string 2.46 ns 2.46 ns 285006675 +bm_std::function_calls____Method::get_string 3.15 ns 3.15 ns 222331260 -bm_rtl::function_calls__Function::get_string 2.46 ns 2.46 ns 284559260 -bm_rtl::method_calls______Method::get_string 2.87 ns 2.87 ns 244503914 +bm_rtl::function_calls__Function::get_string 2.26 ns 2.26 ns 310066005 +bm_rtl::method_calls______Method::get_string 2.67 ns 2.67 ns 253455004 -bm_rtl::function__ErasedReturnType::get_string 14.7 ns 14.7 ns 48203413 -bm_rtl::method____ErasedReturnType::get_string 15.2 ns 15.2 ns 45954622 -bm_rtl::method____ErasedTargetType::get_string 5.81 ns 5.81 ns 120895674 -bm_rtl::method____ErasedTargetAndReturnType::get_string 16.4 ns 16.4 ns 42589796 +bm_rtl::function__ErasedReturnType::get_string 13.7 ns 13.7 ns 50596278 +bm_rtl::method____ErasedReturnType::get_string 14.1 ns 14.1 ns 49241845 +bm_rtl::method____ErasedTargetType::get_string 6.76 ns 6.76 ns 103534631 +bm_rtl::method____ErasedTargetAndReturnType::get_string 15.2 ns 15.2 ns 46787119 ----------------------------------- -[2025-11-04 11:29:25] >>> Run 4: workload scale = 0 +[2026-01-19 22:17:59] >>> Run 4: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T11:29:25+05:30 +2026-01-19T22:17:59+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4142.36 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.09, 0.39, 0.14 +Load Average: 0.87, 0.56, 0.24 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 0.619 ns 0.620 ns 1000000000 +bm_call::direct__Function::set_string 0.615 ns 0.614 ns 1000000000 -bm_call::via_function_ptr__Function::set_string 1.02 ns 1.02 ns 683826531 -bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 569466070 +bm_call::via_function_ptr__Function::set_string 1.02 ns 1.02 ns 682977689 +bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 563075836 -bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 563230061 -bm_std::function_calls____Method::set_string 1.64 ns 1.64 ns 427349799 +bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 569603803 +bm_std::function_calls____Method::set_string 1.54 ns 1.54 ns 460593978 -bm_rtl::function_calls__Function::set_string 1.02 ns 1.03 ns 684106315 -bm_rtl::method_calls______Method::set_string 1.50 ns 1.50 ns 485473792 +bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 683892125 +bm_rtl::method_calls______Method::set_string 1.43 ns 1.43 ns 488236125 -bm_rtl::function__ErasedReturnType::set_string 3.04 ns 3.04 ns 231054109 -bm_rtl::method____ErasedReturnType::set_string 4.01 ns 4.01 ns 177095634 -bm_rtl::method____ErasedTargetType::set_string 4.15 ns 4.15 ns 168485741 -bm_rtl::method____ErasedTargetAndReturnType::set_string 4.58 ns 4.58 ns 149929544 +bm_rtl::function__ErasedReturnType::set_string 7.37 ns 7.37 ns 95016114 +bm_rtl::method____ErasedReturnType::set_string 7.78 ns 7.78 ns 90024009 +bm_rtl::method____ErasedTargetType::set_string 3.89 ns 3.89 ns 180054936 +bm_rtl::method____ErasedTargetAndReturnType::set_string 8.60 ns 8.60 ns 81331959 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1.42 ns 1.42 ns 495133376 +bm_call::direct__Function::get_string 1.43 ns 1.43 ns 488678219 -bm_call::via_function_ptr__Function::get_string 2.45 ns 2.46 ns 285005788 -bm_call::via_function_ptr____Method::get_string 2.48 ns 2.48 ns 284236287 +bm_call::via_function_ptr__Function::get_string 2.66 ns 2.66 ns 264051337 +bm_call::via_function_ptr____Method::get_string 2.46 ns 2.46 ns 285120509 -bm_std::function_calls__Function::get_string 2.66 ns 2.66 ns 263017751 -bm_std::function_calls____Method::get_string 3.10 ns 3.10 ns 224825065 +bm_std::function_calls__Function::get_string 2.46 ns 2.46 ns 285112848 +bm_std::function_calls____Method::get_string 3.23 ns 3.23 ns 226611386 -bm_rtl::function_calls__Function::get_string 2.46 ns 2.46 ns 284512552 -bm_rtl::method_calls______Method::get_string 2.86 ns 2.86 ns 243917692 +bm_rtl::function_calls__Function::get_string 2.26 ns 2.26 ns 310198473 +bm_rtl::method_calls______Method::get_string 2.70 ns 2.70 ns 258499213 -bm_rtl::function__ErasedReturnType::get_string 14.7 ns 14.7 ns 47450172 -bm_rtl::method____ErasedReturnType::get_string 15.2 ns 15.2 ns 46035495 -bm_rtl::method____ErasedTargetType::get_string 5.86 ns 5.86 ns 121152258 -bm_rtl::method____ErasedTargetAndReturnType::get_string 16.3 ns 16.3 ns 41584993 +bm_rtl::function__ErasedReturnType::get_string 13.6 ns 13.6 ns 51481253 +bm_rtl::method____ErasedReturnType::get_string 14.1 ns 14.1 ns 50116508 +bm_rtl::method____ErasedTargetType::get_string 6.76 ns 6.76 ns 103642665 +bm_rtl::method____ErasedTargetAndReturnType::get_string 15.1 ns 15.1 ns 46654405 ----------------------------------- -[2025-11-04 11:29:46] >>> Run 5: workload scale = 0 +[2026-01-19 22:18:18] >>> Run 5: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T11:29:46+05:30 +2026-01-19T22:18:18+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -221,50 +221,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 0.43, 0.16 +Load Average: 0.90, 0.59, 0.26 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 0.540 ns 0.540 ns 1000000000 +bm_call::direct__Function::set_string 0.614 ns 0.614 ns 1000000000 -bm_call::via_function_ptr__Function::set_string 1.03 ns 1.03 ns 682847039 -bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 568512058 +bm_call::via_function_ptr__Function::set_string 1.02 ns 1.02 ns 680343092 +bm_call::via_function_ptr____Method::set_string 1.23 ns 1.23 ns 575099292 -bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 569587483 -bm_std::function_calls____Method::set_string 1.64 ns 1.64 ns 427385239 +bm_std::function_calls__Function::set_string 1.23 ns 1.23 ns 569190838 +bm_std::function_calls____Method::set_string 1.49 ns 1.49 ns 452799580 -bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 683618197 -bm_rtl::method_calls______Method::set_string 1.63 ns 1.63 ns 428438447 +bm_rtl::function_calls__Function::set_string 1.02 ns 1.02 ns 684190319 +bm_rtl::method_calls______Method::set_string 1.43 ns 1.43 ns 490962912 -bm_rtl::function__ErasedReturnType::set_string 3.03 ns 3.03 ns 230910273 -bm_rtl::method____ErasedReturnType::set_string 3.96 ns 3.96 ns 177102134 -bm_rtl::method____ErasedTargetType::set_string 4.21 ns 4.21 ns 166155415 -bm_rtl::method____ErasedTargetAndReturnType::set_string 4.63 ns 4.63 ns 151585002 +bm_rtl::function__ErasedReturnType::set_string 2.82 ns 2.82 ns 246594378 +bm_rtl::method____ErasedReturnType::set_string 3.33 ns 3.33 ns 211691857 +bm_rtl::method____ErasedTargetType::set_string 3.89 ns 3.89 ns 180435897 +bm_rtl::method____ErasedTargetAndReturnType::set_string 4.52 ns 4.52 ns 156477629 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1.42 ns 1.42 ns 495417193 +bm_call::direct__Function::get_string 1.43 ns 1.43 ns 487577300 -bm_call::via_function_ptr__Function::get_string 2.45 ns 2.46 ns 285068393 -bm_call::via_function_ptr____Method::get_string 2.48 ns 2.48 ns 283577125 +bm_call::via_function_ptr__Function::get_string 2.66 ns 2.66 ns 263417306 +bm_call::via_function_ptr____Method::get_string 2.46 ns 2.46 ns 285094736 -bm_std::function_calls__Function::get_string 2.66 ns 2.66 ns 263081859 -bm_std::function_calls____Method::get_string 3.09 ns 3.09 ns 225912956 +bm_std::function_calls__Function::get_string 2.46 ns 2.46 ns 285121796 +bm_std::function_calls____Method::get_string 3.16 ns 3.16 ns 215202059 -bm_rtl::function_calls__Function::get_string 2.46 ns 2.46 ns 285086595 -bm_rtl::method_calls______Method::get_string 2.88 ns 2.88 ns 242840494 +bm_rtl::function_calls__Function::get_string 2.26 ns 2.26 ns 310197791 +bm_rtl::method_calls______Method::get_string 2.76 ns 2.76 ns 258111711 -bm_rtl::function__ErasedReturnType::get_string 14.9 ns 14.9 ns 46919301 -bm_rtl::method____ErasedReturnType::get_string 15.0 ns 15.0 ns 45689265 -bm_rtl::method____ErasedTargetType::get_string 5.87 ns 5.88 ns 119688015 -bm_rtl::method____ErasedTargetAndReturnType::get_string 16.3 ns 16.3 ns 43375628 +bm_rtl::function__ErasedReturnType::get_string 13.7 ns 13.7 ns 51303361 +bm_rtl::method____ErasedReturnType::get_string 14.1 ns 14.1 ns 50044327 +bm_rtl::method____ErasedTargetType::get_string 6.76 ns 6.76 ns 103673181 +bm_rtl::method____ErasedTargetAndReturnType::get_string 15.1 ns 15.1 ns 46222419 ----------------------------------- -[2025-11-04 11:30:06] >>> Run 1: workload scale = 1 +[2026-01-19 22:18:39] >>> Run 1: workload scale = 1 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 1 iterations ============================================= -2025-11-04T11:30:06+05:30 +2026-01-19T22:18:39+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -272,50 +272,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 0.47, 0.18 +Load Average: 0.93, 0.62, 0.28 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 14.5 ns 14.5 ns 48242791 +bm_call::direct__Function::set_string 14.2 ns 14.2 ns 47602979 -bm_call::via_function_ptr__Function::set_string 14.6 ns 14.6 ns 47568680 -bm_call::via_function_ptr____Method::set_string 14.5 ns 14.5 ns 48746560 +bm_call::via_function_ptr__Function::set_string 14.7 ns 14.7 ns 47551280 +bm_call::via_function_ptr____Method::set_string 14.5 ns 14.5 ns 48814713 -bm_std::function_calls__Function::set_string 14.4 ns 14.4 ns 48361996 -bm_std::function_calls____Method::set_string 14.7 ns 14.7 ns 47229848 +bm_std::function_calls__Function::set_string 14.8 ns 14.8 ns 48125351 +bm_std::function_calls____Method::set_string 15.0 ns 15.0 ns 45842215 -bm_rtl::function_calls__Function::set_string 14.3 ns 14.3 ns 47864234 -bm_rtl::method_calls______Method::set_string 15.0 ns 15.0 ns 46668705 +bm_rtl::function_calls__Function::set_string 14.6 ns 14.6 ns 47596122 +bm_rtl::method_calls______Method::set_string 14.8 ns 14.8 ns 47688533 -bm_rtl::function__ErasedReturnType::set_string 16.8 ns 16.8 ns 41584347 -bm_rtl::method____ErasedReturnType::set_string 17.0 ns 17.0 ns 41277560 -bm_rtl::method____ErasedTargetType::set_string 17.9 ns 17.9 ns 38831295 -bm_rtl::method____ErasedTargetAndReturnType::set_string 18.1 ns 18.1 ns 38521566 +bm_rtl::function__ErasedReturnType::set_string 16.3 ns 16.3 ns 43204263 +bm_rtl::method____ErasedReturnType::set_string 17.4 ns 17.4 ns 39803981 +bm_rtl::method____ErasedTargetType::set_string 17.4 ns 17.4 ns 40619050 +bm_rtl::method____ErasedTargetAndReturnType::set_string 17.5 ns 17.5 ns 39261182 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 21.4 ns 21.4 ns 32748201 +bm_call::direct__Function::get_string 19.8 ns 19.8 ns 35318159 -bm_call::via_function_ptr__Function::get_string 21.7 ns 21.7 ns 32229019 -bm_call::via_function_ptr____Method::get_string 21.8 ns 21.8 ns 32216795 +bm_call::via_function_ptr__Function::get_string 19.9 ns 19.9 ns 34920150 +bm_call::via_function_ptr____Method::get_string 19.9 ns 19.9 ns 35041102 -bm_std::function_calls__Function::get_string 21.8 ns 21.8 ns 32016965 -bm_std::function_calls____Method::get_string 21.7 ns 21.7 ns 32038907 +bm_std::function_calls__Function::get_string 20.3 ns 20.3 ns 34279465 +bm_std::function_calls____Method::get_string 20.7 ns 20.7 ns 33535205 -bm_rtl::function_calls__Function::get_string 21.7 ns 21.7 ns 32075981 -bm_rtl::method_calls______Method::get_string 21.8 ns 21.8 ns 32139933 +bm_rtl::function_calls__Function::get_string 20.0 ns 20.0 ns 34773001 +bm_rtl::method_calls______Method::get_string 20.0 ns 20.0 ns 34838388 -bm_rtl::function__ErasedReturnType::get_string 34.3 ns 34.3 ns 20292635 -bm_rtl::method____ErasedReturnType::get_string 35.5 ns 35.5 ns 19832365 -bm_rtl::method____ErasedTargetType::get_string 24.2 ns 24.2 ns 29003990 -bm_rtl::method____ErasedTargetAndReturnType::get_string 35.8 ns 35.8 ns 19482072 +bm_rtl::function__ErasedReturnType::get_string 32.0 ns 32.0 ns 22025260 +bm_rtl::method____ErasedReturnType::get_string 32.3 ns 32.3 ns 21635178 +bm_rtl::method____ErasedTargetType::get_string 24.1 ns 24.1 ns 29030859 +bm_rtl::method____ErasedTargetAndReturnType::get_string 33.7 ns 33.6 ns 20685409 ----------------------------------- -[2025-11-04 11:30:27] >>> Run 2: workload scale = 1 +[2026-01-19 22:18:59] >>> Run 2: workload scale = 1 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 1 iterations ============================================= -2025-11-04T11:30:27+05:30 +2026-01-19T22:18:59+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -323,50 +323,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 0.51, 0.20 +Load Average: 0.95, 0.65, 0.29 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 14.5 ns 14.5 ns 48600272 +bm_call::direct__Function::set_string 14.3 ns 14.3 ns 48584646 -bm_call::via_function_ptr__Function::set_string 14.4 ns 14.4 ns 47262841 -bm_call::via_function_ptr____Method::set_string 14.7 ns 14.7 ns 47560475 +bm_call::via_function_ptr__Function::set_string 15.0 ns 15.0 ns 46029690 +bm_call::via_function_ptr____Method::set_string 14.9 ns 14.9 ns 46651918 -bm_std::function_calls__Function::set_string 14.7 ns 14.7 ns 46778629 -bm_std::function_calls____Method::set_string 15.0 ns 15.0 ns 46225572 +bm_std::function_calls__Function::set_string 15.5 ns 15.5 ns 46957480 +bm_std::function_calls____Method::set_string 15.3 ns 15.3 ns 43780461 -bm_rtl::function_calls__Function::set_string 14.4 ns 14.4 ns 47934169 -bm_rtl::method_calls______Method::set_string 15.0 ns 15.0 ns 46326371 +bm_rtl::function_calls__Function::set_string 15.0 ns 15.0 ns 47249334 +bm_rtl::method_calls______Method::set_string 14.8 ns 14.8 ns 47018811 -bm_rtl::function__ErasedReturnType::set_string 16.7 ns 16.7 ns 41965256 -bm_rtl::method____ErasedReturnType::set_string 17.2 ns 17.2 ns 41096893 -bm_rtl::method____ErasedTargetType::set_string 17.5 ns 17.5 ns 40225175 -bm_rtl::method____ErasedTargetAndReturnType::set_string 18.1 ns 18.1 ns 38566575 +bm_rtl::function__ErasedReturnType::set_string 16.6 ns 16.6 ns 41801460 +bm_rtl::method____ErasedReturnType::set_string 17.4 ns 17.4 ns 41245734 +bm_rtl::method____ErasedTargetType::set_string 17.4 ns 17.4 ns 40022891 +bm_rtl::method____ErasedTargetAndReturnType::set_string 17.9 ns 17.9 ns 39375751 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 21.1 ns 21.2 ns 32955668 +bm_call::direct__Function::get_string 25.0 ns 25.0 ns 27910450 -bm_call::via_function_ptr__Function::get_string 21.2 ns 21.2 ns 33076981 -bm_call::via_function_ptr____Method::get_string 21.4 ns 21.4 ns 32585058 +bm_call::via_function_ptr__Function::get_string 25.0 ns 25.0 ns 27970128 +bm_call::via_function_ptr____Method::get_string 25.2 ns 25.1 ns 27845622 -bm_std::function_calls__Function::get_string 21.3 ns 21.3 ns 32772706 -bm_std::function_calls____Method::get_string 22.2 ns 22.2 ns 31420316 +bm_std::function_calls__Function::get_string 25.2 ns 25.2 ns 27757309 +bm_std::function_calls____Method::get_string 25.3 ns 25.3 ns 27601367 -bm_rtl::function_calls__Function::get_string 21.2 ns 21.2 ns 33089599 -bm_rtl::method_calls______Method::get_string 21.6 ns 21.6 ns 32466374 +bm_rtl::function_calls__Function::get_string 25.0 ns 25.0 ns 28025612 +bm_rtl::method_calls______Method::get_string 25.2 ns 25.2 ns 27785388 -bm_rtl::function__ErasedReturnType::get_string 34.2 ns 34.2 ns 20325951 -bm_rtl::method____ErasedReturnType::get_string 35.1 ns 35.1 ns 19870274 -bm_rtl::method____ErasedTargetType::get_string 24.3 ns 24.3 ns 29128625 -bm_rtl::method____ErasedTargetAndReturnType::get_string 36.0 ns 36.0 ns 19558210 +bm_rtl::function__ErasedReturnType::get_string 31.7 ns 31.7 ns 22028623 +bm_rtl::method____ErasedReturnType::get_string 32.3 ns 32.3 ns 21724774 +bm_rtl::method____ErasedTargetType::get_string 29.4 ns 29.4 ns 23749156 +bm_rtl::method____ErasedTargetAndReturnType::get_string 33.4 ns 33.4 ns 20507660 ----------------------------------- -[2025-11-04 11:30:47] >>> Run 3: workload scale = 1 +[2026-01-19 22:19:19] >>> Run 3: workload scale = 1 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 1 iterations ============================================= -2025-11-04T11:30:47+05:30 +2026-01-19T22:19:19+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -374,101 +374,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 0.55, 0.22 +Load Average: 0.97, 0.67, 0.31 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 24.0 ns 24.0 ns 29170635 +bm_call::direct__Function::set_string 14.5 ns 14.5 ns 48240969 -bm_call::via_function_ptr__Function::set_string 23.5 ns 23.5 ns 29738969 -bm_call::via_function_ptr____Method::set_string 23.7 ns 23.7 ns 29340017 +bm_call::via_function_ptr__Function::set_string 14.9 ns 14.9 ns 46922624 +bm_call::via_function_ptr____Method::set_string 14.9 ns 14.9 ns 46873657 -bm_std::function_calls__Function::set_string 23.7 ns 23.7 ns 29670419 -bm_std::function_calls____Method::set_string 15.2 ns 15.2 ns 46003960 +bm_std::function_calls__Function::set_string 15.0 ns 15.0 ns 46979264 +bm_std::function_calls____Method::set_string 14.8 ns 14.8 ns 46821025 -bm_rtl::function_calls__Function::set_string 23.5 ns 23.5 ns 29709584 -bm_rtl::method_calls______Method::set_string 23.8 ns 23.8 ns 29608054 +bm_rtl::function_calls__Function::set_string 14.9 ns 14.9 ns 47090225 +bm_rtl::method_calls______Method::set_string 14.9 ns 14.9 ns 47324383 -bm_rtl::function__ErasedReturnType::set_string 20.2 ns 20.2 ns 34607217 -bm_rtl::method____ErasedReturnType::set_string 20.3 ns 20.3 ns 34461009 -bm_rtl::method____ErasedTargetType::set_string 26.1 ns 26.1 ns 26810310 -bm_rtl::method____ErasedTargetAndReturnType::set_string 26.1 ns 26.1 ns 26832712 +bm_rtl::function__ErasedReturnType::set_string 16.5 ns 16.4 ns 42457769 +bm_rtl::method____ErasedReturnType::set_string 16.6 ns 16.6 ns 41747381 +bm_rtl::method____ErasedTargetType::set_string 17.3 ns 17.3 ns 40942180 +bm_rtl::method____ErasedTargetAndReturnType::set_string 19.2 ns 19.2 ns 36853482 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 32.8 ns 32.8 ns 21350792 +bm_call::direct__Function::get_string 20.2 ns 20.2 ns 34838734 -bm_call::via_function_ptr__Function::get_string 32.4 ns 32.4 ns 21599677 -bm_call::via_function_ptr____Method::get_string 32.6 ns 32.6 ns 21499549 +bm_call::via_function_ptr__Function::get_string 20.1 ns 20.1 ns 34908842 +bm_call::via_function_ptr____Method::get_string 20.2 ns 20.2 ns 34891499 -bm_std::function_calls__Function::get_string 32.6 ns 32.6 ns 21435275 -bm_std::function_calls____Method::get_string 26.5 ns 26.5 ns 26588723 +bm_std::function_calls__Function::get_string 20.3 ns 20.3 ns 34489947 +bm_std::function_calls____Method::get_string 20.5 ns 20.5 ns 34164828 -bm_rtl::function_calls__Function::get_string 32.4 ns 32.4 ns 21569659 -bm_rtl::method_calls______Method::get_string 32.6 ns 32.6 ns 21481163 +bm_rtl::function_calls__Function::get_string 20.1 ns 20.1 ns 34860515 +bm_rtl::method_calls______Method::get_string 20.1 ns 20.1 ns 34509987 -bm_rtl::function__ErasedReturnType::get_string 35.0 ns 35.0 ns 20082606 -bm_rtl::method____ErasedReturnType::get_string 45.6 ns 45.6 ns 15272559 -bm_rtl::method____ErasedTargetType::get_string 32.7 ns 32.7 ns 21388794 -bm_rtl::method____ErasedTargetAndReturnType::get_string 37.5 ns 37.5 ns 18706136 +bm_rtl::function__ErasedReturnType::get_string 32.0 ns 32.0 ns 21715254 +bm_rtl::method____ErasedReturnType::get_string 32.5 ns 32.5 ns 21786883 +bm_rtl::method____ErasedTargetType::get_string 24.6 ns 24.6 ns 28372972 +bm_rtl::method____ErasedTargetAndReturnType::get_string 33.7 ns 33.7 ns 20781704 ----------------------------------- -[2025-11-04 11:31:10] >>> Run 1: workload scale = 5 +[2026-01-19 22:19:40] >>> Run 1: workload scale = 5 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 5 iterations ============================================= -2025-11-04T11:31:10+05:30 +2026-01-19T22:19:40+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 4865.77 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 0.58, 0.24 +Load Average: 0.98, 0.69, 0.32 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 93.8 ns 93.8 ns 7417031 +bm_call::direct__Function::set_string 105 ns 105 ns 6653489 -bm_call::via_function_ptr__Function::set_string 94.0 ns 94.0 ns 7452008 -bm_call::via_function_ptr____Method::set_string 93.8 ns 93.8 ns 7473913 +bm_call::via_function_ptr__Function::set_string 107 ns 107 ns 6492983 +bm_call::via_function_ptr____Method::set_string 107 ns 107 ns 6535246 -bm_std::function_calls__Function::set_string 94.1 ns 94.1 ns 7465042 -bm_std::function_calls____Method::set_string 94.1 ns 94.1 ns 7427433 +bm_std::function_calls__Function::set_string 107 ns 107 ns 6557447 +bm_std::function_calls____Method::set_string 108 ns 107 ns 6525899 -bm_rtl::function_calls__Function::set_string 93.9 ns 93.9 ns 7491989 -bm_rtl::method_calls______Method::set_string 94.3 ns 94.3 ns 7440296 +bm_rtl::function_calls__Function::set_string 107 ns 107 ns 6529877 +bm_rtl::method_calls______Method::set_string 107 ns 107 ns 6500537 -bm_rtl::function__ErasedReturnType::set_string 95.6 ns 95.6 ns 7316655 -bm_rtl::method____ErasedReturnType::set_string 96.8 ns 96.8 ns 7149766 -bm_rtl::method____ErasedTargetType::set_string 97.4 ns 97.4 ns 7189451 -bm_rtl::method____ErasedTargetAndReturnType::set_string 103 ns 103 ns 6771417 +bm_rtl::function__ErasedReturnType::set_string 109 ns 109 ns 6433512 +bm_rtl::method____ErasedReturnType::set_string 109 ns 109 ns 6441045 +bm_rtl::method____ErasedTargetType::set_string 109 ns 109 ns 6430367 +bm_rtl::method____ErasedTargetAndReturnType::set_string 110 ns 110 ns 6367909 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 115 ns 116 ns 6045433 +bm_call::direct__Function::get_string 141 ns 141 ns 4992850 -bm_call::via_function_ptr__Function::get_string 115 ns 115 ns 6052590 -bm_call::via_function_ptr____Method::get_string 115 ns 115 ns 6090268 +bm_call::via_function_ptr__Function::get_string 141 ns 141 ns 4947770 +bm_call::via_function_ptr____Method::get_string 140 ns 140 ns 5010278 -bm_std::function_calls__Function::get_string 115 ns 115 ns 6074354 -bm_std::function_calls____Method::get_string 115 ns 115 ns 6102339 +bm_std::function_calls__Function::get_string 141 ns 141 ns 4978328 +bm_std::function_calls____Method::get_string 141 ns 141 ns 4892890 -bm_rtl::function_calls__Function::get_string 115 ns 115 ns 6077686 -bm_rtl::method_calls______Method::get_string 115 ns 115 ns 6086147 +bm_rtl::function_calls__Function::get_string 141 ns 141 ns 4969715 +bm_rtl::method_calls______Method::get_string 140 ns 140 ns 4989739 -bm_rtl::function__ErasedReturnType::get_string 125 ns 125 ns 5583022 -bm_rtl::method____ErasedReturnType::get_string 125 ns 125 ns 5606210 -bm_rtl::method____ErasedTargetType::get_string 116 ns 116 ns 6030406 -bm_rtl::method____ErasedTargetAndReturnType::get_string 127 ns 127 ns 5496168 +bm_rtl::function__ErasedReturnType::get_string 150 ns 150 ns 4643950 +bm_rtl::method____ErasedReturnType::get_string 150 ns 150 ns 4635435 +bm_rtl::method____ErasedTargetType::get_string 143 ns 143 ns 4896326 +bm_rtl::method____ErasedTargetAndReturnType::get_string 151 ns 151 ns 4619363 ----------------------------------- -[2025-11-04 11:31:28] >>> Run 2: workload scale = 5 +[2026-01-19 22:19:58] >>> Run 2: workload scale = 5 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 5 iterations ============================================= -2025-11-04T11:31:28+05:30 +2026-01-19T22:19:58+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -476,101 +476,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 0.61, 0.26 +Load Average: 0.98, 0.71, 0.34 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 93.9 ns 93.9 ns 7413892 +bm_call::direct__Function::set_string 103 ns 103 ns 6802745 -bm_call::via_function_ptr__Function::set_string 93.6 ns 93.6 ns 7458233 -bm_call::via_function_ptr____Method::set_string 93.6 ns 93.6 ns 7470144 +bm_call::via_function_ptr__Function::set_string 105 ns 105 ns 6625968 +bm_call::via_function_ptr____Method::set_string 105 ns 105 ns 6695044 -bm_std::function_calls__Function::set_string 93.7 ns 93.7 ns 7426724 -bm_std::function_calls____Method::set_string 94.1 ns 94.1 ns 7412709 +bm_std::function_calls__Function::set_string 105 ns 105 ns 6624223 +bm_std::function_calls____Method::set_string 105 ns 105 ns 6663752 -bm_rtl::function_calls__Function::set_string 93.7 ns 93.7 ns 7485217 -bm_rtl::method_calls______Method::set_string 94.1 ns 94.1 ns 7455729 +bm_rtl::function_calls__Function::set_string 105 ns 105 ns 6681833 +bm_rtl::method_calls______Method::set_string 105 ns 105 ns 6668827 -bm_rtl::function__ErasedReturnType::set_string 95.7 ns 95.7 ns 7312618 -bm_rtl::method____ErasedReturnType::set_string 96.7 ns 96.7 ns 7219262 -bm_rtl::method____ErasedTargetType::set_string 97.6 ns 97.6 ns 7145010 -bm_rtl::method____ErasedTargetAndReturnType::set_string 103 ns 103 ns 6807671 +bm_rtl::function__ErasedReturnType::set_string 107 ns 107 ns 6536747 +bm_rtl::method____ErasedReturnType::set_string 107 ns 107 ns 6504031 +bm_rtl::method____ErasedTargetType::set_string 108 ns 108 ns 6469742 +bm_rtl::method____ErasedTargetAndReturnType::set_string 109 ns 109 ns 6479236 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 116 ns 116 ns 6072780 +bm_call::direct__Function::get_string 123 ns 123 ns 5698362 -bm_call::via_function_ptr__Function::get_string 115 ns 115 ns 6034419 -bm_call::via_function_ptr____Method::get_string 115 ns 115 ns 6080424 +bm_call::via_function_ptr__Function::get_string 123 ns 123 ns 5718997 +bm_call::via_function_ptr____Method::get_string 122 ns 122 ns 5745089 -bm_std::function_calls__Function::get_string 115 ns 115 ns 6047388 -bm_std::function_calls____Method::get_string 115 ns 115 ns 6093462 +bm_std::function_calls__Function::get_string 123 ns 123 ns 5703641 +bm_std::function_calls____Method::get_string 122 ns 122 ns 5715659 -bm_rtl::function_calls__Function::get_string 115 ns 115 ns 6097576 -bm_rtl::method_calls______Method::get_string 115 ns 115 ns 6098871 +bm_rtl::function_calls__Function::get_string 123 ns 123 ns 5702709 +bm_rtl::method_calls______Method::get_string 123 ns 123 ns 5717900 -bm_rtl::function__ErasedReturnType::get_string 125 ns 125 ns 5597537 -bm_rtl::method____ErasedReturnType::get_string 126 ns 126 ns 5581065 -bm_rtl::method____ErasedTargetType::get_string 116 ns 116 ns 6036900 -bm_rtl::method____ErasedTargetAndReturnType::get_string 127 ns 127 ns 5516757 +bm_rtl::function__ErasedReturnType::get_string 131 ns 131 ns 5383228 +bm_rtl::method____ErasedReturnType::get_string 130 ns 130 ns 5398546 +bm_rtl::method____ErasedTargetType::get_string 125 ns 125 ns 5610784 +bm_rtl::method____ErasedTargetAndReturnType::get_string 132 ns 132 ns 5317235 ----------------------------------- -[2025-11-04 11:31:46] >>> Run 3: workload scale = 5 +[2026-01-19 22:20:16] >>> Run 3: workload scale = 5 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 5 iterations ============================================= -2025-11-04T11:31:46+05:30 +2026-01-19T22:20:16+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 1814.12 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 0.63, 0.27 +Load Average: 0.99, 0.73, 0.35 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 94.4 ns 94.4 ns 7268124 +bm_call::direct__Function::set_string 103 ns 103 ns 6759777 -bm_call::via_function_ptr__Function::set_string 94.2 ns 94.2 ns 7461840 -bm_call::via_function_ptr____Method::set_string 94.2 ns 94.2 ns 7427933 +bm_call::via_function_ptr__Function::set_string 105 ns 105 ns 6599680 +bm_call::via_function_ptr____Method::set_string 105 ns 105 ns 6637960 -bm_std::function_calls__Function::set_string 94.5 ns 94.5 ns 7422218 -bm_std::function_calls____Method::set_string 94.6 ns 94.6 ns 7430982 +bm_std::function_calls__Function::set_string 105 ns 105 ns 6634870 +bm_std::function_calls____Method::set_string 105 ns 105 ns 6629614 -bm_rtl::function_calls__Function::set_string 94.5 ns 94.5 ns 7430754 -bm_rtl::method_calls______Method::set_string 94.7 ns 94.8 ns 7407535 +bm_rtl::function_calls__Function::set_string 105 ns 105 ns 6700534 +bm_rtl::method_calls______Method::set_string 105 ns 105 ns 6641565 -bm_rtl::function__ErasedReturnType::set_string 96.1 ns 96.1 ns 7196656 -bm_rtl::method____ErasedReturnType::set_string 96.9 ns 96.9 ns 7211863 -bm_rtl::method____ErasedTargetType::set_string 97.0 ns 97.0 ns 7195465 -bm_rtl::method____ErasedTargetAndReturnType::set_string 102 ns 102 ns 6818975 +bm_rtl::function__ErasedReturnType::set_string 107 ns 107 ns 6489816 +bm_rtl::method____ErasedReturnType::set_string 107 ns 107 ns 6457036 +bm_rtl::method____ErasedTargetType::set_string 108 ns 108 ns 6480403 +bm_rtl::method____ErasedTargetAndReturnType::set_string 109 ns 109 ns 6477196 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 115 ns 115 ns 6065805 +bm_call::direct__Function::get_string 123 ns 123 ns 5671951 -bm_call::via_function_ptr__Function::get_string 115 ns 115 ns 6096645 -bm_call::via_function_ptr____Method::get_string 115 ns 115 ns 6071541 +bm_call::via_function_ptr__Function::get_string 123 ns 123 ns 5695007 +bm_call::via_function_ptr____Method::get_string 123 ns 123 ns 5701825 -bm_std::function_calls__Function::get_string 116 ns 116 ns 6047175 -bm_std::function_calls____Method::get_string 115 ns 115 ns 6060394 +bm_std::function_calls__Function::get_string 123 ns 123 ns 5623063 +bm_std::function_calls____Method::get_string 122 ns 122 ns 5746720 -bm_rtl::function_calls__Function::get_string 115 ns 115 ns 6075944 -bm_rtl::method_calls______Method::get_string 115 ns 115 ns 6079330 +bm_rtl::function_calls__Function::get_string 123 ns 123 ns 5685952 +bm_rtl::method_calls______Method::get_string 122 ns 122 ns 5737821 -bm_rtl::function__ErasedReturnType::get_string 125 ns 125 ns 5584045 -bm_rtl::method____ErasedReturnType::get_string 126 ns 126 ns 5557081 -bm_rtl::method____ErasedTargetType::get_string 117 ns 117 ns 5989672 -bm_rtl::method____ErasedTargetAndReturnType::get_string 128 ns 128 ns 5499308 +bm_rtl::function__ErasedReturnType::get_string 130 ns 130 ns 5363587 +bm_rtl::method____ErasedReturnType::get_string 130 ns 130 ns 5405976 +bm_rtl::method____ErasedTargetType::get_string 125 ns 125 ns 5623858 +bm_rtl::method____ErasedTargetAndReturnType::get_string 132 ns 132 ns 5294497 ----------------------------------- -[2025-11-04 11:32:04] >>> Run 1: workload scale = 10 +[2026-01-19 22:20:35] >>> Run 1: workload scale = 10 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 10 iterations ============================================= -2025-11-04T11:32:04+05:30 +2026-01-19T22:20:35+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -578,152 +578,152 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.65, 0.29 +Load Average: 0.99, 0.75, 0.37 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 161 ns 161 ns 4332878 +bm_call::direct__Function::set_string 180 ns 180 ns 3892288 -bm_call::via_function_ptr__Function::set_string 161 ns 161 ns 4416633 -bm_call::via_function_ptr____Method::set_string 160 ns 160 ns 4399361 +bm_call::via_function_ptr__Function::set_string 175 ns 175 ns 4013942 +bm_call::via_function_ptr____Method::set_string 175 ns 175 ns 4038326 -bm_std::function_calls__Function::set_string 161 ns 161 ns 4305144 -bm_std::function_calls____Method::set_string 161 ns 161 ns 4342427 +bm_std::function_calls__Function::set_string 175 ns 175 ns 4011236 +bm_std::function_calls____Method::set_string 176 ns 176 ns 3969974 -bm_rtl::function_calls__Function::set_string 161 ns 161 ns 4357679 -bm_rtl::method_calls______Method::set_string 160 ns 160 ns 4336485 +bm_rtl::function_calls__Function::set_string 175 ns 175 ns 4008955 +bm_rtl::method_calls______Method::set_string 175 ns 175 ns 4005545 -bm_rtl::function__ErasedReturnType::set_string 164 ns 164 ns 4290751 -bm_rtl::method____ErasedReturnType::set_string 164 ns 164 ns 4305488 -bm_rtl::method____ErasedTargetType::set_string 165 ns 165 ns 4271135 -bm_rtl::method____ErasedTargetAndReturnType::set_string 171 ns 171 ns 4087737 +bm_rtl::function__ErasedReturnType::set_string 178 ns 178 ns 3913334 +bm_rtl::method____ErasedReturnType::set_string 178 ns 178 ns 3957340 +bm_rtl::method____ErasedTargetType::set_string 178 ns 178 ns 3958988 +bm_rtl::method____ErasedTargetAndReturnType::set_string 179 ns 179 ns 3910029 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 209 ns 209 ns 3342955 +bm_call::direct__Function::get_string 236 ns 236 ns 2973260 -bm_call::via_function_ptr__Function::get_string 210 ns 210 ns 3341236 -bm_call::via_function_ptr____Method::get_string 209 ns 209 ns 3340519 +bm_call::via_function_ptr__Function::get_string 236 ns 236 ns 2986989 +bm_call::via_function_ptr____Method::get_string 235 ns 235 ns 2980300 -bm_std::function_calls__Function::get_string 209 ns 209 ns 3329193 -bm_std::function_calls____Method::get_string 209 ns 209 ns 3334552 +bm_std::function_calls__Function::get_string 236 ns 235 ns 2959537 +bm_std::function_calls____Method::get_string 236 ns 236 ns 2952611 -bm_rtl::function_calls__Function::get_string 210 ns 210 ns 3341471 -bm_rtl::method_calls______Method::get_string 210 ns 210 ns 3317212 +bm_rtl::function_calls__Function::get_string 235 ns 235 ns 2982781 +bm_rtl::method_calls______Method::get_string 236 ns 236 ns 2962352 -bm_rtl::function__ErasedReturnType::get_string 217 ns 217 ns 3257317 -bm_rtl::method____ErasedReturnType::get_string 218 ns 218 ns 3238960 -bm_rtl::method____ErasedTargetType::get_string 212 ns 212 ns 3304550 -bm_rtl::method____ErasedTargetAndReturnType::get_string 218 ns 218 ns 3228561 +bm_rtl::function__ErasedReturnType::get_string 241 ns 241 ns 2897516 +bm_rtl::method____ErasedReturnType::get_string 242 ns 242 ns 2911112 +bm_rtl::method____ErasedTargetType::get_string 239 ns 240 ns 2930612 +bm_rtl::method____ErasedTargetAndReturnType::get_string 242 ns 242 ns 2885077 ----------------------------------- -[2025-11-04 11:32:24] >>> Run 2: workload scale = 10 +[2026-01-19 22:20:55] >>> Run 2: workload scale = 10 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 10 iterations ============================================= -2025-11-04T11:32:24+05:30 +2026-01-19T22:20:55+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2413.91 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.67, 0.30 +Load Average: 1.00, 0.77, 0.38 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 163 ns 163 ns 4302963 +bm_call::direct__Function::set_string 165 ns 165 ns 4275197 -bm_call::via_function_ptr__Function::set_string 164 ns 164 ns 4290635 -bm_call::via_function_ptr____Method::set_string 164 ns 164 ns 4255706 +bm_call::via_function_ptr__Function::set_string 168 ns 168 ns 4170135 +bm_call::via_function_ptr____Method::set_string 167 ns 167 ns 4163825 -bm_std::function_calls__Function::set_string 163 ns 163 ns 4297600 -bm_std::function_calls____Method::set_string 163 ns 163 ns 4369051 +bm_std::function_calls__Function::set_string 169 ns 169 ns 4159852 +bm_std::function_calls____Method::set_string 170 ns 170 ns 4124142 -bm_rtl::function_calls__Function::set_string 163 ns 163 ns 4271991 -bm_rtl::method_calls______Method::set_string 163 ns 163 ns 4317493 +bm_rtl::function_calls__Function::set_string 169 ns 169 ns 4126732 +bm_rtl::method_calls______Method::set_string 169 ns 169 ns 4134774 -bm_rtl::function__ErasedReturnType::set_string 165 ns 165 ns 4257845 -bm_rtl::method____ErasedReturnType::set_string 164 ns 164 ns 4253764 -bm_rtl::method____ErasedTargetType::set_string 167 ns 167 ns 4215960 -bm_rtl::method____ErasedTargetAndReturnType::set_string 173 ns 173 ns 4066978 +bm_rtl::function__ErasedReturnType::set_string 172 ns 172 ns 4038085 +bm_rtl::method____ErasedReturnType::set_string 171 ns 171 ns 4105946 +bm_rtl::method____ErasedTargetType::set_string 171 ns 171 ns 4105870 +bm_rtl::method____ErasedTargetAndReturnType::set_string 178 ns 178 ns 3951279 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 211 ns 211 ns 3342799 +bm_call::direct__Function::get_string 207 ns 207 ns 3403062 -bm_call::via_function_ptr__Function::get_string 210 ns 210 ns 3344684 -bm_call::via_function_ptr____Method::get_string 212 ns 212 ns 3308560 +bm_call::via_function_ptr__Function::get_string 206 ns 206 ns 3379512 +bm_call::via_function_ptr____Method::get_string 206 ns 206 ns 3363220 -bm_std::function_calls__Function::get_string 211 ns 211 ns 3330519 -bm_std::function_calls____Method::get_string 211 ns 211 ns 3300133 +bm_std::function_calls__Function::get_string 206 ns 206 ns 3434973 +bm_std::function_calls____Method::get_string 205 ns 205 ns 3398931 -bm_rtl::function_calls__Function::get_string 211 ns 211 ns 3302953 -bm_rtl::method_calls______Method::get_string 212 ns 212 ns 3298514 +bm_rtl::function_calls__Function::get_string 206 ns 206 ns 3390234 +bm_rtl::method_calls______Method::get_string 205 ns 205 ns 3428973 -bm_rtl::function__ErasedReturnType::get_string 218 ns 218 ns 3215137 -bm_rtl::method____ErasedReturnType::get_string 219 ns 219 ns 3201579 -bm_rtl::method____ErasedTargetType::get_string 214 ns 214 ns 3298595 -bm_rtl::method____ErasedTargetAndReturnType::get_string 219 ns 219 ns 3203336 +bm_rtl::function__ErasedReturnType::get_string 212 ns 212 ns 3290226 +bm_rtl::method____ErasedReturnType::get_string 213 ns 213 ns 3308638 +bm_rtl::method____ErasedTargetType::get_string 213 ns 213 ns 3278298 +bm_rtl::method____ErasedTargetAndReturnType::get_string 213 ns 213 ns 3265716 ----------------------------------- -[2025-11-04 11:32:44] >>> Run 3: workload scale = 10 +[2026-01-19 22:21:15] >>> Run 3: workload scale = 10 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 10 iterations ============================================= -2025-11-04T11:32:44+05:30 +2026-01-19T22:21:15+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4877.87 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.70, 0.32 +Load Average: 1.00, 0.78, 0.40 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 162 ns 162 ns 4338121 +bm_call::direct__Function::set_string 165 ns 165 ns 4267506 -bm_call::via_function_ptr__Function::set_string 163 ns 163 ns 4377872 -bm_call::via_function_ptr____Method::set_string 161 ns 161 ns 4352982 +bm_call::via_function_ptr__Function::set_string 160 ns 160 ns 4395709 +bm_call::via_function_ptr____Method::set_string 159 ns 159 ns 4430252 -bm_std::function_calls__Function::set_string 161 ns 161 ns 4421243 -bm_std::function_calls____Method::set_string 161 ns 161 ns 4359250 +bm_std::function_calls__Function::set_string 159 ns 159 ns 4404565 +bm_std::function_calls____Method::set_string 160 ns 160 ns 4313674 -bm_rtl::function_calls__Function::set_string 161 ns 161 ns 4315918 -bm_rtl::method_calls______Method::set_string 161 ns 161 ns 4328071 +bm_rtl::function_calls__Function::set_string 160 ns 160 ns 4373147 +bm_rtl::method_calls______Method::set_string 159 ns 159 ns 4369703 -bm_rtl::function__ErasedReturnType::set_string 164 ns 164 ns 4284932 -bm_rtl::method____ErasedReturnType::set_string 164 ns 164 ns 4272614 -bm_rtl::method____ErasedTargetType::set_string 165 ns 165 ns 4233649 -bm_rtl::method____ErasedTargetAndReturnType::set_string 171 ns 171 ns 4102406 +bm_rtl::function__ErasedReturnType::set_string 161 ns 161 ns 4305630 +bm_rtl::method____ErasedReturnType::set_string 162 ns 162 ns 4292450 +bm_rtl::method____ErasedTargetType::set_string 161 ns 161 ns 4356887 +bm_rtl::method____ErasedTargetAndReturnType::set_string 168 ns 168 ns 4182174 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 209 ns 209 ns 3346131 +bm_call::direct__Function::get_string 204 ns 204 ns 3454724 -bm_call::via_function_ptr__Function::get_string 210 ns 210 ns 3324956 -bm_call::via_function_ptr____Method::get_string 211 ns 211 ns 3317701 +bm_call::via_function_ptr__Function::get_string 204 ns 204 ns 3439998 +bm_call::via_function_ptr____Method::get_string 205 ns 205 ns 3428085 -bm_std::function_calls__Function::get_string 210 ns 210 ns 3332691 -bm_std::function_calls____Method::get_string 210 ns 210 ns 3329162 +bm_std::function_calls__Function::get_string 204 ns 204 ns 3444872 +bm_std::function_calls____Method::get_string 205 ns 205 ns 3434997 -bm_rtl::function_calls__Function::get_string 209 ns 209 ns 3294911 -bm_rtl::method_calls______Method::get_string 211 ns 211 ns 3331679 +bm_rtl::function_calls__Function::get_string 204 ns 204 ns 3420037 +bm_rtl::method_calls______Method::get_string 204 ns 204 ns 3419836 -bm_rtl::function__ErasedReturnType::get_string 215 ns 216 ns 3244227 -bm_rtl::method____ErasedReturnType::get_string 216 ns 216 ns 3251398 -bm_rtl::method____ErasedTargetType::get_string 210 ns 210 ns 3351688 -bm_rtl::method____ErasedTargetAndReturnType::get_string 216 ns 216 ns 3247038 +bm_rtl::function__ErasedReturnType::get_string 213 ns 213 ns 3283998 +bm_rtl::method____ErasedReturnType::get_string 213 ns 213 ns 3295983 +bm_rtl::method____ErasedTargetType::get_string 211 ns 211 ns 3308046 +bm_rtl::method____ErasedTargetAndReturnType::get_string 214 ns 214 ns 3280155 ----------------------------------- -[2025-11-04 11:33:04] >>> Run 1: workload scale = 15 +[2026-01-19 22:21:35] >>> Run 1: workload scale = 15 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 15 iterations ============================================= -2025-11-04T11:33:04+05:30 +2026-01-19T22:21:35+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -731,101 +731,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.72, 0.33 +Load Average: 1.00, 0.80, 0.41 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 194 ns 194 ns 3624354 +bm_call::direct__Function::set_string 213 ns 213 ns 3278456 -bm_call::via_function_ptr__Function::set_string 194 ns 194 ns 3627036 -bm_call::via_function_ptr____Method::set_string 195 ns 195 ns 3601256 +bm_call::via_function_ptr__Function::set_string 209 ns 209 ns 3352560 +bm_call::via_function_ptr____Method::set_string 209 ns 209 ns 3360691 -bm_std::function_calls__Function::set_string 194 ns 194 ns 3589830 -bm_std::function_calls____Method::set_string 194 ns 194 ns 3637376 +bm_std::function_calls__Function::set_string 209 ns 209 ns 3361073 +bm_std::function_calls____Method::set_string 210 ns 210 ns 3318972 -bm_rtl::function_calls__Function::set_string 194 ns 194 ns 3638687 -bm_rtl::method_calls______Method::set_string 195 ns 195 ns 3599993 +bm_rtl::function_calls__Function::set_string 209 ns 209 ns 3369433 +bm_rtl::method_calls______Method::set_string 209 ns 209 ns 3354692 -bm_rtl::function__ErasedReturnType::set_string 196 ns 196 ns 3578184 -bm_rtl::method____ErasedReturnType::set_string 197 ns 197 ns 3547623 -bm_rtl::method____ErasedTargetType::set_string 198 ns 198 ns 3539370 -bm_rtl::method____ErasedTargetAndReturnType::set_string 203 ns 203 ns 3430347 +bm_rtl::function__ErasedReturnType::set_string 211 ns 211 ns 3314566 +bm_rtl::method____ErasedReturnType::set_string 217 ns 217 ns 3200487 +bm_rtl::method____ErasedTargetType::set_string 210 ns 210 ns 3339407 +bm_rtl::method____ErasedTargetAndReturnType::set_string 213 ns 213 ns 3272485 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 271 ns 271 ns 2477136 +bm_call::direct__Function::get_string 290 ns 290 ns 2399152 -bm_call::via_function_ptr__Function::get_string 254 ns 254 ns 2745060 -bm_call::via_function_ptr____Method::get_string 253 ns 253 ns 2760175 +bm_call::via_function_ptr__Function::get_string 292 ns 292 ns 2391389 +bm_call::via_function_ptr____Method::get_string 294 ns 294 ns 2387165 -bm_std::function_calls__Function::get_string 253 ns 253 ns 2742774 -bm_std::function_calls____Method::get_string 253 ns 253 ns 2748295 +bm_std::function_calls__Function::get_string 292 ns 292 ns 2385012 +bm_std::function_calls____Method::get_string 293 ns 293 ns 2370217 -bm_rtl::function_calls__Function::get_string 252 ns 252 ns 2791858 -bm_rtl::method_calls______Method::get_string 252 ns 252 ns 2745882 +bm_rtl::function_calls__Function::get_string 290 ns 290 ns 2389109 +bm_rtl::method_calls______Method::get_string 291 ns 291 ns 2413141 -bm_rtl::function__ErasedReturnType::get_string 258 ns 258 ns 2714931 -bm_rtl::method____ErasedReturnType::get_string 259 ns 259 ns 2686641 -bm_rtl::method____ErasedTargetType::get_string 252 ns 252 ns 2771666 -bm_rtl::method____ErasedTargetAndReturnType::get_string 260 ns 260 ns 2687541 +bm_rtl::function__ErasedReturnType::get_string 293 ns 293 ns 2376124 +bm_rtl::method____ErasedReturnType::get_string 294 ns 294 ns 2372537 +bm_rtl::method____ErasedTargetType::get_string 296 ns 296 ns 2363057 +bm_rtl::method____ErasedTargetAndReturnType::get_string 295 ns 295 ns 2377778 ----------------------------------- -[2025-11-04 11:33:25] >>> Run 2: workload scale = 15 +[2026-01-19 22:21:57] >>> Run 2: workload scale = 15 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 15 iterations ============================================= -2025-11-04T11:33:25+05:30 +2026-01-19T22:21:57+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 799.812 MHz CPU s) +Run on (16 X 801.32 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.74, 0.35 +Load Average: 1.00, 0.81, 0.42 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 211 ns 211 ns 3320178 +bm_call::direct__Function::set_string 212 ns 212 ns 3309102 -bm_call::via_function_ptr__Function::set_string 212 ns 212 ns 3321160 -bm_call::via_function_ptr____Method::set_string 211 ns 211 ns 3335082 +bm_call::via_function_ptr__Function::set_string 207 ns 207 ns 3394006 +bm_call::via_function_ptr____Method::set_string 207 ns 207 ns 3370944 -bm_std::function_calls__Function::set_string 212 ns 212 ns 3308055 -bm_std::function_calls____Method::set_string 211 ns 211 ns 3304941 +bm_std::function_calls__Function::set_string 207 ns 207 ns 3376717 +bm_std::function_calls____Method::set_string 207 ns 207 ns 3373440 -bm_rtl::function_calls__Function::set_string 212 ns 212 ns 3304781 -bm_rtl::method_calls______Method::set_string 213 ns 213 ns 3303226 +bm_rtl::function_calls__Function::set_string 207 ns 207 ns 3397337 +bm_rtl::method_calls______Method::set_string 207 ns 207 ns 3366295 -bm_rtl::function__ErasedReturnType::set_string 214 ns 214 ns 3258122 -bm_rtl::method____ErasedReturnType::set_string 214 ns 214 ns 3264878 -bm_rtl::method____ErasedTargetType::set_string 216 ns 216 ns 3251560 -bm_rtl::method____ErasedTargetAndReturnType::set_string 218 ns 218 ns 3207293 +bm_rtl::function__ErasedReturnType::set_string 209 ns 209 ns 3341976 +bm_rtl::method____ErasedReturnType::set_string 215 ns 215 ns 3250934 +bm_rtl::method____ErasedTargetType::set_string 209 ns 209 ns 3356043 +bm_rtl::method____ErasedTargetAndReturnType::set_string 213 ns 213 ns 3302810 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 293 ns 293 ns 2384492 +bm_call::direct__Function::get_string 290 ns 290 ns 2434486 -bm_call::via_function_ptr__Function::get_string 293 ns 293 ns 2407150 -bm_call::via_function_ptr____Method::get_string 294 ns 294 ns 2380693 +bm_call::via_function_ptr__Function::get_string 290 ns 290 ns 2418544 +bm_call::via_function_ptr____Method::get_string 292 ns 292 ns 2391400 -bm_std::function_calls__Function::get_string 295 ns 295 ns 2398510 -bm_std::function_calls____Method::get_string 292 ns 292 ns 2407469 +bm_std::function_calls__Function::get_string 290 ns 290 ns 2419226 +bm_std::function_calls____Method::get_string 292 ns 292 ns 2384728 -bm_rtl::function_calls__Function::get_string 293 ns 293 ns 2396622 -bm_rtl::method_calls______Method::get_string 292 ns 292 ns 2398263 +bm_rtl::function_calls__Function::get_string 289 ns 289 ns 2421073 +bm_rtl::method_calls______Method::get_string 289 ns 289 ns 2407117 -bm_rtl::function__ErasedReturnType::get_string 297 ns 297 ns 2353980 -bm_rtl::method____ErasedReturnType::get_string 299 ns 299 ns 2337886 -bm_rtl::method____ErasedTargetType::get_string 295 ns 295 ns 2380052 -bm_rtl::method____ErasedTargetAndReturnType::get_string 302 ns 302 ns 2319651 +bm_rtl::function__ErasedReturnType::get_string 291 ns 291 ns 2407608 +bm_rtl::method____ErasedReturnType::get_string 292 ns 292 ns 2397277 +bm_rtl::method____ErasedTargetType::get_string 297 ns 297 ns 2375795 +bm_rtl::method____ErasedTargetAndReturnType::get_string 293 ns 293 ns 2389315 ----------------------------------- -[2025-11-04 11:33:46] >>> Run 3: workload scale = 15 +[2026-01-19 22:22:18] >>> Run 3: workload scale = 15 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 15 iterations ============================================= -2025-11-04T11:33:46+05:30 +2026-01-19T22:22:18+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -833,50 +833,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 0.77, 0.37 +Load Average: 1.00, 0.83, 0.44 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 194 ns 194 ns 3620973 +bm_call::direct__Function::set_string 213 ns 213 ns 3296227 -bm_call::via_function_ptr__Function::set_string 193 ns 193 ns 3638599 -bm_call::via_function_ptr____Method::set_string 193 ns 193 ns 3638008 +bm_call::via_function_ptr__Function::set_string 214 ns 214 ns 3263923 +bm_call::via_function_ptr____Method::set_string 205 ns 205 ns 3257153 -bm_std::function_calls__Function::set_string 194 ns 194 ns 3628619 -bm_std::function_calls____Method::set_string 194 ns 194 ns 3577027 +bm_std::function_calls__Function::set_string 197 ns 197 ns 3565329 +bm_std::function_calls____Method::set_string 196 ns 196 ns 3566944 -bm_rtl::function_calls__Function::set_string 194 ns 194 ns 3633217 -bm_rtl::method_calls______Method::set_string 195 ns 195 ns 3607754 +bm_rtl::function_calls__Function::set_string 197 ns 197 ns 3533127 +bm_rtl::method_calls______Method::set_string 198 ns 198 ns 3543068 -bm_rtl::function__ErasedReturnType::set_string 194 ns 194 ns 3603029 -bm_rtl::method____ErasedReturnType::set_string 196 ns 196 ns 3592022 -bm_rtl::method____ErasedTargetType::set_string 197 ns 197 ns 3535375 -bm_rtl::method____ErasedTargetAndReturnType::set_string 203 ns 203 ns 3455803 +bm_rtl::function__ErasedReturnType::set_string 200 ns 200 ns 3486313 +bm_rtl::method____ErasedReturnType::set_string 199 ns 199 ns 3506394 +bm_rtl::method____ErasedTargetType::set_string 201 ns 201 ns 3461289 +bm_rtl::method____ErasedTargetAndReturnType::set_string 207 ns 207 ns 3387381 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 251 ns 251 ns 2770899 +bm_call::direct__Function::get_string 255 ns 255 ns 2755617 -bm_call::via_function_ptr__Function::get_string 252 ns 252 ns 2787847 -bm_call::via_function_ptr____Method::get_string 255 ns 255 ns 2794390 +bm_call::via_function_ptr__Function::get_string 256 ns 256 ns 2766715 +bm_call::via_function_ptr____Method::get_string 255 ns 255 ns 2753165 -bm_std::function_calls__Function::get_string 252 ns 252 ns 2783053 -bm_std::function_calls____Method::get_string 254 ns 254 ns 2762588 +bm_std::function_calls__Function::get_string 254 ns 254 ns 2746618 +bm_std::function_calls____Method::get_string 254 ns 254 ns 2759317 -bm_rtl::function_calls__Function::get_string 251 ns 251 ns 2750173 -bm_rtl::method_calls______Method::get_string 254 ns 254 ns 2780142 +bm_rtl::function_calls__Function::get_string 254 ns 254 ns 2751392 +bm_rtl::method_calls______Method::get_string 255 ns 255 ns 2749046 -bm_rtl::function__ErasedReturnType::get_string 258 ns 258 ns 2713804 -bm_rtl::method____ErasedReturnType::get_string 259 ns 259 ns 2681868 -bm_rtl::method____ErasedTargetType::get_string 254 ns 254 ns 2774394 -bm_rtl::method____ErasedTargetAndReturnType::get_string 260 ns 260 ns 2703368 +bm_rtl::function__ErasedReturnType::get_string 259 ns 259 ns 2716598 +bm_rtl::method____ErasedReturnType::get_string 260 ns 260 ns 2686400 +bm_rtl::method____ErasedTargetType::get_string 260 ns 260 ns 2691016 +bm_rtl::method____ErasedTargetAndReturnType::get_string 261 ns 261 ns 2691710 ----------------------------------- -[2025-11-04 11:34:07] >>> Run 1: workload scale = 20 +[2026-01-19 22:22:39] >>> Run 1: workload scale = 20 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 20 iterations ============================================= -2025-11-04T11:34:07+05:30 +2026-01-19T22:22:39+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -884,50 +884,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 0.79, 0.38 +Load Average: 1.00, 0.84, 0.45 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 306 ns 306 ns 2290492 +bm_call::direct__Function::set_string 327 ns 327 ns 2130827 -bm_call::via_function_ptr__Function::set_string 311 ns 311 ns 2241247 -bm_call::via_function_ptr____Method::set_string 313 ns 313 ns 2234098 +bm_call::via_function_ptr__Function::set_string 297 ns 297 ns 2358942 +bm_call::via_function_ptr____Method::set_string 297 ns 297 ns 2362573 -bm_std::function_calls__Function::set_string 312 ns 312 ns 2234676 -bm_std::function_calls____Method::set_string 312 ns 312 ns 2241612 +bm_std::function_calls__Function::set_string 297 ns 297 ns 2350215 +bm_std::function_calls____Method::set_string 297 ns 297 ns 2358479 -bm_rtl::function_calls__Function::set_string 312 ns 312 ns 2253856 -bm_rtl::method_calls______Method::set_string 313 ns 313 ns 2228407 +bm_rtl::function_calls__Function::set_string 297 ns 297 ns 2357670 +bm_rtl::method_calls______Method::set_string 298 ns 298 ns 2345741 -bm_rtl::function__ErasedReturnType::set_string 308 ns 308 ns 2261970 -bm_rtl::method____ErasedReturnType::set_string 312 ns 312 ns 2245957 -bm_rtl::method____ErasedTargetType::set_string 311 ns 311 ns 2213517 -bm_rtl::method____ErasedTargetAndReturnType::set_string 314 ns 314 ns 2241483 +bm_rtl::function__ErasedReturnType::set_string 302 ns 302 ns 2338843 +bm_rtl::method____ErasedReturnType::set_string 301 ns 301 ns 2320729 +bm_rtl::method____ErasedTargetType::set_string 302 ns 302 ns 2324269 +bm_rtl::method____ErasedTargetAndReturnType::set_string 303 ns 303 ns 2309848 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 443 ns 443 ns 1581839 +bm_call::direct__Function::get_string 423 ns 423 ns 1656887 -bm_call::via_function_ptr__Function::get_string 451 ns 451 ns 1548794 -bm_call::via_function_ptr____Method::get_string 452 ns 452 ns 1550466 +bm_call::via_function_ptr__Function::get_string 421 ns 421 ns 1661981 +bm_call::via_function_ptr____Method::get_string 422 ns 422 ns 1656660 -bm_std::function_calls__Function::get_string 452 ns 452 ns 1550969 -bm_std::function_calls____Method::get_string 447 ns 447 ns 1563335 +bm_std::function_calls__Function::get_string 422 ns 422 ns 1657954 +bm_std::function_calls____Method::get_string 423 ns 423 ns 1656490 -bm_rtl::function_calls__Function::get_string 452 ns 452 ns 1551478 -bm_rtl::method_calls______Method::get_string 452 ns 452 ns 1548665 +bm_rtl::function_calls__Function::get_string 421 ns 420 ns 1661494 +bm_rtl::method_calls______Method::get_string 421 ns 421 ns 1661180 -bm_rtl::function__ErasedReturnType::get_string 459 ns 459 ns 1528761 -bm_rtl::method____ErasedReturnType::get_string 459 ns 459 ns 1522846 -bm_rtl::method____ErasedTargetType::get_string 449 ns 449 ns 1559946 -bm_rtl::method____ErasedTargetAndReturnType::get_string 468 ns 468 ns 1496384 +bm_rtl::function__ErasedReturnType::get_string 431 ns 431 ns 1619090 +bm_rtl::method____ErasedReturnType::get_string 431 ns 431 ns 1620223 +bm_rtl::method____ErasedTargetType::get_string 431 ns 431 ns 1619311 +bm_rtl::method____ErasedTargetAndReturnType::get_string 432 ns 432 ns 1616884 ----------------------------------- -[2025-11-04 11:34:32] >>> Run 2: workload scale = 20 +[2026-01-19 22:23:03] >>> Run 2: workload scale = 20 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 20 iterations ============================================= -2025-11-04T11:34:32+05:30 +2026-01-19T22:23:03+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -935,101 +935,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 0.80, 0.40 +Load Average: 1.00, 0.85, 0.47 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 272 ns 272 ns 2558705 +bm_call::direct__Function::set_string 328 ns 328 ns 2133046 -bm_call::via_function_ptr__Function::set_string 272 ns 272 ns 2566816 -bm_call::via_function_ptr____Method::set_string 273 ns 273 ns 2560637 +bm_call::via_function_ptr__Function::set_string 297 ns 297 ns 2336742 +bm_call::via_function_ptr____Method::set_string 297 ns 297 ns 2330893 -bm_std::function_calls__Function::set_string 270 ns 270 ns 2573221 -bm_std::function_calls____Method::set_string 273 ns 273 ns 2573250 +bm_std::function_calls__Function::set_string 299 ns 299 ns 2338388 +bm_std::function_calls____Method::set_string 299 ns 299 ns 2361470 -bm_rtl::function_calls__Function::set_string 272 ns 272 ns 2575772 -bm_rtl::method_calls______Method::set_string 274 ns 274 ns 2567684 +bm_rtl::function_calls__Function::set_string 299 ns 299 ns 2355328 +bm_rtl::method_calls______Method::set_string 299 ns 299 ns 2354178 -bm_rtl::function__ErasedReturnType::set_string 276 ns 276 ns 2525378 -bm_rtl::method____ErasedReturnType::set_string 277 ns 277 ns 2554199 -bm_rtl::method____ErasedTargetType::set_string 275 ns 275 ns 2561448 -bm_rtl::method____ErasedTargetAndReturnType::set_string 282 ns 282 ns 2483219 +bm_rtl::function__ErasedReturnType::set_string 309 ns 309 ns 2248700 +bm_rtl::method____ErasedReturnType::set_string 307 ns 307 ns 2263835 +bm_rtl::method____ErasedTargetType::set_string 305 ns 305 ns 2290845 +bm_rtl::method____ErasedTargetAndReturnType::set_string 309 ns 309 ns 2270160 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 381 ns 381 ns 1842934 +bm_call::direct__Function::get_string 420 ns 420 ns 1667713 -bm_call::via_function_ptr__Function::get_string 386 ns 386 ns 1819888 -bm_call::via_function_ptr____Method::get_string 384 ns 384 ns 1818988 +bm_call::via_function_ptr__Function::get_string 419 ns 419 ns 1665420 +bm_call::via_function_ptr____Method::get_string 420 ns 420 ns 1661441 -bm_std::function_calls__Function::get_string 385 ns 385 ns 1814239 -bm_std::function_calls____Method::get_string 386 ns 386 ns 1810637 +bm_std::function_calls__Function::get_string 420 ns 420 ns 1665206 +bm_std::function_calls____Method::get_string 423 ns 423 ns 1659447 -bm_rtl::function_calls__Function::get_string 385 ns 385 ns 1821229 -bm_rtl::method_calls______Method::get_string 387 ns 387 ns 1815740 +bm_rtl::function_calls__Function::get_string 419 ns 419 ns 1666035 +bm_rtl::method_calls______Method::get_string 419 ns 419 ns 1667963 -bm_rtl::function__ErasedReturnType::get_string 401 ns 401 ns 1742383 -bm_rtl::method____ErasedReturnType::get_string 402 ns 402 ns 1744796 -bm_rtl::method____ErasedTargetType::get_string 391 ns 391 ns 1786914 -bm_rtl::method____ErasedTargetAndReturnType::get_string 402 ns 403 ns 1734389 +bm_rtl::function__ErasedReturnType::get_string 431 ns 431 ns 1622118 +bm_rtl::method____ErasedReturnType::get_string 433 ns 432 ns 1624592 +bm_rtl::method____ErasedTargetType::get_string 431 ns 430 ns 1630012 +bm_rtl::method____ErasedTargetAndReturnType::get_string 433 ns 433 ns 1616972 ----------------------------------- -[2025-11-04 11:34:55] >>> Run 3: workload scale = 20 +[2026-01-19 22:23:28] >>> Run 3: workload scale = 20 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 20 iterations ============================================= -2025-11-04T11:34:55+05:30 +2026-01-19T22:23:28+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1003.07 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 0.82, 0.42 +Load Average: 1.00, 0.87, 0.48 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 273 ns 273 ns 2555885 +bm_call::direct__Function::set_string 290 ns 290 ns 2424105 -bm_call::via_function_ptr__Function::set_string 273 ns 273 ns 2520891 -bm_call::via_function_ptr____Method::set_string 273 ns 273 ns 2549459 +bm_call::via_function_ptr__Function::set_string 268 ns 268 ns 2627333 +bm_call::via_function_ptr____Method::set_string 266 ns 266 ns 2656460 -bm_std::function_calls__Function::set_string 273 ns 273 ns 2576378 -bm_std::function_calls____Method::set_string 273 ns 273 ns 2571194 +bm_std::function_calls__Function::set_string 264 ns 264 ns 2608421 +bm_std::function_calls____Method::set_string 268 ns 268 ns 2624303 -bm_rtl::function_calls__Function::set_string 274 ns 274 ns 2506842 -bm_rtl::method_calls______Method::set_string 274 ns 274 ns 2574283 +bm_rtl::function_calls__Function::set_string 264 ns 264 ns 2641920 +bm_rtl::method_calls______Method::set_string 264 ns 264 ns 2648786 -bm_rtl::function__ErasedReturnType::set_string 278 ns 278 ns 2531104 -bm_rtl::method____ErasedReturnType::set_string 275 ns 275 ns 2543654 -bm_rtl::method____ErasedTargetType::set_string 274 ns 274 ns 2532744 -bm_rtl::method____ErasedTargetAndReturnType::set_string 284 ns 284 ns 2459606 +bm_rtl::function__ErasedReturnType::set_string 270 ns 270 ns 2603193 +bm_rtl::method____ErasedReturnType::set_string 274 ns 274 ns 2555196 +bm_rtl::method____ErasedTargetType::set_string 270 ns 270 ns 2629662 +bm_rtl::method____ErasedTargetAndReturnType::set_string 275 ns 275 ns 2558749 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 384 ns 384 ns 1816058 +bm_call::direct__Function::get_string 365 ns 365 ns 1916083 -bm_call::via_function_ptr__Function::get_string 388 ns 388 ns 1807084 -bm_call::via_function_ptr____Method::get_string 388 ns 388 ns 1802275 +bm_call::via_function_ptr__Function::get_string 365 ns 365 ns 1921180 +bm_call::via_function_ptr____Method::get_string 366 ns 366 ns 1904972 -bm_std::function_calls__Function::get_string 386 ns 386 ns 1800274 -bm_std::function_calls____Method::get_string 387 ns 387 ns 1809751 +bm_std::function_calls__Function::get_string 365 ns 365 ns 1911332 +bm_std::function_calls____Method::get_string 368 ns 368 ns 1884370 -bm_rtl::function_calls__Function::get_string 388 ns 388 ns 1809043 -bm_rtl::method_calls______Method::get_string 388 ns 388 ns 1807297 +bm_rtl::function_calls__Function::get_string 366 ns 366 ns 1923206 +bm_rtl::method_calls______Method::get_string 366 ns 366 ns 1908881 -bm_rtl::function__ErasedReturnType::get_string 403 ns 403 ns 1733679 -bm_rtl::method____ErasedReturnType::get_string 402 ns 402 ns 1738530 -bm_rtl::method____ErasedTargetType::get_string 392 ns 392 ns 1778195 -bm_rtl::method____ErasedTargetAndReturnType::get_string 404 ns 404 ns 1736458 +bm_rtl::function__ErasedReturnType::get_string 375 ns 375 ns 1863335 +bm_rtl::method____ErasedReturnType::get_string 375 ns 375 ns 1858239 +bm_rtl::method____ErasedTargetType::get_string 376 ns 376 ns 1870789 +bm_rtl::method____ErasedTargetAndReturnType::get_string 378 ns 378 ns 1847908 ----------------------------------- -[2025-11-04 11:35:19] >>> Run 1: workload scale = 25 +[2026-01-19 22:23:51] >>> Run 1: workload scale = 25 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 25 iterations ============================================= -2025-11-04T11:35:19+05:30 +2026-01-19T22:23:51+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1037,50 +1037,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 0.84, 0.43 +Load Average: 1.00, 0.88, 0.50 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 308 ns 308 ns 2289455 +bm_call::direct__Function::set_string 329 ns 329 ns 2137193 -bm_call::via_function_ptr__Function::set_string 308 ns 308 ns 2295086 -bm_call::via_function_ptr____Method::set_string 305 ns 305 ns 2282996 +bm_call::via_function_ptr__Function::set_string 314 ns 314 ns 2240187 +bm_call::via_function_ptr____Method::set_string 314 ns 314 ns 2262194 -bm_std::function_calls__Function::set_string 306 ns 306 ns 2287656 -bm_std::function_calls____Method::set_string 305 ns 305 ns 2290493 +bm_std::function_calls__Function::set_string 309 ns 309 ns 2250921 +bm_std::function_calls____Method::set_string 306 ns 306 ns 2305127 -bm_rtl::function_calls__Function::set_string 306 ns 306 ns 2293649 -bm_rtl::method_calls______Method::set_string 308 ns 308 ns 2263061 +bm_rtl::function_calls__Function::set_string 311 ns 311 ns 2239465 +bm_rtl::method_calls______Method::set_string 310 ns 310 ns 2237918 -bm_rtl::function__ErasedReturnType::set_string 310 ns 310 ns 2270433 -bm_rtl::method____ErasedReturnType::set_string 322 ns 322 ns 2184471 -bm_rtl::method____ErasedTargetType::set_string 311 ns 311 ns 2252261 -bm_rtl::method____ErasedTargetAndReturnType::set_string 318 ns 318 ns 2177221 +bm_rtl::function__ErasedReturnType::set_string 317 ns 317 ns 2168950 +bm_rtl::method____ErasedReturnType::set_string 305 ns 305 ns 2289661 +bm_rtl::method____ErasedTargetType::set_string 324 ns 324 ns 2180611 +bm_rtl::method____ErasedTargetAndReturnType::set_string 324 ns 324 ns 2167254 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 449 ns 449 ns 1556063 +bm_call::direct__Function::get_string 425 ns 425 ns 1646554 -bm_call::via_function_ptr__Function::get_string 449 ns 449 ns 1558473 -bm_call::via_function_ptr____Method::get_string 450 ns 450 ns 1553390 +bm_call::via_function_ptr__Function::get_string 428 ns 428 ns 1646159 +bm_call::via_function_ptr____Method::get_string 425 ns 425 ns 1640333 -bm_std::function_calls__Function::get_string 451 ns 451 ns 1557283 -bm_std::function_calls____Method::get_string 452 ns 452 ns 1544521 +bm_std::function_calls__Function::get_string 427 ns 427 ns 1644658 +bm_std::function_calls____Method::get_string 427 ns 427 ns 1645683 -bm_rtl::function_calls__Function::get_string 451 ns 451 ns 1549646 -bm_rtl::method_calls______Method::get_string 450 ns 450 ns 1547760 +bm_rtl::function_calls__Function::get_string 426 ns 426 ns 1647963 +bm_rtl::method_calls______Method::get_string 435 ns 435 ns 1609578 -bm_rtl::function__ErasedReturnType::get_string 468 ns 468 ns 1489242 -bm_rtl::method____ErasedReturnType::get_string 469 ns 469 ns 1493530 -bm_rtl::method____ErasedTargetType::get_string 457 ns 457 ns 1534035 -bm_rtl::method____ErasedTargetAndReturnType::get_string 471 ns 471 ns 1482462 +bm_rtl::function__ErasedReturnType::get_string 436 ns 436 ns 1607688 +bm_rtl::method____ErasedReturnType::get_string 437 ns 437 ns 1609148 +bm_rtl::method____ErasedTargetType::get_string 438 ns 438 ns 1604011 +bm_rtl::method____ErasedTargetAndReturnType::get_string 438 ns 438 ns 1600233 ----------------------------------- -[2025-11-04 11:35:44] >>> Run 2: workload scale = 25 +[2026-01-19 22:24:15] >>> Run 2: workload scale = 25 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 25 iterations ============================================= -2025-11-04T11:35:44+05:30 +2026-01-19T22:24:16+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1088,50 +1088,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 0.85, 0.45 +Load Average: 1.00, 0.89, 0.51 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 310 ns 310 ns 2249513 +bm_call::direct__Function::set_string 361 ns 361 ns 1941242 -bm_call::via_function_ptr__Function::set_string 309 ns 309 ns 2268930 -bm_call::via_function_ptr____Method::set_string 311 ns 311 ns 2250980 +bm_call::via_function_ptr__Function::set_string 346 ns 346 ns 2027125 +bm_call::via_function_ptr____Method::set_string 346 ns 346 ns 2031783 -bm_std::function_calls__Function::set_string 310 ns 310 ns 2266376 -bm_std::function_calls____Method::set_string 310 ns 310 ns 2268158 +bm_std::function_calls__Function::set_string 347 ns 347 ns 2034513 +bm_std::function_calls____Method::set_string 341 ns 341 ns 2049239 -bm_rtl::function_calls__Function::set_string 312 ns 312 ns 2263713 -bm_rtl::method_calls______Method::set_string 310 ns 310 ns 2262103 +bm_rtl::function_calls__Function::set_string 347 ns 347 ns 2018577 +bm_rtl::method_calls______Method::set_string 346 ns 346 ns 2020807 -bm_rtl::function__ErasedReturnType::set_string 315 ns 315 ns 2229881 -bm_rtl::method____ErasedReturnType::set_string 315 ns 315 ns 2221153 -bm_rtl::method____ErasedTargetType::set_string 311 ns 311 ns 2246314 -bm_rtl::method____ErasedTargetAndReturnType::set_string 321 ns 321 ns 2167043 +bm_rtl::function__ErasedReturnType::set_string 357 ns 357 ns 1960365 +bm_rtl::method____ErasedReturnType::set_string 344 ns 344 ns 2030461 +bm_rtl::method____ErasedTargetType::set_string 359 ns 359 ns 1955218 +bm_rtl::method____ErasedTargetAndReturnType::set_string 358 ns 358 ns 1947898 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 448 ns 448 ns 1561857 +bm_call::direct__Function::get_string 484 ns 484 ns 1444771 -bm_call::via_function_ptr__Function::get_string 448 ns 448 ns 1559884 -bm_call::via_function_ptr____Method::get_string 450 ns 450 ns 1556156 +bm_call::via_function_ptr__Function::get_string 486 ns 486 ns 1441287 +bm_call::via_function_ptr____Method::get_string 485 ns 485 ns 1446433 -bm_std::function_calls__Function::get_string 447 ns 447 ns 1561230 -bm_std::function_calls____Method::get_string 451 ns 451 ns 1549786 +bm_std::function_calls__Function::get_string 487 ns 487 ns 1441524 +bm_std::function_calls____Method::get_string 487 ns 487 ns 1433549 -bm_rtl::function_calls__Function::get_string 448 ns 448 ns 1563251 -bm_rtl::method_calls______Method::get_string 450 ns 450 ns 1554882 +bm_rtl::function_calls__Function::get_string 487 ns 487 ns 1436284 +bm_rtl::method_calls______Method::get_string 485 ns 485 ns 1444218 -bm_rtl::function__ErasedReturnType::get_string 468 ns 468 ns 1495466 -bm_rtl::method____ErasedReturnType::get_string 468 ns 468 ns 1496289 -bm_rtl::method____ErasedTargetType::get_string 456 ns 456 ns 1536797 -bm_rtl::method____ErasedTargetAndReturnType::get_string 470 ns 470 ns 1492470 +bm_rtl::function__ErasedReturnType::get_string 498 ns 498 ns 1405236 +bm_rtl::method____ErasedReturnType::get_string 501 ns 501 ns 1399059 +bm_rtl::method____ErasedTargetType::get_string 495 ns 495 ns 1394477 +bm_rtl::method____ErasedTargetAndReturnType::get_string 501 ns 501 ns 1394723 ----------------------------------- -[2025-11-04 11:36:08] >>> Run 3: workload scale = 25 +[2026-01-19 22:24:40] >>> Run 3: workload scale = 25 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 25 iterations ============================================= -2025-11-04T11:36:08+05:30 +2026-01-19T22:24:40+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1139,50 +1139,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.86, 0.47 +Load Average: 1.00, 0.90, 0.52 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 339 ns 339 ns 2075571 +bm_call::direct__Function::set_string 317 ns 317 ns 2207040 -bm_call::via_function_ptr__Function::set_string 339 ns 339 ns 2066316 -bm_call::via_function_ptr____Method::set_string 339 ns 339 ns 2068331 +bm_call::via_function_ptr__Function::set_string 326 ns 326 ns 2156299 +bm_call::via_function_ptr____Method::set_string 326 ns 326 ns 2165496 -bm_std::function_calls__Function::set_string 339 ns 339 ns 2063704 -bm_std::function_calls____Method::set_string 340 ns 340 ns 2055163 +bm_std::function_calls__Function::set_string 326 ns 326 ns 2167831 +bm_std::function_calls____Method::set_string 326 ns 326 ns 2153224 -bm_rtl::function_calls__Function::set_string 339 ns 339 ns 2070474 -bm_rtl::method_calls______Method::set_string 338 ns 338 ns 2054751 +bm_rtl::function_calls__Function::set_string 324 ns 324 ns 2151706 +bm_rtl::method_calls______Method::set_string 326 ns 326 ns 2121751 -bm_rtl::function__ErasedReturnType::set_string 342 ns 342 ns 2041861 -bm_rtl::method____ErasedReturnType::set_string 344 ns 344 ns 2032415 -bm_rtl::method____ErasedTargetType::set_string 344 ns 344 ns 2041850 -bm_rtl::method____ErasedTargetAndReturnType::set_string 346 ns 346 ns 2021772 +bm_rtl::function__ErasedReturnType::set_string 339 ns 339 ns 2052762 +bm_rtl::method____ErasedReturnType::set_string 325 ns 325 ns 2159375 +bm_rtl::method____ErasedTargetType::set_string 344 ns 344 ns 2023497 +bm_rtl::method____ErasedTargetAndReturnType::set_string 339 ns 339 ns 2051367 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 508 ns 508 ns 1375311 +bm_call::direct__Function::get_string 438 ns 438 ns 1606262 -bm_call::via_function_ptr__Function::get_string 508 ns 508 ns 1377949 -bm_call::via_function_ptr____Method::get_string 508 ns 508 ns 1376675 +bm_call::via_function_ptr__Function::get_string 440 ns 440 ns 1578140 +bm_call::via_function_ptr____Method::get_string 439 ns 439 ns 1584218 -bm_std::function_calls__Function::get_string 509 ns 509 ns 1381695 -bm_std::function_calls____Method::get_string 509 ns 509 ns 1372143 +bm_std::function_calls__Function::get_string 439 ns 439 ns 1581952 +bm_std::function_calls____Method::get_string 452 ns 452 ns 1551649 -bm_rtl::function_calls__Function::get_string 506 ns 507 ns 1370074 -bm_rtl::method_calls______Method::get_string 509 ns 509 ns 1374760 +bm_rtl::function_calls__Function::get_string 442 ns 442 ns 1602573 +bm_rtl::method_calls______Method::get_string 440 ns 440 ns 1587330 -bm_rtl::function__ErasedReturnType::get_string 526 ns 526 ns 1335483 -bm_rtl::method____ErasedReturnType::get_string 524 ns 524 ns 1334099 -bm_rtl::method____ErasedTargetType::get_string 516 ns 516 ns 1364756 -bm_rtl::method____ErasedTargetAndReturnType::get_string 526 ns 526 ns 1332934 +bm_rtl::function__ErasedReturnType::get_string 458 ns 458 ns 1517252 +bm_rtl::method____ErasedReturnType::get_string 463 ns 463 ns 1508769 +bm_rtl::method____ErasedTargetType::get_string 455 ns 455 ns 1531543 +bm_rtl::method____ErasedTargetAndReturnType::get_string 460 ns 460 ns 1534110 ----------------------------------- -[2025-11-04 11:36:29] >>> Run 1: workload scale = 30 +[2026-01-19 22:25:05] >>> Run 1: workload scale = 30 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 30 iterations ============================================= -2025-11-04T11:36:29+05:30 +2026-01-19T22:25:05+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1190,203 +1190,203 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.87, 0.48 +Load Average: 1.00, 0.91, 0.54 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 369 ns 369 ns 1897874 +bm_call::direct__Function::set_string 426 ns 426 ns 1642971 -bm_call::via_function_ptr__Function::set_string 368 ns 368 ns 1913102 -bm_call::via_function_ptr____Method::set_string 369 ns 369 ns 1901147 +bm_call::via_function_ptr__Function::set_string 340 ns 340 ns 2060776 +bm_call::via_function_ptr____Method::set_string 340 ns 340 ns 2054856 -bm_std::function_calls__Function::set_string 367 ns 367 ns 1908243 -bm_std::function_calls____Method::set_string 370 ns 370 ns 1882990 +bm_std::function_calls__Function::set_string 342 ns 342 ns 2047289 +bm_std::function_calls____Method::set_string 356 ns 356 ns 1968053 -bm_rtl::function_calls__Function::set_string 367 ns 367 ns 1889567 -bm_rtl::method_calls______Method::set_string 367 ns 367 ns 1903609 +bm_rtl::function_calls__Function::set_string 340 ns 340 ns 2054394 +bm_rtl::method_calls______Method::set_string 342 ns 342 ns 2051463 -bm_rtl::function__ErasedReturnType::set_string 376 ns 376 ns 1862890 -bm_rtl::method____ErasedReturnType::set_string 375 ns 375 ns 1858506 -bm_rtl::method____ErasedTargetType::set_string 380 ns 380 ns 1850619 -bm_rtl::method____ErasedTargetAndReturnType::set_string 385 ns 385 ns 1836768 +bm_rtl::function__ErasedReturnType::set_string 351 ns 351 ns 1991950 +bm_rtl::method____ErasedReturnType::set_string 350 ns 350 ns 2009636 +bm_rtl::method____ErasedTargetType::set_string 353 ns 353 ns 1976671 +bm_rtl::method____ErasedTargetAndReturnType::set_string 358 ns 358 ns 1959273 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 524 ns 524 ns 1338003 +bm_call::direct__Function::get_string 493 ns 493 ns 1418974 -bm_call::via_function_ptr__Function::get_string 525 ns 525 ns 1334577 -bm_call::via_function_ptr____Method::get_string 528 ns 528 ns 1335001 +bm_call::via_function_ptr__Function::get_string 495 ns 495 ns 1415006 +bm_call::via_function_ptr____Method::get_string 495 ns 495 ns 1417840 -bm_std::function_calls__Function::get_string 526 ns 526 ns 1316735 -bm_std::function_calls____Method::get_string 533 ns 533 ns 1315542 +bm_std::function_calls__Function::get_string 495 ns 495 ns 1409827 +bm_std::function_calls____Method::get_string 498 ns 498 ns 1407422 -bm_rtl::function_calls__Function::get_string 526 ns 526 ns 1333276 -bm_rtl::method_calls______Method::get_string 526 ns 526 ns 1342865 +bm_rtl::function_calls__Function::get_string 495 ns 495 ns 1419100 +bm_rtl::method_calls______Method::get_string 496 ns 496 ns 1409543 -bm_rtl::function__ErasedReturnType::get_string 558 ns 558 ns 1248312 -bm_rtl::method____ErasedReturnType::get_string 558 ns 558 ns 1257303 -bm_rtl::method____ErasedTargetType::get_string 546 ns 546 ns 1288987 -bm_rtl::method____ErasedTargetAndReturnType::get_string 563 ns 563 ns 1246070 +bm_rtl::function__ErasedReturnType::get_string 512 ns 512 ns 1364679 +bm_rtl::method____ErasedReturnType::get_string 510 ns 510 ns 1368522 +bm_rtl::method____ErasedTargetType::get_string 510 ns 510 ns 1372916 +bm_rtl::method____ErasedTargetAndReturnType::get_string 512 ns 512 ns 1365261 ----------------------------------- -[2025-11-04 11:36:49] >>> Run 2: workload scale = 30 +[2026-01-19 22:25:28] >>> Run 2: workload scale = 30 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 30 iterations ============================================= -2025-11-04T11:36:49+05:30 +2026-01-19T22:25:28+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1873.5 MHz CPU s) +Run on (16 X 4445.26 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.88, 0.49 +Load Average: 1.00, 0.92, 0.55 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 374 ns 374 ns 1879098 +bm_call::direct__Function::set_string 433 ns 433 ns 1616498 -bm_call::via_function_ptr__Function::set_string 375 ns 375 ns 1876482 -bm_call::via_function_ptr____Method::set_string 375 ns 375 ns 1865772 +bm_call::via_function_ptr__Function::set_string 352 ns 352 ns 1985642 +bm_call::via_function_ptr____Method::set_string 353 ns 353 ns 1978449 -bm_std::function_calls__Function::set_string 374 ns 374 ns 1878401 -bm_std::function_calls____Method::set_string 373 ns 373 ns 1886366 +bm_std::function_calls__Function::set_string 353 ns 353 ns 1991516 +bm_std::function_calls____Method::set_string 371 ns 371 ns 1867726 -bm_rtl::function_calls__Function::set_string 374 ns 374 ns 1876114 -bm_rtl::method_calls______Method::set_string 375 ns 375 ns 1869158 +bm_rtl::function_calls__Function::set_string 353 ns 353 ns 1989083 +bm_rtl::method_calls______Method::set_string 354 ns 354 ns 1969449 -bm_rtl::function__ErasedReturnType::set_string 397 ns 397 ns 1760547 -bm_rtl::method____ErasedReturnType::set_string 394 ns 394 ns 1778330 -bm_rtl::method____ErasedTargetType::set_string 388 ns 388 ns 1810762 -bm_rtl::method____ErasedTargetAndReturnType::set_string 403 ns 403 ns 1736610 +bm_rtl::function__ErasedReturnType::set_string 352 ns 352 ns 1984958 +bm_rtl::method____ErasedReturnType::set_string 353 ns 353 ns 1986122 +bm_rtl::method____ErasedTargetType::set_string 354 ns 354 ns 1980813 +bm_rtl::method____ErasedTargetAndReturnType::set_string 362 ns 362 ns 1931931 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 525 ns 525 ns 1327945 +bm_call::direct__Function::get_string 510 ns 510 ns 1375075 -bm_call::via_function_ptr__Function::get_string 529 ns 529 ns 1321273 -bm_call::via_function_ptr____Method::get_string 529 ns 530 ns 1329153 +bm_call::via_function_ptr__Function::get_string 511 ns 511 ns 1390317 +bm_call::via_function_ptr____Method::get_string 510 ns 510 ns 1360743 -bm_std::function_calls__Function::get_string 528 ns 528 ns 1315558 -bm_std::function_calls____Method::get_string 532 ns 532 ns 1307079 +bm_std::function_calls__Function::get_string 511 ns 511 ns 1368314 +bm_std::function_calls____Method::get_string 518 ns 518 ns 1350815 -bm_rtl::function_calls__Function::get_string 529 ns 529 ns 1318584 -bm_rtl::method_calls______Method::get_string 531 ns 531 ns 1310759 +bm_rtl::function_calls__Function::get_string 509 ns 509 ns 1380089 +bm_rtl::method_calls______Method::get_string 508 ns 508 ns 1383110 -bm_rtl::function__ErasedReturnType::get_string 572 ns 572 ns 1222508 -bm_rtl::method____ErasedReturnType::get_string 566 ns 566 ns 1234666 -bm_rtl::method____ErasedTargetType::get_string 549 ns 549 ns 1271292 -bm_rtl::method____ErasedTargetAndReturnType::get_string 567 ns 567 ns 1236981 +bm_rtl::function__ErasedReturnType::get_string 521 ns 521 ns 1350743 +bm_rtl::method____ErasedReturnType::get_string 523 ns 523 ns 1345324 +bm_rtl::method____ErasedTargetType::get_string 517 ns 517 ns 1363384 +bm_rtl::method____ErasedTargetAndReturnType::get_string 522 ns 522 ns 1343674 ----------------------------------- -[2025-11-04 11:37:10] >>> Run 3: workload scale = 30 +[2026-01-19 22:25:49] >>> Run 3: workload scale = 30 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 30 iterations ============================================= -2025-11-04T11:37:10+05:30 +2026-01-19T22:25:49+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4884.35 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.89, 0.50 +Load Average: 1.00, 0.92, 0.56 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 373 ns 373 ns 1882535 +bm_call::direct__Function::set_string 414 ns 414 ns 1697314 -bm_call::via_function_ptr__Function::set_string 370 ns 370 ns 1883841 -bm_call::via_function_ptr____Method::set_string 370 ns 370 ns 1885110 +bm_call::via_function_ptr__Function::set_string 345 ns 345 ns 2021772 +bm_call::via_function_ptr____Method::set_string 346 ns 346 ns 2022304 -bm_std::function_calls__Function::set_string 368 ns 368 ns 1888699 -bm_std::function_calls____Method::set_string 373 ns 373 ns 1885554 +bm_std::function_calls__Function::set_string 346 ns 346 ns 2023585 +bm_std::function_calls____Method::set_string 347 ns 347 ns 2008508 -bm_rtl::function_calls__Function::set_string 370 ns 370 ns 1903630 -bm_rtl::method_calls______Method::set_string 369 ns 369 ns 1891577 +bm_rtl::function_calls__Function::set_string 346 ns 346 ns 2014818 +bm_rtl::method_calls______Method::set_string 348 ns 348 ns 2017748 -bm_rtl::function__ErasedReturnType::set_string 377 ns 377 ns 1854098 -bm_rtl::method____ErasedReturnType::set_string 378 ns 378 ns 1851962 -bm_rtl::method____ErasedTargetType::set_string 382 ns 382 ns 1839652 -bm_rtl::method____ErasedTargetAndReturnType::set_string 411 ns 411 ns 1708015 +bm_rtl::function__ErasedReturnType::set_string 365 ns 365 ns 1925260 +bm_rtl::method____ErasedReturnType::set_string 374 ns 374 ns 1876867 +bm_rtl::method____ErasedTargetType::set_string 354 ns 354 ns 1985581 +bm_rtl::method____ErasedTargetAndReturnType::set_string 371 ns 371 ns 1878339 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 588 ns 588 ns 1193909 +bm_call::direct__Function::get_string 499 ns 499 ns 1407970 -bm_call::via_function_ptr__Function::get_string 591 ns 591 ns 1184323 -bm_call::via_function_ptr____Method::get_string 590 ns 590 ns 1182298 +bm_call::via_function_ptr__Function::get_string 497 ns 497 ns 1405740 +bm_call::via_function_ptr____Method::get_string 497 ns 497 ns 1403761 -bm_std::function_calls__Function::get_string 591 ns 591 ns 1191866 -bm_std::function_calls____Method::get_string 594 ns 594 ns 1174765 +bm_std::function_calls__Function::get_string 500 ns 500 ns 1000000 +bm_std::function_calls____Method::get_string 499 ns 499 ns 1391338 -bm_rtl::function_calls__Function::get_string 591 ns 591 ns 1187334 -bm_rtl::method_calls______Method::get_string 590 ns 591 ns 1188320 +bm_rtl::function_calls__Function::get_string 497 ns 497 ns 1412667 +bm_rtl::method_calls______Method::get_string 497 ns 497 ns 1409384 -bm_rtl::function__ErasedReturnType::get_string 627 ns 627 ns 1104635 -bm_rtl::method____ErasedReturnType::get_string 624 ns 624 ns 1123294 -bm_rtl::method____ErasedTargetType::get_string 612 ns 612 ns 1142836 -bm_rtl::method____ErasedTargetAndReturnType::get_string 628 ns 628 ns 1114390 +bm_rtl::function__ErasedReturnType::get_string 515 ns 515 ns 1356884 +bm_rtl::method____ErasedReturnType::get_string 515 ns 515 ns 1353416 +bm_rtl::method____ErasedTargetType::get_string 511 ns 511 ns 1375675 +bm_rtl::method____ErasedTargetAndReturnType::get_string 517 ns 516 ns 1363123 ----------------------------------- -[2025-11-04 11:37:31] >>> Run 1: workload scale = 35 +[2026-01-19 22:26:12] >>> Run 1: workload scale = 35 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 35 iterations ============================================= -2025-11-04T11:37:31+05:30 +2026-01-19T22:26:12+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4879.57 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.90, 0.51 +Load Average: 1.00, 0.93, 0.57 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 737 ns 737 ns 949233 +bm_call::direct__Function::set_string 710 ns 710 ns 981145 -bm_call::via_function_ptr__Function::set_string 744 ns 744 ns 940157 -bm_call::via_function_ptr____Method::set_string 739 ns 739 ns 947272 +bm_call::via_function_ptr__Function::set_string 692 ns 692 ns 1013095 +bm_call::via_function_ptr____Method::set_string 692 ns 692 ns 1011763 -bm_std::function_calls__Function::set_string 743 ns 743 ns 940579 -bm_std::function_calls____Method::set_string 750 ns 750 ns 931994 +bm_std::function_calls__Function::set_string 691 ns 691 ns 1013638 +bm_std::function_calls____Method::set_string 714 ns 714 ns 972767 -bm_rtl::function_calls__Function::set_string 743 ns 743 ns 942206 -bm_rtl::method_calls______Method::set_string 740 ns 739 ns 947113 +bm_rtl::function_calls__Function::set_string 691 ns 691 ns 1011286 +bm_rtl::method_calls______Method::set_string 693 ns 693 ns 1015686 -bm_rtl::function__ErasedReturnType::set_string 751 ns 751 ns 932672 -bm_rtl::method____ErasedReturnType::set_string 753 ns 753 ns 930104 -bm_rtl::method____ErasedTargetType::set_string 758 ns 758 ns 910359 -bm_rtl::method____ErasedTargetAndReturnType::set_string 758 ns 758 ns 922853 +bm_rtl::function__ErasedReturnType::set_string 706 ns 706 ns 990586 +bm_rtl::method____ErasedReturnType::set_string 707 ns 707 ns 990922 +bm_rtl::method____ErasedTargetType::set_string 711 ns 711 ns 985971 +bm_rtl::method____ErasedTargetAndReturnType::set_string 717 ns 717 ns 976150 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 941 ns 941 ns 747998 +bm_call::direct__Function::get_string 922 ns 922 ns 759196 -bm_call::via_function_ptr__Function::get_string 941 ns 941 ns 744259 -bm_call::via_function_ptr____Method::get_string 942 ns 942 ns 743961 +bm_call::via_function_ptr__Function::get_string 924 ns 924 ns 759281 +bm_call::via_function_ptr____Method::get_string 922 ns 922 ns 759827 -bm_std::function_calls__Function::get_string 942 ns 942 ns 736240 -bm_std::function_calls____Method::get_string 948 ns 948 ns 737759 +bm_std::function_calls__Function::get_string 924 ns 924 ns 759626 +bm_std::function_calls____Method::get_string 927 ns 927 ns 752753 -bm_rtl::function_calls__Function::get_string 944 ns 944 ns 742616 -bm_rtl::method_calls______Method::get_string 944 ns 944 ns 741708 +bm_rtl::function_calls__Function::get_string 925 ns 925 ns 756943 +bm_rtl::method_calls______Method::get_string 923 ns 923 ns 760058 -bm_rtl::function__ErasedReturnType::get_string 977 ns 977 ns 716160 -bm_rtl::method____ErasedReturnType::get_string 982 ns 982 ns 707304 -bm_rtl::method____ErasedTargetType::get_string 968 ns 968 ns 723075 -bm_rtl::method____ErasedTargetAndReturnType::get_string 989 ns 989 ns 709624 +bm_rtl::function__ErasedReturnType::get_string 960 ns 960 ns 730468 +bm_rtl::method____ErasedReturnType::get_string 961 ns 961 ns 728306 +bm_rtl::method____ErasedTargetType::get_string 950 ns 950 ns 737199 +bm_rtl::method____ErasedTargetAndReturnType::get_string 973 ns 973 ns 719799 ----------------------------------- -[2025-11-04 11:37:48] >>> Run 2: workload scale = 35 +[2026-01-19 22:26:29] >>> Run 2: workload scale = 35 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 35 iterations ============================================= -2025-11-04T11:37:48+05:30 +2026-01-19T22:26:29+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1394,101 +1394,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.91, 0.53 +Load Average: 1.00, 0.93, 0.58 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 696 ns 696 ns 997945 +bm_call::direct__Function::set_string 688 ns 688 ns 1012792 -bm_call::via_function_ptr__Function::set_string 696 ns 696 ns 1008698 -bm_call::via_function_ptr____Method::set_string 697 ns 697 ns 1006462 +bm_call::via_function_ptr__Function::set_string 696 ns 696 ns 1003588 +bm_call::via_function_ptr____Method::set_string 696 ns 696 ns 1007834 -bm_std::function_calls__Function::set_string 696 ns 696 ns 1006201 -bm_std::function_calls____Method::set_string 700 ns 700 ns 1001226 +bm_std::function_calls__Function::set_string 696 ns 696 ns 1006928 +bm_std::function_calls____Method::set_string 722 ns 722 ns 974459 -bm_rtl::function_calls__Function::set_string 697 ns 697 ns 1006362 -bm_rtl::method_calls______Method::set_string 697 ns 697 ns 1006337 +bm_rtl::function_calls__Function::set_string 697 ns 697 ns 1004193 +bm_rtl::method_calls______Method::set_string 696 ns 696 ns 1007755 -bm_rtl::function__ErasedReturnType::set_string 710 ns 710 ns 988589 -bm_rtl::method____ErasedReturnType::set_string 709 ns 709 ns 984855 -bm_rtl::method____ErasedTargetType::set_string 715 ns 712 ns 981415 -bm_rtl::method____ErasedTargetAndReturnType::set_string 723 ns 719 ns 972341 +bm_rtl::function__ErasedReturnType::set_string 704 ns 704 ns 993190 +bm_rtl::method____ErasedReturnType::set_string 703 ns 703 ns 992625 +bm_rtl::method____ErasedTargetType::set_string 709 ns 709 ns 988352 +bm_rtl::method____ErasedTargetAndReturnType::set_string 707 ns 707 ns 992378 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 905 ns 901 ns 777630 +bm_call::direct__Function::get_string 886 ns 886 ns 790128 -bm_call::via_function_ptr__Function::get_string 904 ns 900 ns 777827 -bm_call::via_function_ptr____Method::get_string 905 ns 901 ns 776675 +bm_call::via_function_ptr__Function::get_string 887 ns 887 ns 790635 +bm_call::via_function_ptr____Method::get_string 886 ns 886 ns 790890 -bm_std::function_calls__Function::get_string 904 ns 900 ns 777750 -bm_std::function_calls____Method::get_string 910 ns 906 ns 772493 +bm_std::function_calls__Function::get_string 886 ns 886 ns 790529 +bm_std::function_calls____Method::get_string 892 ns 892 ns 786318 -bm_rtl::function_calls__Function::get_string 903 ns 899 ns 777881 -bm_rtl::method_calls______Method::get_string 905 ns 901 ns 776797 +bm_rtl::function_calls__Function::get_string 885 ns 885 ns 790710 +bm_rtl::method_calls______Method::get_string 887 ns 886 ns 789776 -bm_rtl::function__ErasedReturnType::get_string 949 ns 945 ns 739878 -bm_rtl::method____ErasedReturnType::get_string 951 ns 948 ns 738968 -bm_rtl::method____ErasedTargetType::get_string 928 ns 925 ns 757011 -bm_rtl::method____ErasedTargetAndReturnType::get_string 965 ns 962 ns 727928 +bm_rtl::function__ErasedReturnType::get_string 910 ns 909 ns 767868 +bm_rtl::method____ErasedReturnType::get_string 911 ns 910 ns 769923 +bm_rtl::method____ErasedTargetType::get_string 903 ns 903 ns 776352 +bm_rtl::method____ErasedTargetAndReturnType::get_string 910 ns 910 ns 767263 ----------------------------------- -[2025-11-04 11:38:06] >>> Run 3: workload scale = 35 +[2026-01-19 22:26:46] >>> Run 3: workload scale = 35 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 35 iterations ============================================= -2025-11-04T11:38:06+05:30 +2026-01-19T22:26:46+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1390.47 MHz CPU s) +Run on (16 X 4826.63 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.91, 0.53 +Load Average: 1.00, 0.94, 0.59 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 685 ns 682 ns 1018054 +bm_call::direct__Function::set_string 687 ns 687 ns 1012333 -bm_call::via_function_ptr__Function::set_string 690 ns 687 ns 1016613 -bm_call::via_function_ptr____Method::set_string 687 ns 685 ns 1020388 +bm_call::via_function_ptr__Function::set_string 698 ns 698 ns 1001974 +bm_call::via_function_ptr____Method::set_string 699 ns 699 ns 1001002 -bm_std::function_calls__Function::set_string 689 ns 686 ns 1019090 -bm_std::function_calls____Method::set_string 696 ns 694 ns 1009476 +bm_std::function_calls__Function::set_string 699 ns 699 ns 1003186 +bm_std::function_calls____Method::set_string 695 ns 695 ns 1008207 -bm_rtl::function_calls__Function::set_string 691 ns 688 ns 1010954 -bm_rtl::method_calls______Method::set_string 688 ns 685 ns 1021430 +bm_rtl::function_calls__Function::set_string 698 ns 698 ns 1000755 +bm_rtl::method_calls______Method::set_string 700 ns 700 ns 1003123 -bm_rtl::function__ErasedReturnType::set_string 700 ns 698 ns 1002649 -bm_rtl::method____ErasedReturnType::set_string 704 ns 702 ns 997297 -bm_rtl::method____ErasedTargetType::set_string 705 ns 702 ns 998683 -bm_rtl::method____ErasedTargetAndReturnType::set_string 711 ns 709 ns 986675 +bm_rtl::function__ErasedReturnType::set_string 713 ns 713 ns 983307 +bm_rtl::method____ErasedReturnType::set_string 705 ns 705 ns 986819 +bm_rtl::method____ErasedTargetType::set_string 721 ns 721 ns 973763 +bm_rtl::method____ErasedTargetAndReturnType::set_string 719 ns 718 ns 972130 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 906 ns 903 ns 776326 +bm_call::direct__Function::get_string 868 ns 868 ns 808143 -bm_call::via_function_ptr__Function::get_string 906 ns 903 ns 774790 -bm_call::via_function_ptr____Method::get_string 906 ns 904 ns 774417 +bm_call::via_function_ptr__Function::get_string 873 ns 873 ns 802283 +bm_call::via_function_ptr____Method::get_string 873 ns 873 ns 802368 -bm_std::function_calls__Function::get_string 906 ns 903 ns 773345 -bm_std::function_calls____Method::get_string 914 ns 912 ns 768527 +bm_std::function_calls__Function::get_string 871 ns 871 ns 803251 +bm_std::function_calls____Method::get_string 875 ns 875 ns 800165 -bm_rtl::function_calls__Function::get_string 905 ns 903 ns 775225 -bm_rtl::method_calls______Method::get_string 906 ns 903 ns 775504 +bm_rtl::function_calls__Function::get_string 875 ns 875 ns 799948 +bm_rtl::method_calls______Method::get_string 875 ns 875 ns 798701 -bm_rtl::function__ErasedReturnType::get_string 947 ns 945 ns 740012 -bm_rtl::method____ErasedReturnType::get_string 947 ns 944 ns 742160 -bm_rtl::method____ErasedTargetType::get_string 929 ns 926 ns 755413 -bm_rtl::method____ErasedTargetAndReturnType::get_string 953 ns 950 ns 737066 +bm_rtl::function__ErasedReturnType::get_string 906 ns 906 ns 772812 +bm_rtl::method____ErasedReturnType::get_string 905 ns 905 ns 773400 +bm_rtl::method____ErasedTargetType::get_string 896 ns 896 ns 779165 +bm_rtl::method____ErasedTargetAndReturnType::get_string 910 ns 910 ns 767525 ----------------------------------- -[2025-11-04 11:38:23] >>> Run 1: workload scale = 40 +[2026-01-19 22:27:04] >>> Run 1: workload scale = 40 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 40 iterations ============================================= -2025-11-04T11:38:23+05:30 +2026-01-19T22:27:04+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1496,101 +1496,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.92, 0.55 +Load Average: 1.00, 0.94, 0.60 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 800 ns 799 ns 867264 +bm_call::direct__Function::set_string 802 ns 802 ns 868548 -bm_call::via_function_ptr__Function::set_string 798 ns 796 ns 880085 -bm_call::via_function_ptr____Method::set_string 799 ns 797 ns 880685 +bm_call::via_function_ptr__Function::set_string 807 ns 807 ns 867844 +bm_call::via_function_ptr____Method::set_string 812 ns 812 ns 863363 -bm_std::function_calls__Function::set_string 797 ns 795 ns 880499 -bm_std::function_calls____Method::set_string 809 ns 807 ns 866812 +bm_std::function_calls__Function::set_string 807 ns 807 ns 867775 +bm_std::function_calls____Method::set_string 824 ns 824 ns 850370 -bm_rtl::function_calls__Function::set_string 796 ns 794 ns 883223 -bm_rtl::method_calls______Method::set_string 799 ns 797 ns 876599 +bm_rtl::function_calls__Function::set_string 807 ns 807 ns 869726 +bm_rtl::method_calls______Method::set_string 812 ns 811 ns 861708 -bm_rtl::function__ErasedReturnType::set_string 812 ns 810 ns 861595 -bm_rtl::method____ErasedReturnType::set_string 815 ns 813 ns 863290 -bm_rtl::method____ErasedTargetType::set_string 817 ns 815 ns 860003 -bm_rtl::method____ErasedTargetAndReturnType::set_string 825 ns 823 ns 848476 +bm_rtl::function__ErasedReturnType::set_string 820 ns 820 ns 853781 +bm_rtl::method____ErasedReturnType::set_string 821 ns 821 ns 851633 +bm_rtl::method____ErasedTargetType::set_string 821 ns 821 ns 853270 +bm_rtl::method____ErasedTargetAndReturnType::set_string 821 ns 821 ns 852568 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1016 ns 1014 ns 691107 +bm_call::direct__Function::get_string 1060 ns 1060 ns 658475 -bm_call::via_function_ptr__Function::get_string 1018 ns 1016 ns 688866 -bm_call::via_function_ptr____Method::get_string 1017 ns 1015 ns 688426 +bm_call::via_function_ptr__Function::get_string 1065 ns 1064 ns 657487 +bm_call::via_function_ptr____Method::get_string 1064 ns 1063 ns 658536 -bm_std::function_calls__Function::get_string 1018 ns 1016 ns 689406 -bm_std::function_calls____Method::get_string 1030 ns 1028 ns 680879 +bm_std::function_calls__Function::get_string 1065 ns 1065 ns 657326 +bm_std::function_calls____Method::get_string 1068 ns 1068 ns 654286 -bm_rtl::function_calls__Function::get_string 1017 ns 1015 ns 688175 -bm_rtl::method_calls______Method::get_string 1017 ns 1016 ns 689699 +bm_rtl::function_calls__Function::get_string 1065 ns 1065 ns 656003 +bm_rtl::method_calls______Method::get_string 1064 ns 1064 ns 658205 -bm_rtl::function__ErasedReturnType::get_string 1062 ns 1060 ns 660938 -bm_rtl::method____ErasedReturnType::get_string 1062 ns 1060 ns 660987 -bm_rtl::method____ErasedTargetType::get_string 1041 ns 1039 ns 674072 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1068 ns 1066 ns 655561 +bm_rtl::function__ErasedReturnType::get_string 1094 ns 1094 ns 640286 +bm_rtl::method____ErasedReturnType::get_string 1094 ns 1094 ns 640985 +bm_rtl::method____ErasedTargetType::get_string 1087 ns 1087 ns 644549 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1101 ns 1101 ns 636794 ----------------------------------- -[2025-11-04 11:38:41] >>> Run 2: workload scale = 40 +[2026-01-19 22:27:21] >>> Run 2: workload scale = 40 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 40 iterations ============================================= -2025-11-04T11:38:41+05:30 +2026-01-19T22:27:21+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1231.43 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.92, 0.55 +Load Average: 1.00, 0.95, 0.61 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 788 ns 786 ns 878975 +bm_call::direct__Function::set_string 786 ns 786 ns 883972 -bm_call::via_function_ptr__Function::set_string 788 ns 787 ns 886890 -bm_call::via_function_ptr____Method::set_string 789 ns 788 ns 889408 +bm_call::via_function_ptr__Function::set_string 774 ns 774 ns 903846 +bm_call::via_function_ptr____Method::set_string 778 ns 778 ns 899190 -bm_std::function_calls__Function::set_string 790 ns 789 ns 890087 -bm_std::function_calls____Method::set_string 793 ns 792 ns 881178 +bm_std::function_calls__Function::set_string 774 ns 774 ns 903053 +bm_std::function_calls____Method::set_string 774 ns 773 ns 907756 -bm_rtl::function_calls__Function::set_string 789 ns 787 ns 889915 -bm_rtl::method_calls______Method::set_string 788 ns 787 ns 885010 +bm_rtl::function_calls__Function::set_string 773 ns 773 ns 906453 +bm_rtl::method_calls______Method::set_string 778 ns 778 ns 899327 -bm_rtl::function__ErasedReturnType::set_string 798 ns 797 ns 876161 -bm_rtl::method____ErasedReturnType::set_string 797 ns 796 ns 878707 -bm_rtl::method____ErasedTargetType::set_string 800 ns 799 ns 876369 -bm_rtl::method____ErasedTargetAndReturnType::set_string 807 ns 806 ns 871804 +bm_rtl::function__ErasedReturnType::set_string 780 ns 780 ns 897281 +bm_rtl::method____ErasedReturnType::set_string 782 ns 782 ns 895546 +bm_rtl::method____ErasedTargetType::set_string 785 ns 785 ns 890456 +bm_rtl::method____ErasedTargetAndReturnType::set_string 785 ns 785 ns 892386 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1004 ns 1003 ns 696947 +bm_call::direct__Function::get_string 988 ns 988 ns 709044 -bm_call::via_function_ptr__Function::get_string 1058 ns 1056 ns 696943 -bm_call::via_function_ptr____Method::get_string 1058 ns 1057 ns 662406 +bm_call::via_function_ptr__Function::get_string 991 ns 991 ns 707835 +bm_call::via_function_ptr____Method::get_string 988 ns 988 ns 708817 -bm_std::function_calls__Function::get_string 1060 ns 1059 ns 661064 -bm_std::function_calls____Method::get_string 1061 ns 1060 ns 660663 +bm_std::function_calls__Function::get_string 991 ns 991 ns 707988 +bm_std::function_calls____Method::get_string 993 ns 992 ns 705658 -bm_rtl::function_calls__Function::get_string 1059 ns 1057 ns 662143 -bm_rtl::method_calls______Method::get_string 1059 ns 1058 ns 661466 +bm_rtl::function_calls__Function::get_string 989 ns 989 ns 706853 +bm_rtl::method_calls______Method::get_string 988 ns 988 ns 709751 -bm_rtl::function__ErasedReturnType::get_string 1097 ns 1096 ns 638879 -bm_rtl::method____ErasedReturnType::get_string 1098 ns 1097 ns 638203 -bm_rtl::method____ErasedTargetType::get_string 1076 ns 1075 ns 650820 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1101 ns 1100 ns 636763 +bm_rtl::function__ErasedReturnType::get_string 1016 ns 1016 ns 690073 +bm_rtl::method____ErasedReturnType::get_string 1012 ns 1012 ns 692075 +bm_rtl::method____ErasedTargetType::get_string 1012 ns 1012 ns 694173 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1015 ns 1015 ns 690549 ----------------------------------- -[2025-11-04 11:38:58] >>> Run 3: workload scale = 40 +[2026-01-19 22:27:39] >>> Run 3: workload scale = 40 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 40 iterations ============================================= -2025-11-04T11:38:58+05:30 +2026-01-19T22:27:39+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1598,101 +1598,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.93, 0.56 +Load Average: 1.00, 0.95, 0.61 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 790 ns 789 ns 879491 +bm_call::direct__Function::set_string 771 ns 771 ns 885667 -bm_call::via_function_ptr__Function::set_string 801 ns 800 ns 876063 -bm_call::via_function_ptr____Method::set_string 801 ns 800 ns 875793 +bm_call::via_function_ptr__Function::set_string 793 ns 793 ns 878508 +bm_call::via_function_ptr____Method::set_string 800 ns 800 ns 874309 -bm_std::function_calls__Function::set_string 801 ns 800 ns 867836 -bm_std::function_calls____Method::set_string 793 ns 793 ns 882424 +bm_std::function_calls__Function::set_string 794 ns 794 ns 887848 +bm_std::function_calls____Method::set_string 779 ns 778 ns 901238 -bm_rtl::function_calls__Function::set_string 801 ns 800 ns 873938 -bm_rtl::method_calls______Method::set_string 800 ns 799 ns 876111 +bm_rtl::function_calls__Function::set_string 793 ns 792 ns 880417 +bm_rtl::method_calls______Method::set_string 799 ns 799 ns 873660 -bm_rtl::function__ErasedReturnType::set_string 791 ns 790 ns 883758 -bm_rtl::method____ErasedReturnType::set_string 794 ns 793 ns 882458 -bm_rtl::method____ErasedTargetType::set_string 795 ns 794 ns 882106 -bm_rtl::method____ErasedTargetAndReturnType::set_string 802 ns 802 ns 875097 +bm_rtl::function__ErasedReturnType::set_string 786 ns 786 ns 894928 +bm_rtl::method____ErasedReturnType::set_string 801 ns 800 ns 877038 +bm_rtl::method____ErasedTargetType::set_string 788 ns 788 ns 887908 +bm_rtl::method____ErasedTargetAndReturnType::set_string 806 ns 806 ns 866137 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1011 ns 1010 ns 691725 +bm_call::direct__Function::get_string 1016 ns 1016 ns 691784 -bm_call::via_function_ptr__Function::get_string 1013 ns 1012 ns 690708 -bm_call::via_function_ptr____Method::get_string 1015 ns 1014 ns 690969 +bm_call::via_function_ptr__Function::get_string 1000 ns 1000 ns 697377 +bm_call::via_function_ptr____Method::get_string 1000 ns 1000 ns 698055 -bm_std::function_calls__Function::get_string 1014 ns 1013 ns 691823 -bm_std::function_calls____Method::get_string 1007 ns 1006 ns 696324 +bm_std::function_calls__Function::get_string 1001 ns 1001 ns 700875 +bm_std::function_calls____Method::get_string 1003 ns 1003 ns 695781 -bm_rtl::function_calls__Function::get_string 1014 ns 1013 ns 690932 -bm_rtl::method_calls______Method::get_string 1016 ns 1015 ns 691167 +bm_rtl::function_calls__Function::get_string 1001 ns 1000 ns 701247 +bm_rtl::method_calls______Method::get_string 999 ns 999 ns 700681 -bm_rtl::function__ErasedReturnType::get_string 1029 ns 1028 ns 679959 -bm_rtl::method____ErasedReturnType::get_string 1036 ns 1035 ns 676196 -bm_rtl::method____ErasedTargetType::get_string 1017 ns 1016 ns 689113 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1043 ns 1042 ns 672677 +bm_rtl::function__ErasedReturnType::get_string 1023 ns 1023 ns 684652 +bm_rtl::method____ErasedReturnType::get_string 1022 ns 1022 ns 685580 +bm_rtl::method____ErasedTargetType::get_string 1016 ns 1016 ns 686936 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1031 ns 1031 ns 680324 ----------------------------------- -[2025-11-04 11:39:16] >>> Run 1: workload scale = 45 +[2026-01-19 22:27:57] >>> Run 1: workload scale = 45 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 45 iterations ============================================= -2025-11-04T11:39:16+05:30 +2026-01-19T22:27:57+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1640.45 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.93, 0.57 +Load Average: 1.00, 0.95, 0.62 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 846 ns 846 ns 821898 +bm_call::direct__Function::set_string 843 ns 842 ns 829422 -bm_call::via_function_ptr__Function::set_string 846 ns 846 ns 829586 -bm_call::via_function_ptr____Method::set_string 847 ns 846 ns 827075 +bm_call::via_function_ptr__Function::set_string 826 ns 826 ns 847271 +bm_call::via_function_ptr____Method::set_string 830 ns 830 ns 841956 -bm_std::function_calls__Function::set_string 848 ns 848 ns 823698 -bm_std::function_calls____Method::set_string 850 ns 849 ns 824485 +bm_std::function_calls__Function::set_string 828 ns 828 ns 845355 +bm_std::function_calls____Method::set_string 832 ns 832 ns 840493 -bm_rtl::function_calls__Function::set_string 848 ns 848 ns 826498 -bm_rtl::method_calls______Method::set_string 847 ns 846 ns 826833 +bm_rtl::function_calls__Function::set_string 826 ns 826 ns 845523 +bm_rtl::method_calls______Method::set_string 831 ns 831 ns 842934 -bm_rtl::function__ErasedReturnType::set_string 857 ns 857 ns 817116 -bm_rtl::method____ErasedReturnType::set_string 856 ns 855 ns 819321 -bm_rtl::method____ErasedTargetType::set_string 860 ns 859 ns 815630 -bm_rtl::method____ErasedTargetAndReturnType::set_string 871 ns 870 ns 803543 +bm_rtl::function__ErasedReturnType::set_string 837 ns 837 ns 835998 +bm_rtl::method____ErasedReturnType::set_string 861 ns 861 ns 813815 +bm_rtl::method____ErasedTargetType::set_string 845 ns 845 ns 828408 +bm_rtl::method____ErasedTargetAndReturnType::set_string 845 ns 844 ns 829014 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1082 ns 1081 ns 648078 +bm_call::direct__Function::get_string 1061 ns 1061 ns 659854 -bm_call::via_function_ptr__Function::get_string 1079 ns 1078 ns 649415 -bm_call::via_function_ptr____Method::get_string 1080 ns 1079 ns 648859 +bm_call::via_function_ptr__Function::get_string 1059 ns 1059 ns 661004 +bm_call::via_function_ptr____Method::get_string 1059 ns 1058 ns 660856 -bm_std::function_calls__Function::get_string 1078 ns 1077 ns 649608 -bm_std::function_calls____Method::get_string 1085 ns 1084 ns 646485 +bm_std::function_calls__Function::get_string 1059 ns 1059 ns 659554 +bm_std::function_calls____Method::get_string 1065 ns 1065 ns 657328 -bm_rtl::function_calls__Function::get_string 1077 ns 1077 ns 650108 -bm_rtl::method_calls______Method::get_string 1080 ns 1079 ns 648442 +bm_rtl::function_calls__Function::get_string 1059 ns 1059 ns 660814 +bm_rtl::method_calls______Method::get_string 1058 ns 1058 ns 661209 -bm_rtl::function__ErasedReturnType::get_string 1115 ns 1114 ns 626958 -bm_rtl::method____ErasedReturnType::get_string 1117 ns 1116 ns 626786 -bm_rtl::method____ErasedTargetType::get_string 1096 ns 1095 ns 638830 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1126 ns 1125 ns 622353 +bm_rtl::function__ErasedReturnType::get_string 1083 ns 1083 ns 645463 +bm_rtl::method____ErasedReturnType::get_string 1083 ns 1083 ns 645790 +bm_rtl::method____ErasedTargetType::get_string 1075 ns 1075 ns 649976 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1082 ns 1082 ns 645611 ----------------------------------- -[2025-11-04 11:39:34] >>> Run 2: workload scale = 45 +[2026-01-19 22:28:14] >>> Run 2: workload scale = 45 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 45 iterations ============================================= -2025-11-04T11:39:34+05:30 +2026-01-19T22:28:14+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1700,101 +1700,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.94, 0.58 +Load Average: 1.00, 0.96, 0.63 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 848 ns 847 ns 822625 +bm_call::direct__Function::set_string 873 ns 873 ns 798150 -bm_call::via_function_ptr__Function::set_string 845 ns 844 ns 820487 -bm_call::via_function_ptr____Method::set_string 844 ns 843 ns 829949 +bm_call::via_function_ptr__Function::set_string 818 ns 818 ns 855496 +bm_call::via_function_ptr____Method::set_string 822 ns 822 ns 851194 -bm_std::function_calls__Function::set_string 845 ns 844 ns 825232 -bm_std::function_calls____Method::set_string 853 ns 852 ns 821822 +bm_std::function_calls__Function::set_string 820 ns 820 ns 853680 +bm_std::function_calls____Method::set_string 826 ns 826 ns 848997 -bm_rtl::function_calls__Function::set_string 845 ns 844 ns 827961 -bm_rtl::method_calls______Method::set_string 845 ns 845 ns 826856 +bm_rtl::function_calls__Function::set_string 820 ns 819 ns 855357 +bm_rtl::method_calls______Method::set_string 822 ns 822 ns 850380 -bm_rtl::function__ErasedReturnType::set_string 856 ns 855 ns 819788 -bm_rtl::method____ErasedReturnType::set_string 855 ns 854 ns 822908 -bm_rtl::method____ErasedTargetType::set_string 857 ns 857 ns 817574 -bm_rtl::method____ErasedTargetAndReturnType::set_string 868 ns 867 ns 808004 +bm_rtl::function__ErasedReturnType::set_string 829 ns 829 ns 843995 +bm_rtl::method____ErasedReturnType::set_string 833 ns 833 ns 841065 +bm_rtl::method____ErasedTargetType::set_string 835 ns 835 ns 836950 +bm_rtl::method____ErasedTargetAndReturnType::set_string 835 ns 835 ns 838849 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1083 ns 1082 ns 648003 +bm_call::direct__Function::get_string 1106 ns 1106 ns 633211 -bm_call::via_function_ptr__Function::get_string 1077 ns 1077 ns 649849 -bm_call::via_function_ptr____Method::get_string 1080 ns 1079 ns 649233 +bm_call::via_function_ptr__Function::get_string 1106 ns 1106 ns 632481 +bm_call::via_function_ptr____Method::get_string 1106 ns 1105 ns 633333 -bm_std::function_calls__Function::get_string 1076 ns 1076 ns 650966 -bm_std::function_calls____Method::get_string 1088 ns 1087 ns 643800 +bm_std::function_calls__Function::get_string 1106 ns 1106 ns 632483 +bm_std::function_calls____Method::get_string 1114 ns 1114 ns 628515 -bm_rtl::function_calls__Function::get_string 1078 ns 1078 ns 646730 -bm_rtl::method_calls______Method::get_string 1078 ns 1078 ns 649617 +bm_rtl::function_calls__Function::get_string 1106 ns 1106 ns 633284 +bm_rtl::method_calls______Method::get_string 1105 ns 1105 ns 633066 -bm_rtl::function__ErasedReturnType::get_string 1112 ns 1111 ns 629505 -bm_rtl::method____ErasedReturnType::get_string 1116 ns 1116 ns 626620 -bm_rtl::method____ErasedTargetType::get_string 1094 ns 1093 ns 640864 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1121 ns 1120 ns 619886 +bm_rtl::function__ErasedReturnType::get_string 1136 ns 1136 ns 615606 +bm_rtl::method____ErasedReturnType::get_string 1134 ns 1134 ns 616323 +bm_rtl::method____ErasedTargetType::get_string 1129 ns 1129 ns 621462 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1140 ns 1139 ns 614829 ----------------------------------- -[2025-11-04 11:39:52] >>> Run 3: workload scale = 45 +[2026-01-19 22:28:32] >>> Run 3: workload scale = 45 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 45 iterations ============================================= -2025-11-04T11:39:52+05:30 +2026-01-19T22:28:32+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 2371.34 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 0.94, 0.59 +Load Average: 1.00, 0.96, 0.64 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 841 ns 841 ns 828006 +bm_call::direct__Function::set_string 848 ns 848 ns 821823 -bm_call::via_function_ptr__Function::set_string 846 ns 845 ns 827058 -bm_call::via_function_ptr____Method::set_string 844 ns 843 ns 830739 +bm_call::via_function_ptr__Function::set_string 849 ns 849 ns 823432 +bm_call::via_function_ptr____Method::set_string 848 ns 848 ns 826357 -bm_std::function_calls__Function::set_string 844 ns 843 ns 826509 -bm_std::function_calls____Method::set_string 849 ns 848 ns 825604 +bm_std::function_calls__Function::set_string 849 ns 849 ns 825248 +bm_std::function_calls____Method::set_string 834 ns 834 ns 840820 -bm_rtl::function_calls__Function::set_string 846 ns 846 ns 828447 -bm_rtl::method_calls______Method::set_string 845 ns 844 ns 829668 +bm_rtl::function_calls__Function::set_string 847 ns 847 ns 826081 +bm_rtl::method_calls______Method::set_string 848 ns 848 ns 821829 -bm_rtl::function__ErasedReturnType::set_string 855 ns 854 ns 821153 -bm_rtl::method____ErasedReturnType::set_string 860 ns 859 ns 813919 -bm_rtl::method____ErasedTargetType::set_string 855 ns 854 ns 818020 -bm_rtl::method____ErasedTargetAndReturnType::set_string 869 ns 869 ns 807824 +bm_rtl::function__ErasedReturnType::set_string 868 ns 867 ns 806472 +bm_rtl::method____ErasedReturnType::set_string 848 ns 847 ns 823741 +bm_rtl::method____ErasedTargetType::set_string 872 ns 872 ns 802754 +bm_rtl::method____ErasedTargetAndReturnType::set_string 876 ns 876 ns 799331 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1074 ns 1073 ns 652774 +bm_call::direct__Function::get_string 1064 ns 1064 ns 658715 -bm_call::via_function_ptr__Function::get_string 1071 ns 1070 ns 653625 -bm_call::via_function_ptr____Method::get_string 1072 ns 1071 ns 653933 +bm_call::via_function_ptr__Function::get_string 1066 ns 1066 ns 655833 +bm_call::via_function_ptr____Method::get_string 1066 ns 1066 ns 656046 -bm_std::function_calls__Function::get_string 1072 ns 1071 ns 653516 -bm_std::function_calls____Method::get_string 1079 ns 1079 ns 648755 +bm_std::function_calls__Function::get_string 1067 ns 1067 ns 655205 +bm_std::function_calls____Method::get_string 1069 ns 1068 ns 655293 -bm_rtl::function_calls__Function::get_string 1071 ns 1071 ns 654398 -bm_rtl::method_calls______Method::get_string 1072 ns 1072 ns 653285 +bm_rtl::function_calls__Function::get_string 1066 ns 1065 ns 658227 +bm_rtl::method_calls______Method::get_string 1065 ns 1065 ns 657248 -bm_rtl::function__ErasedReturnType::get_string 1108 ns 1108 ns 631753 -bm_rtl::method____ErasedReturnType::get_string 1111 ns 1111 ns 630268 -bm_rtl::method____ErasedTargetType::get_string 1085 ns 1084 ns 645525 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1122 ns 1121 ns 624251 +bm_rtl::function__ErasedReturnType::get_string 1088 ns 1088 ns 643258 +bm_rtl::method____ErasedReturnType::get_string 1087 ns 1087 ns 644904 +bm_rtl::method____ErasedTargetType::get_string 1078 ns 1078 ns 647611 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1078 ns 1078 ns 649254 ----------------------------------- -[2025-11-04 11:40:09] >>> Run 1: workload scale = 50 +[2026-01-19 22:28:50] >>> Run 1: workload scale = 50 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 50 iterations ============================================= -2025-11-04T11:40:09+05:30 +2026-01-19T22:28:50+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1802,101 +1802,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 0.96, 0.60 +Load Average: 1.00, 0.96, 0.65 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 909 ns 909 ns 767477 +bm_call::direct__Function::set_string 934 ns 934 ns 748128 -bm_call::via_function_ptr__Function::set_string 912 ns 911 ns 767505 -bm_call::via_function_ptr____Method::set_string 909 ns 909 ns 770254 +bm_call::via_function_ptr__Function::set_string 903 ns 903 ns 774622 +bm_call::via_function_ptr____Method::set_string 901 ns 901 ns 775359 -bm_std::function_calls__Function::set_string 911 ns 910 ns 771378 -bm_std::function_calls____Method::set_string 912 ns 912 ns 768127 +bm_std::function_calls__Function::set_string 904 ns 904 ns 774547 +bm_std::function_calls____Method::set_string 883 ns 883 ns 790621 -bm_rtl::function_calls__Function::set_string 911 ns 911 ns 768533 -bm_rtl::method_calls______Method::set_string 911 ns 911 ns 768158 +bm_rtl::function_calls__Function::set_string 902 ns 902 ns 774979 +bm_rtl::method_calls______Method::set_string 901 ns 900 ns 777221 -bm_rtl::function__ErasedReturnType::set_string 919 ns 919 ns 760767 -bm_rtl::method____ErasedReturnType::set_string 926 ns 926 ns 755851 -bm_rtl::method____ErasedTargetType::set_string 933 ns 932 ns 751905 -bm_rtl::method____ErasedTargetAndReturnType::set_string 931 ns 930 ns 751605 +bm_rtl::function__ErasedReturnType::set_string 919 ns 919 ns 763272 +bm_rtl::method____ErasedReturnType::set_string 895 ns 895 ns 782345 +bm_rtl::method____ErasedTargetType::set_string 924 ns 923 ns 759790 +bm_rtl::method____ErasedTargetAndReturnType::set_string 927 ns 927 ns 754650 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1174 ns 1174 ns 596533 +bm_call::direct__Function::get_string 1137 ns 1137 ns 617257 -bm_call::via_function_ptr__Function::get_string 1175 ns 1174 ns 596482 -bm_call::via_function_ptr____Method::get_string 1175 ns 1175 ns 595587 +bm_call::via_function_ptr__Function::get_string 1139 ns 1139 ns 614025 +bm_call::via_function_ptr____Method::get_string 1137 ns 1137 ns 615042 -bm_std::function_calls__Function::get_string 1174 ns 1173 ns 596838 -bm_std::function_calls____Method::get_string 1178 ns 1177 ns 594976 +bm_std::function_calls__Function::get_string 1134 ns 1134 ns 617301 +bm_std::function_calls____Method::get_string 1141 ns 1141 ns 614301 -bm_rtl::function_calls__Function::get_string 1174 ns 1173 ns 596710 -bm_rtl::method_calls______Method::get_string 1176 ns 1175 ns 596243 +bm_rtl::function_calls__Function::get_string 1135 ns 1134 ns 617395 +bm_rtl::method_calls______Method::get_string 1137 ns 1137 ns 616732 -bm_rtl::function__ErasedReturnType::get_string 1214 ns 1213 ns 577055 -bm_rtl::method____ErasedReturnType::get_string 1213 ns 1213 ns 577546 -bm_rtl::method____ErasedTargetType::get_string 1198 ns 1198 ns 584466 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1219 ns 1218 ns 574204 +bm_rtl::function__ErasedReturnType::get_string 1162 ns 1162 ns 601555 +bm_rtl::method____ErasedReturnType::get_string 1163 ns 1163 ns 602718 +bm_rtl::method____ErasedTargetType::get_string 1214 ns 1214 ns 577226 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1200 ns 1199 ns 572903 ----------------------------------- -[2025-11-04 11:40:27] >>> Run 2: workload scale = 50 +[2026-01-19 22:29:08] >>> Run 2: workload scale = 50 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 50 iterations ============================================= -2025-11-04T11:40:27+05:30 +2026-01-19T22:29:08+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 4884.6 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.05, 0.97, 0.61 +Load Average: 1.00, 0.97, 0.65 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 943 ns 942 ns 737843 +bm_call::direct__Function::set_string 948 ns 948 ns 735867 -bm_call::via_function_ptr__Function::set_string 944 ns 943 ns 742177 -bm_call::via_function_ptr____Method::set_string 944 ns 944 ns 742264 +bm_call::via_function_ptr__Function::set_string 874 ns 874 ns 801342 +bm_call::via_function_ptr____Method::set_string 876 ns 876 ns 799863 -bm_std::function_calls__Function::set_string 944 ns 943 ns 743093 -bm_std::function_calls____Method::set_string 947 ns 946 ns 738334 +bm_std::function_calls__Function::set_string 875 ns 875 ns 798701 +bm_std::function_calls____Method::set_string 885 ns 885 ns 792333 -bm_rtl::function_calls__Function::set_string 944 ns 944 ns 741385 -bm_rtl::method_calls______Method::set_string 945 ns 944 ns 741519 +bm_rtl::function_calls__Function::set_string 874 ns 874 ns 800998 +bm_rtl::method_calls______Method::set_string 876 ns 875 ns 798915 -bm_rtl::function__ErasedReturnType::set_string 957 ns 956 ns 730993 -bm_rtl::method____ErasedReturnType::set_string 961 ns 961 ns 729195 -bm_rtl::method____ErasedTargetType::set_string 959 ns 958 ns 730421 -bm_rtl::method____ErasedTargetAndReturnType::set_string 967 ns 967 ns 723365 +bm_rtl::function__ErasedReturnType::set_string 888 ns 888 ns 789682 +bm_rtl::method____ErasedReturnType::set_string 888 ns 888 ns 788441 +bm_rtl::method____ErasedTargetType::set_string 894 ns 894 ns 783465 +bm_rtl::method____ErasedTargetAndReturnType::set_string 898 ns 898 ns 779245 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1259 ns 1259 ns 556770 +bm_call::direct__Function::get_string 1134 ns 1134 ns 618460 -bm_call::via_function_ptr__Function::get_string 1261 ns 1260 ns 554829 -bm_call::via_function_ptr____Method::get_string 1261 ns 1261 ns 555062 +bm_call::via_function_ptr__Function::get_string 1135 ns 1135 ns 615819 +bm_call::via_function_ptr____Method::get_string 1133 ns 1132 ns 614053 -bm_std::function_calls__Function::get_string 1261 ns 1260 ns 554486 -bm_std::function_calls____Method::get_string 1266 ns 1266 ns 553304 +bm_std::function_calls__Function::get_string 1133 ns 1133 ns 616594 +bm_std::function_calls____Method::get_string 1139 ns 1139 ns 614250 -bm_rtl::function_calls__Function::get_string 1261 ns 1260 ns 555273 -bm_rtl::method_calls______Method::get_string 1262 ns 1262 ns 554575 +bm_rtl::function_calls__Function::get_string 1133 ns 1133 ns 616500 +bm_rtl::method_calls______Method::get_string 1134 ns 1134 ns 618471 -bm_rtl::function__ErasedReturnType::get_string 1292 ns 1292 ns 541838 -bm_rtl::method____ErasedReturnType::get_string 1294 ns 1293 ns 541593 -bm_rtl::method____ErasedTargetType::get_string 1279 ns 1279 ns 546731 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1307 ns 1306 ns 536321 +bm_rtl::function__ErasedReturnType::get_string 1161 ns 1161 ns 603369 +bm_rtl::method____ErasedReturnType::get_string 1159 ns 1159 ns 603518 +bm_rtl::method____ErasedTargetType::get_string 1154 ns 1154 ns 607749 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1166 ns 1166 ns 598245 ----------------------------------- -[2025-11-04 11:40:46] >>> Run 3: workload scale = 50 +[2026-01-19 22:29:26] >>> Run 3: workload scale = 50 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 50 iterations ============================================= -2025-11-04T11:40:46+05:30 +2026-01-19T22:29:26+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1904,50 +1904,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 0.97, 0.62 +Load Average: 1.00, 0.97, 0.66 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 913 ns 913 ns 765510 +bm_call::direct__Function::set_string 939 ns 939 ns 742183 -bm_call::via_function_ptr__Function::set_string 910 ns 909 ns 771256 -bm_call::via_function_ptr____Method::set_string 909 ns 908 ns 771309 +bm_call::via_function_ptr__Function::set_string 881 ns 881 ns 795159 +bm_call::via_function_ptr____Method::set_string 881 ns 881 ns 794504 -bm_std::function_calls__Function::set_string 908 ns 907 ns 770894 -bm_std::function_calls____Method::set_string 912 ns 912 ns 768112 +bm_std::function_calls__Function::set_string 882 ns 882 ns 793816 +bm_std::function_calls____Method::set_string 882 ns 882 ns 794659 -bm_rtl::function_calls__Function::set_string 907 ns 907 ns 770584 -bm_rtl::method_calls______Method::set_string 908 ns 908 ns 771993 +bm_rtl::function_calls__Function::set_string 881 ns 881 ns 795593 +bm_rtl::method_calls______Method::set_string 881 ns 881 ns 793528 -bm_rtl::function__ErasedReturnType::set_string 921 ns 921 ns 760196 -bm_rtl::method____ErasedReturnType::set_string 924 ns 923 ns 756860 -bm_rtl::method____ErasedTargetType::set_string 926 ns 926 ns 757342 -bm_rtl::method____ErasedTargetAndReturnType::set_string 929 ns 929 ns 754776 +bm_rtl::function__ErasedReturnType::set_string 891 ns 891 ns 785351 +bm_rtl::method____ErasedReturnType::set_string 911 ns 910 ns 770850 +bm_rtl::method____ErasedTargetType::set_string 895 ns 895 ns 780967 +bm_rtl::method____ErasedTargetAndReturnType::set_string 899 ns 899 ns 779662 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1174 ns 1173 ns 595250 +bm_call::direct__Function::get_string 1198 ns 1198 ns 584557 -bm_call::via_function_ptr__Function::get_string 1172 ns 1172 ns 597161 -bm_call::via_function_ptr____Method::get_string 1173 ns 1172 ns 597285 +bm_call::via_function_ptr__Function::get_string 1202 ns 1202 ns 583020 +bm_call::via_function_ptr____Method::get_string 1199 ns 1199 ns 583407 -bm_std::function_calls__Function::get_string 1173 ns 1172 ns 597217 -bm_std::function_calls____Method::get_string 1177 ns 1177 ns 595388 +bm_std::function_calls__Function::get_string 1199 ns 1199 ns 583877 +bm_std::function_calls____Method::get_string 1197 ns 1197 ns 584932 -bm_rtl::function_calls__Function::get_string 1172 ns 1171 ns 597813 -bm_rtl::method_calls______Method::get_string 1173 ns 1173 ns 596603 +bm_rtl::function_calls__Function::get_string 1199 ns 1199 ns 584180 +bm_rtl::method_calls______Method::get_string 1200 ns 1200 ns 583120 -bm_rtl::function__ErasedReturnType::get_string 1206 ns 1206 ns 580285 -bm_rtl::method____ErasedReturnType::get_string 1211 ns 1210 ns 578485 -bm_rtl::method____ErasedTargetType::get_string 1190 ns 1189 ns 588583 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1222 ns 1221 ns 573429 +bm_rtl::function__ErasedReturnType::get_string 1217 ns 1217 ns 574509 +bm_rtl::method____ErasedReturnType::get_string 1218 ns 1218 ns 573906 +bm_rtl::method____ErasedTargetType::get_string 1210 ns 1210 ns 579508 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1219 ns 1219 ns 575157 ----------------------------------- -[2025-11-04 11:41:04] >>> Run 1: workload scale = 58 +[2026-01-19 22:29:44] >>> Run 1: workload scale = 58 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 58 iterations ============================================= -2025-11-04T11:41:04+05:30 +2026-01-19T22:29:44+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1955,101 +1955,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 0.97, 0.63 +Load Average: 1.00, 0.97, 0.67 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1032 ns 1031 ns 676070 +bm_call::direct__Function::set_string 1035 ns 1035 ns 674729 -bm_call::via_function_ptr__Function::set_string 1032 ns 1031 ns 678824 -bm_call::via_function_ptr____Method::set_string 1032 ns 1031 ns 678016 +bm_call::via_function_ptr__Function::set_string 1008 ns 1008 ns 693696 +bm_call::via_function_ptr____Method::set_string 1006 ns 1006 ns 696133 -bm_std::function_calls__Function::set_string 1031 ns 1031 ns 677827 -bm_std::function_calls____Method::set_string 1036 ns 1036 ns 674869 +bm_std::function_calls__Function::set_string 1008 ns 1008 ns 694435 +bm_std::function_calls____Method::set_string 1032 ns 1032 ns 677461 -bm_rtl::function_calls__Function::set_string 1030 ns 1029 ns 679752 -bm_rtl::method_calls______Method::set_string 1032 ns 1031 ns 678902 +bm_rtl::function_calls__Function::set_string 1008 ns 1008 ns 695440 +bm_rtl::method_calls______Method::set_string 1006 ns 1006 ns 695446 -bm_rtl::function__ErasedReturnType::set_string 1042 ns 1042 ns 671992 -bm_rtl::method____ErasedReturnType::set_string 1044 ns 1044 ns 669776 -bm_rtl::method____ErasedTargetType::set_string 1048 ns 1048 ns 669636 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1057 ns 1057 ns 662078 +bm_rtl::function__ErasedReturnType::set_string 1017 ns 1017 ns 688023 +bm_rtl::method____ErasedReturnType::set_string 1021 ns 1021 ns 684886 +bm_rtl::method____ErasedTargetType::set_string 1022 ns 1022 ns 685121 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1023 ns 1023 ns 685964 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1320 ns 1319 ns 530013 +bm_call::direct__Function::get_string 1283 ns 1283 ns 545681 -bm_call::via_function_ptr__Function::get_string 1320 ns 1319 ns 530104 -bm_call::via_function_ptr____Method::get_string 1322 ns 1321 ns 529144 +bm_call::via_function_ptr__Function::get_string 1289 ns 1289 ns 543451 +bm_call::via_function_ptr____Method::get_string 1289 ns 1289 ns 543536 -bm_std::function_calls__Function::get_string 1321 ns 1320 ns 530134 -bm_std::function_calls____Method::get_string 1328 ns 1327 ns 526957 +bm_std::function_calls__Function::get_string 1289 ns 1289 ns 543144 +bm_std::function_calls____Method::get_string 1289 ns 1289 ns 542843 -bm_rtl::function_calls__Function::get_string 1320 ns 1319 ns 530249 -bm_rtl::method_calls______Method::get_string 1323 ns 1322 ns 529609 +bm_rtl::function_calls__Function::get_string 1289 ns 1289 ns 543220 +bm_rtl::method_calls______Method::get_string 1288 ns 1288 ns 543490 -bm_rtl::function__ErasedReturnType::get_string 1362 ns 1361 ns 514888 -bm_rtl::method____ErasedReturnType::get_string 1368 ns 1367 ns 512162 -bm_rtl::method____ErasedTargetType::get_string 1334 ns 1334 ns 524950 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1372 ns 1371 ns 510495 +bm_rtl::function__ErasedReturnType::get_string 1310 ns 1310 ns 534100 +bm_rtl::method____ErasedReturnType::get_string 1310 ns 1310 ns 534021 +bm_rtl::method____ErasedTargetType::get_string 1300 ns 1300 ns 537670 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1314 ns 1314 ns 532015 ----------------------------------- -[2025-11-04 11:41:22] >>> Run 2: workload scale = 58 +[2026-01-19 22:30:02] >>> Run 2: workload scale = 58 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 58 iterations ============================================= -2025-11-04T11:41:22+05:30 +2026-01-19T22:30:02+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 820.226 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 0.97, 0.64 +Load Average: 1.07, 0.99, 0.68 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1031 ns 1031 ns 675121 +bm_call::direct__Function::set_string 1032 ns 1032 ns 678112 -bm_call::via_function_ptr__Function::set_string 1031 ns 1030 ns 679015 -bm_call::via_function_ptr____Method::set_string 1032 ns 1031 ns 679476 +bm_call::via_function_ptr__Function::set_string 996 ns 995 ns 702900 +bm_call::via_function_ptr____Method::set_string 994 ns 994 ns 706621 -bm_std::function_calls__Function::set_string 1031 ns 1031 ns 677910 -bm_std::function_calls____Method::set_string 1041 ns 1041 ns 670513 +bm_std::function_calls__Function::set_string 997 ns 997 ns 702773 +bm_std::function_calls____Method::set_string 1018 ns 1018 ns 687379 -bm_rtl::function_calls__Function::set_string 1032 ns 1031 ns 680773 -bm_rtl::method_calls______Method::set_string 1032 ns 1032 ns 679489 +bm_rtl::function_calls__Function::set_string 996 ns 996 ns 704180 +bm_rtl::method_calls______Method::set_string 994 ns 994 ns 704523 -bm_rtl::function__ErasedReturnType::set_string 1042 ns 1041 ns 671509 -bm_rtl::method____ErasedReturnType::set_string 1046 ns 1045 ns 668786 -bm_rtl::method____ErasedTargetType::set_string 1051 ns 1050 ns 668456 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1051 ns 1051 ns 665655 +bm_rtl::function__ErasedReturnType::set_string 1009 ns 1009 ns 694404 +bm_rtl::method____ErasedReturnType::set_string 1011 ns 1011 ns 692029 +bm_rtl::method____ErasedTargetType::set_string 1011 ns 1011 ns 691866 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1015 ns 1015 ns 689500 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1321 ns 1320 ns 529589 +bm_call::direct__Function::get_string 1289 ns 1289 ns 542977 -bm_call::via_function_ptr__Function::get_string 1319 ns 1319 ns 527334 -bm_call::via_function_ptr____Method::get_string 1321 ns 1320 ns 530323 +bm_call::via_function_ptr__Function::get_string 1293 ns 1293 ns 540961 +bm_call::via_function_ptr____Method::get_string 1292 ns 1292 ns 541764 -bm_std::function_calls__Function::get_string 1321 ns 1320 ns 530845 -bm_std::function_calls____Method::get_string 1330 ns 1329 ns 526538 +bm_std::function_calls__Function::get_string 1294 ns 1294 ns 540441 +bm_std::function_calls____Method::get_string 1296 ns 1296 ns 540693 -bm_rtl::function_calls__Function::get_string 1320 ns 1320 ns 531222 -bm_rtl::method_calls______Method::get_string 1321 ns 1320 ns 530152 +bm_rtl::function_calls__Function::get_string 1294 ns 1294 ns 540763 +bm_rtl::method_calls______Method::get_string 1293 ns 1293 ns 542121 -bm_rtl::function__ErasedReturnType::get_string 1361 ns 1361 ns 514252 -bm_rtl::method____ErasedReturnType::get_string 1362 ns 1362 ns 510922 -bm_rtl::method____ErasedTargetType::get_string 1338 ns 1337 ns 523350 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1371 ns 1370 ns 512355 +bm_rtl::function__ErasedReturnType::get_string 1314 ns 1314 ns 532124 +bm_rtl::method____ErasedReturnType::get_string 1312 ns 1312 ns 533500 +bm_rtl::method____ErasedTargetType::get_string 1305 ns 1305 ns 536094 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1316 ns 1316 ns 531529 ----------------------------------- -[2025-11-04 11:41:40] >>> Run 3: workload scale = 58 +[2026-01-19 22:30:20] >>> Run 3: workload scale = 58 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 58 iterations ============================================= -2025-11-04T11:41:40+05:30 +2026-01-19T22:30:20+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2057,50 +2057,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 0.98, 0.64 +Load Average: 1.06, 0.99, 0.69 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1017 ns 1027 ns 679622 +bm_call::direct__Function::set_string 1034 ns 1034 ns 675093 -bm_call::via_function_ptr__Function::set_string 1015 ns 1029 ns 680787 -bm_call::via_function_ptr____Method::set_string 1016 ns 1029 ns 679486 +bm_call::via_function_ptr__Function::set_string 1003 ns 1003 ns 697584 +bm_call::via_function_ptr____Method::set_string 1002 ns 1002 ns 697925 -bm_std::function_calls__Function::set_string 1018 ns 1030 ns 680557 -bm_std::function_calls____Method::set_string 1030 ns 1040 ns 672817 +bm_std::function_calls__Function::set_string 1004 ns 1004 ns 696678 +bm_std::function_calls____Method::set_string 1007 ns 1007 ns 693877 -bm_rtl::function_calls__Function::set_string 1019 ns 1028 ns 680440 -bm_rtl::method_calls______Method::set_string 1021 ns 1030 ns 679426 +bm_rtl::function_calls__Function::set_string 1004 ns 1004 ns 697377 +bm_rtl::method_calls______Method::set_string 1003 ns 1003 ns 698516 -bm_rtl::function__ErasedReturnType::set_string 1033 ns 1041 ns 669612 -bm_rtl::method____ErasedReturnType::set_string 1033 ns 1041 ns 673638 -bm_rtl::method____ErasedTargetType::set_string 1044 ns 1050 ns 668898 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1043 ns 1049 ns 667070 +bm_rtl::function__ErasedReturnType::set_string 1018 ns 1018 ns 687788 +bm_rtl::method____ErasedReturnType::set_string 1034 ns 1034 ns 677095 +bm_rtl::method____ErasedTargetType::set_string 1020 ns 1020 ns 686724 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1026 ns 1026 ns 681885 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1315 ns 1321 ns 530349 +bm_call::direct__Function::get_string 1365 ns 1365 ns 512813 -bm_call::via_function_ptr__Function::get_string 1313 ns 1319 ns 530447 -bm_call::via_function_ptr____Method::get_string 1314 ns 1320 ns 529779 +bm_call::via_function_ptr__Function::get_string 1366 ns 1366 ns 512341 +bm_call::via_function_ptr____Method::get_string 1365 ns 1365 ns 512596 -bm_std::function_calls__Function::get_string 1317 ns 1322 ns 530934 -bm_std::function_calls____Method::get_string 1321 ns 1326 ns 527723 +bm_std::function_calls__Function::get_string 1366 ns 1366 ns 512693 +bm_std::function_calls____Method::get_string 1368 ns 1368 ns 511225 -bm_rtl::function_calls__Function::get_string 1317 ns 1321 ns 530957 -bm_rtl::method_calls______Method::get_string 1316 ns 1320 ns 530817 +bm_rtl::function_calls__Function::get_string 1366 ns 1366 ns 512277 +bm_rtl::method_calls______Method::get_string 1364 ns 1364 ns 512854 -bm_rtl::function__ErasedReturnType::get_string 1354 ns 1357 ns 515832 -bm_rtl::method____ErasedReturnType::get_string 1358 ns 1361 ns 508856 -bm_rtl::method____ErasedTargetType::get_string 1336 ns 1339 ns 522359 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1363 ns 1366 ns 511858 +bm_rtl::function__ErasedReturnType::get_string 1388 ns 1388 ns 504445 +bm_rtl::method____ErasedReturnType::get_string 1387 ns 1387 ns 505198 +bm_rtl::method____ErasedTargetType::get_string 1379 ns 1379 ns 507994 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1392 ns 1392 ns 502637 ----------------------------------- -[2025-11-04 11:41:58] >>> Run 1: workload scale = 66 +[2026-01-19 22:30:38] >>> Run 1: workload scale = 66 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 66 iterations ============================================= -2025-11-04T11:41:58+05:30 +2026-01-19T22:30:38+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2108,50 +2108,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.08, 0.99, 0.66 +Load Average: 1.04, 0.99, 0.69 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1657 ns 1660 ns 421772 +bm_call::direct__Function::set_string 1636 ns 1636 ns 427486 -bm_call::via_function_ptr__Function::set_string 1659 ns 1661 ns 421261 -bm_call::via_function_ptr____Method::set_string 1657 ns 1659 ns 421660 +bm_call::via_function_ptr__Function::set_string 1628 ns 1628 ns 430101 +bm_call::via_function_ptr____Method::set_string 1629 ns 1629 ns 430065 -bm_std::function_calls__Function::set_string 1659 ns 1661 ns 421457 -bm_std::function_calls____Method::set_string 1664 ns 1666 ns 417619 +bm_std::function_calls__Function::set_string 1628 ns 1628 ns 429723 +bm_std::function_calls____Method::set_string 1649 ns 1649 ns 424517 -bm_rtl::function_calls__Function::set_string 1655 ns 1657 ns 421767 -bm_rtl::method_calls______Method::set_string 1660 ns 1662 ns 421804 +bm_rtl::function_calls__Function::set_string 1627 ns 1627 ns 430133 +bm_rtl::method_calls______Method::set_string 1628 ns 1628 ns 430349 -bm_rtl::function__ErasedReturnType::set_string 1653 ns 1655 ns 418490 -bm_rtl::method____ErasedReturnType::set_string 1662 ns 1663 ns 424133 -bm_rtl::method____ErasedTargetType::set_string 1675 ns 1677 ns 417375 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1698 ns 1699 ns 412042 +bm_rtl::function__ErasedReturnType::set_string 1640 ns 1640 ns 427551 +bm_rtl::method____ErasedReturnType::set_string 1646 ns 1646 ns 425782 +bm_rtl::method____ErasedTargetType::set_string 1646 ns 1646 ns 425327 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1655 ns 1655 ns 423077 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2033 ns 2035 ns 343824 +bm_call::direct__Function::get_string 1990 ns 1990 ns 351983 -bm_call::via_function_ptr__Function::get_string 2029 ns 2030 ns 344946 -bm_call::via_function_ptr____Method::get_string 2029 ns 2030 ns 344269 +bm_call::via_function_ptr__Function::get_string 1992 ns 1992 ns 351406 +bm_call::via_function_ptr____Method::get_string 1992 ns 1992 ns 351688 -bm_std::function_calls__Function::get_string 2029 ns 2030 ns 344471 -bm_std::function_calls____Method::get_string 2037 ns 2038 ns 344001 +bm_std::function_calls__Function::get_string 1993 ns 1993 ns 351092 +bm_std::function_calls____Method::get_string 1997 ns 1997 ns 350755 -bm_rtl::function_calls__Function::get_string 2032 ns 2030 ns 344558 -bm_rtl::method_calls______Method::get_string 2034 ns 2032 ns 345067 +bm_rtl::function_calls__Function::get_string 1994 ns 1993 ns 350789 +bm_rtl::method_calls______Method::get_string 1991 ns 1990 ns 351526 -bm_rtl::function__ErasedReturnType::get_string 2076 ns 2075 ns 337071 -bm_rtl::method____ErasedReturnType::get_string 2082 ns 2080 ns 336215 -bm_rtl::method____ErasedTargetType::get_string 2049 ns 2048 ns 342138 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2085 ns 2083 ns 336181 +bm_rtl::function__ErasedReturnType::get_string 2012 ns 2012 ns 348023 +bm_rtl::method____ErasedReturnType::get_string 2014 ns 2014 ns 347409 +bm_rtl::method____ErasedTargetType::get_string 2006 ns 2006 ns 349290 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2017 ns 2017 ns 347043 ----------------------------------- -[2025-11-04 11:42:18] >>> Run 2: workload scale = 66 +[2026-01-19 22:30:58] >>> Run 2: workload scale = 66 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 66 iterations ============================================= -2025-11-04T11:42:18+05:30 +2026-01-19T22:30:58+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2159,50 +2159,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.05, 1.00, 0.67 +Load Average: 1.03, 1.00, 0.70 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1668 ns 1666 ns 420591 +bm_call::direct__Function::set_string 1633 ns 1632 ns 428557 -bm_call::via_function_ptr__Function::set_string 1666 ns 1665 ns 420519 -bm_call::via_function_ptr____Method::set_string 1665 ns 1664 ns 420393 +bm_call::via_function_ptr__Function::set_string 1638 ns 1638 ns 427508 +bm_call::via_function_ptr____Method::set_string 1637 ns 1637 ns 427652 -bm_std::function_calls__Function::set_string 1666 ns 1665 ns 420597 -bm_std::function_calls____Method::set_string 1670 ns 1669 ns 418433 +bm_std::function_calls__Function::set_string 1639 ns 1639 ns 424126 +bm_std::function_calls____Method::set_string 1655 ns 1654 ns 423338 -bm_rtl::function_calls__Function::set_string 1661 ns 1660 ns 421384 -bm_rtl::method_calls______Method::set_string 1664 ns 1663 ns 421078 +bm_rtl::function_calls__Function::set_string 1640 ns 1640 ns 427633 +bm_rtl::method_calls______Method::set_string 1637 ns 1637 ns 427542 -bm_rtl::function__ErasedReturnType::set_string 1674 ns 1674 ns 418103 -bm_rtl::method____ErasedReturnType::set_string 1676 ns 1676 ns 417778 -bm_rtl::method____ErasedTargetType::set_string 1681 ns 1680 ns 417245 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1684 ns 1683 ns 415930 +bm_rtl::function__ErasedReturnType::set_string 1651 ns 1651 ns 424262 +bm_rtl::method____ErasedReturnType::set_string 1654 ns 1654 ns 423134 +bm_rtl::method____ErasedTargetType::set_string 1653 ns 1653 ns 424141 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1655 ns 1655 ns 423152 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1986 ns 1985 ns 352254 +bm_call::direct__Function::get_string 1929 ns 1929 ns 363024 -bm_call::via_function_ptr__Function::get_string 1987 ns 1986 ns 352702 -bm_call::via_function_ptr____Method::get_string 1988 ns 1988 ns 352071 +bm_call::via_function_ptr__Function::get_string 1930 ns 1930 ns 360634 +bm_call::via_function_ptr____Method::get_string 1928 ns 1927 ns 363245 -bm_std::function_calls__Function::get_string 1987 ns 1986 ns 352640 -bm_std::function_calls____Method::get_string 1993 ns 1993 ns 350926 +bm_std::function_calls__Function::get_string 1934 ns 1934 ns 362508 +bm_std::function_calls____Method::get_string 1933 ns 1933 ns 362322 -bm_rtl::function_calls__Function::get_string 1986 ns 1986 ns 352094 -bm_rtl::method_calls______Method::get_string 1989 ns 1989 ns 351886 +bm_rtl::function_calls__Function::get_string 1933 ns 1933 ns 362483 +bm_rtl::method_calls______Method::get_string 1927 ns 1927 ns 362975 -bm_rtl::function__ErasedReturnType::get_string 2027 ns 2027 ns 345297 -bm_rtl::method____ErasedReturnType::get_string 2029 ns 2029 ns 345232 -bm_rtl::method____ErasedTargetType::get_string 2004 ns 2004 ns 349685 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2034 ns 2034 ns 344459 +bm_rtl::function__ErasedReturnType::get_string 1955 ns 1955 ns 358477 +bm_rtl::method____ErasedReturnType::get_string 1954 ns 1954 ns 358280 +bm_rtl::method____ErasedTargetType::get_string 1948 ns 1948 ns 359867 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1956 ns 1955 ns 357971 ----------------------------------- -[2025-11-04 11:42:38] >>> Run 3: workload scale = 66 +[2026-01-19 22:31:18] >>> Run 3: workload scale = 66 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 66 iterations ============================================= -2025-11-04T11:42:38+05:30 +2026-01-19T22:31:18+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2210,50 +2210,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.00, 0.67 +Load Average: 1.02, 1.00, 0.71 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1656 ns 1656 ns 419723 +bm_call::direct__Function::set_string 1645 ns 1644 ns 425112 -bm_call::via_function_ptr__Function::set_string 1655 ns 1655 ns 422991 -bm_call::via_function_ptr____Method::set_string 1657 ns 1657 ns 422611 +bm_call::via_function_ptr__Function::set_string 1637 ns 1637 ns 426452 +bm_call::via_function_ptr____Method::set_string 1634 ns 1634 ns 428366 -bm_std::function_calls__Function::set_string 1656 ns 1656 ns 422654 -bm_std::function_calls____Method::set_string 1671 ns 1671 ns 419437 +bm_std::function_calls__Function::set_string 1638 ns 1638 ns 428140 +bm_std::function_calls____Method::set_string 1643 ns 1643 ns 426062 -bm_rtl::function_calls__Function::set_string 1653 ns 1653 ns 423328 -bm_rtl::method_calls______Method::set_string 1658 ns 1658 ns 422855 +bm_rtl::function_calls__Function::set_string 1637 ns 1636 ns 427885 +bm_rtl::method_calls______Method::set_string 1627 ns 1627 ns 430136 -bm_rtl::function__ErasedReturnType::set_string 1671 ns 1671 ns 418940 -bm_rtl::method____ErasedReturnType::set_string 1672 ns 1672 ns 418670 -bm_rtl::method____ErasedTargetType::set_string 1678 ns 1678 ns 415373 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1679 ns 1679 ns 416931 +bm_rtl::function__ErasedReturnType::set_string 1649 ns 1649 ns 424893 +bm_rtl::method____ErasedReturnType::set_string 1654 ns 1654 ns 420943 +bm_rtl::method____ErasedTargetType::set_string 1647 ns 1647 ns 424746 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1652 ns 1652 ns 424812 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2035 ns 2036 ns 344330 +bm_call::direct__Function::get_string 1924 ns 1924 ns 363906 -bm_call::via_function_ptr__Function::get_string 2031 ns 2032 ns 344346 -bm_call::via_function_ptr____Method::get_string 2034 ns 2035 ns 344556 +bm_call::via_function_ptr__Function::get_string 1928 ns 1928 ns 363891 +bm_call::via_function_ptr____Method::get_string 1923 ns 1923 ns 364281 -bm_std::function_calls__Function::get_string 2033 ns 2033 ns 344441 -bm_std::function_calls____Method::get_string 2040 ns 2041 ns 343498 +bm_std::function_calls__Function::get_string 1928 ns 1928 ns 363618 +bm_std::function_calls____Method::get_string 1927 ns 1927 ns 362893 -bm_rtl::function_calls__Function::get_string 2032 ns 2032 ns 344410 -bm_rtl::method_calls______Method::get_string 2035 ns 2035 ns 344515 +bm_rtl::function_calls__Function::get_string 1928 ns 1928 ns 363817 +bm_rtl::method_calls______Method::get_string 1923 ns 1923 ns 363994 -bm_rtl::function__ErasedReturnType::get_string 2076 ns 2077 ns 336831 -bm_rtl::method____ErasedReturnType::get_string 2077 ns 2077 ns 336922 -bm_rtl::method____ErasedTargetType::get_string 2049 ns 2049 ns 340087 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2083 ns 2084 ns 336074 +bm_rtl::function__ErasedReturnType::get_string 1949 ns 1948 ns 359235 +bm_rtl::method____ErasedReturnType::get_string 1949 ns 1949 ns 357588 +bm_rtl::method____ErasedTargetType::get_string 1942 ns 1942 ns 360625 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1951 ns 1951 ns 359255 ----------------------------------- -[2025-11-04 11:42:58] >>> Run 1: workload scale = 74 +[2026-01-19 22:31:38] >>> Run 1: workload scale = 74 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 74 iterations ============================================= -2025-11-04T11:42:58+05:30 +2026-01-19T22:31:38+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2261,50 +2261,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 1.00, 0.68 +Load Average: 1.01, 1.00, 0.72 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1702 ns 1702 ns 410993 +bm_call::direct__Function::set_string 1704 ns 1704 ns 410694 -bm_call::via_function_ptr__Function::set_string 1700 ns 1701 ns 411578 -bm_call::via_function_ptr____Method::set_string 1701 ns 1701 ns 411305 +bm_call::via_function_ptr__Function::set_string 1719 ns 1718 ns 407996 +bm_call::via_function_ptr____Method::set_string 1716 ns 1716 ns 407893 -bm_std::function_calls__Function::set_string 1703 ns 1704 ns 410550 -bm_std::function_calls____Method::set_string 1706 ns 1706 ns 410063 +bm_std::function_calls__Function::set_string 1719 ns 1719 ns 407912 +bm_std::function_calls____Method::set_string 1725 ns 1725 ns 405488 -bm_rtl::function_calls__Function::set_string 1699 ns 1699 ns 412192 -bm_rtl::method_calls______Method::set_string 1700 ns 1701 ns 412000 +bm_rtl::function_calls__Function::set_string 1715 ns 1715 ns 407851 +bm_rtl::method_calls______Method::set_string 1717 ns 1716 ns 405912 -bm_rtl::function__ErasedReturnType::set_string 1739 ns 1739 ns 401572 -bm_rtl::method____ErasedReturnType::set_string 1724 ns 1725 ns 405479 -bm_rtl::method____ErasedTargetType::set_string 1726 ns 1727 ns 405687 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1775 ns 1776 ns 393707 +bm_rtl::function__ErasedReturnType::set_string 1729 ns 1729 ns 405040 +bm_rtl::method____ErasedReturnType::set_string 1749 ns 1749 ns 400776 +bm_rtl::method____ErasedTargetType::set_string 1731 ns 1731 ns 404458 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1742 ns 1741 ns 402397 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2054 ns 2054 ns 340080 +bm_call::direct__Function::get_string 2149 ns 2148 ns 325819 -bm_call::via_function_ptr__Function::get_string 2054 ns 2055 ns 340747 -bm_call::via_function_ptr____Method::get_string 2056 ns 2056 ns 340564 +bm_call::via_function_ptr__Function::get_string 2155 ns 2155 ns 325341 +bm_call::via_function_ptr____Method::get_string 2152 ns 2151 ns 325266 -bm_std::function_calls__Function::get_string 2054 ns 2055 ns 340353 -bm_std::function_calls____Method::get_string 2064 ns 2065 ns 339177 +bm_std::function_calls__Function::get_string 2155 ns 2155 ns 324846 +bm_std::function_calls____Method::get_string 2158 ns 2158 ns 324258 -bm_rtl::function_calls__Function::get_string 2059 ns 2060 ns 340492 -bm_rtl::method_calls______Method::get_string 2056 ns 2057 ns 339582 +bm_rtl::function_calls__Function::get_string 2152 ns 2152 ns 325164 +bm_rtl::method_calls______Method::get_string 2151 ns 2151 ns 323536 -bm_rtl::function__ErasedReturnType::get_string 2106 ns 2106 ns 331861 -bm_rtl::method____ErasedReturnType::get_string 2146 ns 2147 ns 326249 -bm_rtl::method____ErasedTargetType::get_string 2091 ns 2092 ns 334710 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2116 ns 2116 ns 330808 +bm_rtl::function__ErasedReturnType::get_string 2180 ns 2180 ns 321132 +bm_rtl::method____ErasedReturnType::get_string 2184 ns 2184 ns 320612 +bm_rtl::method____ErasedTargetType::get_string 2170 ns 2170 ns 322408 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2191 ns 2191 ns 320089 ----------------------------------- -[2025-11-04 11:43:18] >>> Run 2: workload scale = 74 +[2026-01-19 22:31:58] >>> Run 2: workload scale = 74 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 74 iterations ============================================= -2025-11-04T11:43:18+05:30 +2026-01-19T22:31:58+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2312,50 +2312,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 1.00, 0.69 +Load Average: 1.01, 1.00, 0.73 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1705 ns 1706 ns 410050 +bm_call::direct__Function::set_string 1687 ns 1687 ns 414957 -bm_call::via_function_ptr__Function::set_string 1703 ns 1703 ns 411193 -bm_call::via_function_ptr____Method::set_string 1704 ns 1704 ns 410529 +bm_call::via_function_ptr__Function::set_string 1692 ns 1692 ns 414692 +bm_call::via_function_ptr____Method::set_string 1690 ns 1690 ns 414379 -bm_std::function_calls__Function::set_string 1703 ns 1703 ns 411017 -bm_std::function_calls____Method::set_string 1713 ns 1713 ns 408256 +bm_std::function_calls__Function::set_string 1692 ns 1692 ns 414244 +bm_std::function_calls____Method::set_string 1697 ns 1697 ns 412772 -bm_rtl::function_calls__Function::set_string 1702 ns 1702 ns 410861 -bm_rtl::method_calls______Method::set_string 1702 ns 1703 ns 411267 +bm_rtl::function_calls__Function::set_string 1689 ns 1688 ns 414394 +bm_rtl::method_calls______Method::set_string 1691 ns 1690 ns 410590 -bm_rtl::function__ErasedReturnType::set_string 1758 ns 1759 ns 398120 -bm_rtl::method____ErasedReturnType::set_string 1746 ns 1747 ns 400302 -bm_rtl::method____ErasedTargetType::set_string 1738 ns 1739 ns 403136 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1717 ns 1718 ns 406824 +bm_rtl::function__ErasedReturnType::set_string 1700 ns 1699 ns 412056 +bm_rtl::method____ErasedReturnType::set_string 1723 ns 1722 ns 406836 +bm_rtl::method____ErasedTargetType::set_string 1700 ns 1700 ns 411498 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1704 ns 1704 ns 411937 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2062 ns 2062 ns 339419 +bm_call::direct__Function::get_string 2042 ns 2042 ns 342973 -bm_call::via_function_ptr__Function::get_string 2062 ns 2063 ns 339231 -bm_call::via_function_ptr____Method::get_string 2064 ns 2065 ns 339106 +bm_call::via_function_ptr__Function::get_string 2047 ns 2046 ns 341626 +bm_call::via_function_ptr____Method::get_string 2048 ns 2048 ns 341905 -bm_std::function_calls__Function::get_string 2062 ns 2063 ns 339570 -bm_std::function_calls____Method::get_string 2070 ns 2070 ns 338163 +bm_std::function_calls__Function::get_string 2047 ns 2047 ns 341688 +bm_std::function_calls____Method::get_string 2049 ns 2049 ns 341249 -bm_rtl::function_calls__Function::get_string 2064 ns 2065 ns 338796 -bm_rtl::method_calls______Method::get_string 2065 ns 2066 ns 339087 +bm_rtl::function_calls__Function::get_string 2047 ns 2046 ns 342026 +bm_rtl::method_calls______Method::get_string 2047 ns 2047 ns 340194 -bm_rtl::function__ErasedReturnType::get_string 2105 ns 2106 ns 332120 -bm_rtl::method____ErasedReturnType::get_string 2100 ns 2100 ns 333314 -bm_rtl::method____ErasedTargetType::get_string 2095 ns 2096 ns 333978 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2105 ns 2106 ns 332620 +bm_rtl::function__ErasedReturnType::get_string 2071 ns 2071 ns 338168 +bm_rtl::method____ErasedReturnType::get_string 2070 ns 2070 ns 338474 +bm_rtl::method____ErasedTargetType::get_string 2065 ns 2065 ns 339303 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2075 ns 2075 ns 337545 ----------------------------------- -[2025-11-04 11:43:38] >>> Run 3: workload scale = 74 +[2026-01-19 22:32:18] >>> Run 3: workload scale = 74 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 74 iterations ============================================= -2025-11-04T11:43:38+05:30 +2026-01-19T22:32:18+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2363,50 +2363,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.08, 1.02, 0.70 +Load Average: 1.00, 1.00, 0.73 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1725 ns 1726 ns 406312 +bm_call::direct__Function::set_string 1713 ns 1713 ns 408838 -bm_call::via_function_ptr__Function::set_string 1726 ns 1726 ns 405636 -bm_call::via_function_ptr____Method::set_string 1727 ns 1727 ns 405754 +bm_call::via_function_ptr__Function::set_string 1737 ns 1737 ns 402892 +bm_call::via_function_ptr____Method::set_string 1736 ns 1736 ns 403689 -bm_std::function_calls__Function::set_string 1724 ns 1725 ns 405818 -bm_std::function_calls____Method::set_string 1731 ns 1731 ns 404376 +bm_std::function_calls__Function::set_string 1738 ns 1738 ns 403157 +bm_std::function_calls____Method::set_string 1757 ns 1757 ns 394167 -bm_rtl::function_calls__Function::set_string 1726 ns 1726 ns 402702 -bm_rtl::method_calls______Method::set_string 1725 ns 1725 ns 406029 +bm_rtl::function_calls__Function::set_string 1736 ns 1736 ns 403487 +bm_rtl::method_calls______Method::set_string 1738 ns 1738 ns 403093 -bm_rtl::function__ErasedReturnType::set_string 1734 ns 1734 ns 403830 -bm_rtl::method____ErasedReturnType::set_string 1736 ns 1736 ns 403200 -bm_rtl::method____ErasedTargetType::set_string 1741 ns 1742 ns 402231 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1741 ns 1742 ns 401846 +bm_rtl::function__ErasedReturnType::set_string 1718 ns 1718 ns 407569 +bm_rtl::method____ErasedReturnType::set_string 1728 ns 1728 ns 405368 +bm_rtl::method____ErasedTargetType::set_string 1709 ns 1709 ns 409316 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1722 ns 1722 ns 406715 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2091 ns 2092 ns 334903 +bm_call::direct__Function::get_string 2169 ns 2169 ns 322266 -bm_call::via_function_ptr__Function::get_string 2087 ns 2087 ns 335367 -bm_call::via_function_ptr____Method::get_string 2090 ns 2090 ns 335217 +bm_call::via_function_ptr__Function::get_string 2173 ns 2173 ns 322587 +bm_call::via_function_ptr____Method::get_string 2174 ns 2173 ns 321966 -bm_std::function_calls__Function::get_string 2087 ns 2087 ns 335223 -bm_std::function_calls____Method::get_string 2093 ns 2094 ns 334231 +bm_std::function_calls__Function::get_string 2174 ns 2174 ns 321859 +bm_std::function_calls____Method::get_string 2190 ns 2190 ns 319040 -bm_rtl::function_calls__Function::get_string 2087 ns 2088 ns 333794 -bm_rtl::method_calls______Method::get_string 2089 ns 2089 ns 335209 +bm_rtl::function_calls__Function::get_string 2174 ns 2174 ns 321952 +bm_rtl::method_calls______Method::get_string 2174 ns 2174 ns 322166 -bm_rtl::function__ErasedReturnType::get_string 2130 ns 2130 ns 328921 -bm_rtl::method____ErasedReturnType::get_string 2131 ns 2131 ns 328695 -bm_rtl::method____ErasedTargetType::get_string 2109 ns 2110 ns 332174 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2139 ns 2140 ns 327151 +bm_rtl::function__ErasedReturnType::get_string 2154 ns 2154 ns 324962 +bm_rtl::method____ErasedReturnType::get_string 2156 ns 2156 ns 324748 +bm_rtl::method____ErasedTargetType::get_string 2144 ns 2144 ns 326407 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2163 ns 2163 ns 323836 ----------------------------------- -[2025-11-04 11:43:58] >>> Run 1: workload scale = 82 +[2026-01-19 22:32:38] >>> Run 1: workload scale = 82 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 82 iterations ============================================= -2025-11-04T11:43:58+05:30 +2026-01-19T22:32:38+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2414,152 +2414,152 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 1.01, 0.71 +Load Average: 1.00, 1.00, 0.74 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1797 ns 1797 ns 389525 +bm_call::direct__Function::set_string 1789 ns 1789 ns 391131 -bm_call::via_function_ptr__Function::set_string 1798 ns 1798 ns 389536 -bm_call::via_function_ptr____Method::set_string 1798 ns 1798 ns 389365 +bm_call::via_function_ptr__Function::set_string 1763 ns 1763 ns 397562 +bm_call::via_function_ptr____Method::set_string 1761 ns 1760 ns 397612 -bm_std::function_calls__Function::set_string 1800 ns 1801 ns 389607 -bm_std::function_calls____Method::set_string 1829 ns 1830 ns 386984 +bm_std::function_calls__Function::set_string 1761 ns 1761 ns 397459 +bm_std::function_calls____Method::set_string 1766 ns 1765 ns 395213 -bm_rtl::function_calls__Function::set_string 1810 ns 1810 ns 380113 -bm_rtl::method_calls______Method::set_string 1798 ns 1799 ns 389381 +bm_rtl::function_calls__Function::set_string 1761 ns 1761 ns 397571 +bm_rtl::method_calls______Method::set_string 1765 ns 1764 ns 397363 -bm_rtl::function__ErasedReturnType::set_string 1802 ns 1803 ns 388635 -bm_rtl::method____ErasedReturnType::set_string 1803 ns 1803 ns 388548 -bm_rtl::method____ErasedTargetType::set_string 1811 ns 1812 ns 386464 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1810 ns 1811 ns 386941 +bm_rtl::function__ErasedReturnType::set_string 1769 ns 1769 ns 395691 +bm_rtl::method____ErasedReturnType::set_string 1771 ns 1771 ns 395643 +bm_rtl::method____ErasedTargetType::set_string 1770 ns 1770 ns 395133 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1774 ns 1774 ns 395280 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2284 ns 2285 ns 306552 +bm_call::direct__Function::get_string 2245 ns 2244 ns 311980 -bm_call::via_function_ptr__Function::get_string 2283 ns 2284 ns 306654 -bm_call::via_function_ptr____Method::get_string 2286 ns 2286 ns 306173 +bm_call::via_function_ptr__Function::get_string 2248 ns 2248 ns 312148 +bm_call::via_function_ptr____Method::get_string 2246 ns 2246 ns 311894 -bm_std::function_calls__Function::get_string 2283 ns 2284 ns 306482 -bm_std::function_calls____Method::get_string 2290 ns 2290 ns 305618 +bm_std::function_calls__Function::get_string 2246 ns 2246 ns 311496 +bm_std::function_calls____Method::get_string 2262 ns 2261 ns 309168 -bm_rtl::function_calls__Function::get_string 2283 ns 2284 ns 306531 -bm_rtl::method_calls______Method::get_string 2285 ns 2285 ns 306323 +bm_rtl::function_calls__Function::get_string 2244 ns 2244 ns 311773 +bm_rtl::method_calls______Method::get_string 2248 ns 2248 ns 310230 -bm_rtl::function__ErasedReturnType::get_string 2326 ns 2327 ns 300755 -bm_rtl::method____ErasedReturnType::get_string 2325 ns 2325 ns 300885 -bm_rtl::method____ErasedTargetType::get_string 2310 ns 2311 ns 302696 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2330 ns 2330 ns 300284 +bm_rtl::function__ErasedReturnType::get_string 2282 ns 2282 ns 306813 +bm_rtl::method____ErasedReturnType::get_string 2290 ns 2290 ns 305848 +bm_rtl::method____ErasedTargetType::get_string 2274 ns 2274 ns 307761 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2290 ns 2290 ns 305896 ----------------------------------- -[2025-11-04 11:44:19] >>> Run 2: workload scale = 82 +[2026-01-19 22:32:59] >>> Run 2: workload scale = 82 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 82 iterations ============================================= -2025-11-04T11:44:19+05:30 +2026-01-19T22:32:59+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 851.313 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.10, 1.03, 0.72 +Load Average: 1.00, 1.00, 0.74 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1778 ns 1778 ns 393555 +bm_call::direct__Function::set_string 1778 ns 1778 ns 393210 -bm_call::via_function_ptr__Function::set_string 1783 ns 1783 ns 393270 -bm_call::via_function_ptr____Method::set_string 1785 ns 1785 ns 392516 +bm_call::via_function_ptr__Function::set_string 1748 ns 1748 ns 399918 +bm_call::via_function_ptr____Method::set_string 1747 ns 1747 ns 400516 -bm_std::function_calls__Function::set_string 1782 ns 1783 ns 393411 -bm_std::function_calls____Method::set_string 1789 ns 1789 ns 391871 +bm_std::function_calls__Function::set_string 1750 ns 1750 ns 400672 +bm_std::function_calls____Method::set_string 1755 ns 1755 ns 398944 -bm_rtl::function_calls__Function::set_string 1780 ns 1781 ns 392505 -bm_rtl::method_calls______Method::set_string 1778 ns 1778 ns 393604 +bm_rtl::function_calls__Function::set_string 1750 ns 1750 ns 400631 +bm_rtl::method_calls______Method::set_string 1749 ns 1749 ns 399395 -bm_rtl::function__ErasedReturnType::set_string 1778 ns 1779 ns 391999 -bm_rtl::method____ErasedReturnType::set_string 1782 ns 1783 ns 392539 -bm_rtl::method____ErasedTargetType::set_string 1794 ns 1794 ns 389821 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1786 ns 1787 ns 391779 +bm_rtl::function__ErasedReturnType::set_string 1760 ns 1760 ns 397764 +bm_rtl::method____ErasedReturnType::set_string 1760 ns 1760 ns 397768 +bm_rtl::method____ErasedTargetType::set_string 1762 ns 1762 ns 397246 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1763 ns 1763 ns 397178 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2181 ns 2181 ns 321380 +bm_call::direct__Function::get_string 2151 ns 2151 ns 325324 -bm_call::via_function_ptr__Function::get_string 2175 ns 2176 ns 321625 -bm_call::via_function_ptr____Method::get_string 2178 ns 2179 ns 321527 +bm_call::via_function_ptr__Function::get_string 2149 ns 2148 ns 325850 +bm_call::via_function_ptr____Method::get_string 2148 ns 2148 ns 326230 -bm_std::function_calls__Function::get_string 2175 ns 2176 ns 321528 -bm_std::function_calls____Method::get_string 2186 ns 2186 ns 320422 +bm_std::function_calls__Function::get_string 2149 ns 2149 ns 326263 +bm_std::function_calls____Method::get_string 2162 ns 2162 ns 323736 -bm_rtl::function_calls__Function::get_string 2173 ns 2174 ns 322110 -bm_rtl::method_calls______Method::get_string 2180 ns 2180 ns 321745 +bm_rtl::function_calls__Function::get_string 2147 ns 2147 ns 325662 +bm_rtl::method_calls______Method::get_string 2147 ns 2147 ns 325369 -bm_rtl::function__ErasedReturnType::get_string 2217 ns 2218 ns 315599 -bm_rtl::method____ErasedReturnType::get_string 2219 ns 2220 ns 315241 -bm_rtl::method____ErasedTargetType::get_string 2195 ns 2196 ns 317502 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2221 ns 2222 ns 315139 +bm_rtl::function__ErasedReturnType::get_string 2176 ns 2176 ns 322001 +bm_rtl::method____ErasedReturnType::get_string 2180 ns 2180 ns 320718 +bm_rtl::method____ErasedTargetType::get_string 2168 ns 2168 ns 322879 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2179 ns 2179 ns 321455 ----------------------------------- -[2025-11-04 11:44:39] >>> Run 3: workload scale = 82 +[2026-01-19 22:33:19] >>> Run 3: workload scale = 82 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 82 iterations ============================================= -2025-11-04T11:44:39+05:30 +2026-01-19T22:33:19+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4073.78 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.07, 1.03, 0.73 +Load Average: 1.00, 1.00, 0.75 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1789 ns 1789 ns 391681 +bm_call::direct__Function::set_string 1789 ns 1789 ns 391009 -bm_call::via_function_ptr__Function::set_string 1790 ns 1791 ns 391507 -bm_call::via_function_ptr____Method::set_string 1791 ns 1792 ns 390930 +bm_call::via_function_ptr__Function::set_string 1774 ns 1773 ns 395022 +bm_call::via_function_ptr____Method::set_string 1773 ns 1773 ns 394648 -bm_std::function_calls__Function::set_string 1787 ns 1788 ns 391890 -bm_std::function_calls____Method::set_string 1794 ns 1794 ns 390805 +bm_std::function_calls__Function::set_string 1774 ns 1774 ns 394608 +bm_std::function_calls____Method::set_string 1776 ns 1776 ns 394117 -bm_rtl::function_calls__Function::set_string 1786 ns 1787 ns 392220 -bm_rtl::method_calls______Method::set_string 1790 ns 1790 ns 391457 +bm_rtl::function_calls__Function::set_string 1773 ns 1773 ns 394842 +bm_rtl::method_calls______Method::set_string 1773 ns 1773 ns 393793 -bm_rtl::function__ErasedReturnType::set_string 1789 ns 1789 ns 391299 -bm_rtl::method____ErasedReturnType::set_string 1790 ns 1791 ns 391105 -bm_rtl::method____ErasedTargetType::set_string 1797 ns 1798 ns 389126 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1798 ns 1799 ns 388968 +bm_rtl::function__ErasedReturnType::set_string 1783 ns 1782 ns 392453 +bm_rtl::method____ErasedReturnType::set_string 1781 ns 1781 ns 393171 +bm_rtl::method____ErasedTargetType::set_string 1784 ns 1784 ns 392212 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1784 ns 1784 ns 392357 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2281 ns 2282 ns 307129 +bm_call::direct__Function::get_string 2259 ns 2259 ns 309811 -bm_call::via_function_ptr__Function::get_string 2277 ns 2278 ns 307178 -bm_call::via_function_ptr____Method::get_string 2282 ns 2283 ns 307132 +bm_call::via_function_ptr__Function::get_string 2262 ns 2262 ns 309475 +bm_call::via_function_ptr____Method::get_string 2261 ns 2261 ns 309595 -bm_std::function_calls__Function::get_string 2278 ns 2279 ns 307271 -bm_std::function_calls____Method::get_string 2289 ns 2290 ns 306018 +bm_std::function_calls__Function::get_string 2263 ns 2263 ns 309747 +bm_std::function_calls____Method::get_string 2275 ns 2275 ns 307808 -bm_rtl::function_calls__Function::get_string 2276 ns 2277 ns 307466 -bm_rtl::method_calls______Method::get_string 2283 ns 2283 ns 306991 +bm_rtl::function_calls__Function::get_string 2265 ns 2265 ns 309079 +bm_rtl::method_calls______Method::get_string 2262 ns 2262 ns 309463 -bm_rtl::function__ErasedReturnType::get_string 2316 ns 2316 ns 302121 -bm_rtl::method____ErasedReturnType::get_string 2317 ns 2318 ns 302362 -bm_rtl::method____ErasedTargetType::get_string 2302 ns 2303 ns 304074 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2325 ns 2325 ns 301350 +bm_rtl::function__ErasedReturnType::get_string 2302 ns 2302 ns 304220 +bm_rtl::method____ErasedReturnType::get_string 2303 ns 2303 ns 303903 +bm_rtl::method____ErasedTargetType::get_string 2286 ns 2286 ns 306033 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2299 ns 2299 ns 303954 ----------------------------------- -[2025-11-04 11:44:59] >>> Run 1: workload scale = 90 +[2026-01-19 22:33:39] >>> Run 1: workload scale = 90 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 90 iterations ============================================= -2025-11-04T11:44:59+05:30 +2026-01-19T22:33:39+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2567,50 +2567,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.05, 1.02, 0.74 +Load Average: 1.00, 1.00, 0.76 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1855 ns 1856 ns 377098 +bm_call::direct__Function::set_string 1861 ns 1860 ns 375999 -bm_call::via_function_ptr__Function::set_string 1855 ns 1855 ns 378267 -bm_call::via_function_ptr____Method::set_string 1853 ns 1853 ns 377675 +bm_call::via_function_ptr__Function::set_string 1835 ns 1835 ns 382030 +bm_call::via_function_ptr____Method::set_string 1834 ns 1834 ns 381859 -bm_std::function_calls__Function::set_string 1853 ns 1854 ns 378218 -bm_std::function_calls____Method::set_string 1862 ns 1862 ns 376248 +bm_std::function_calls__Function::set_string 1836 ns 1836 ns 381565 +bm_std::function_calls____Method::set_string 1840 ns 1840 ns 380541 -bm_rtl::function_calls__Function::set_string 1850 ns 1850 ns 378137 -bm_rtl::method_calls______Method::set_string 1855 ns 1856 ns 377582 +bm_rtl::function_calls__Function::set_string 1836 ns 1835 ns 381728 +bm_rtl::method_calls______Method::set_string 1834 ns 1834 ns 381897 -bm_rtl::function__ErasedReturnType::set_string 1862 ns 1863 ns 375415 -bm_rtl::method____ErasedReturnType::set_string 1864 ns 1865 ns 376111 -bm_rtl::method____ErasedTargetType::set_string 1869 ns 1870 ns 374624 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1870 ns 1870 ns 373729 +bm_rtl::function__ErasedReturnType::set_string 1847 ns 1847 ns 379564 +bm_rtl::method____ErasedReturnType::set_string 1873 ns 1873 ns 373534 +bm_rtl::method____ErasedTargetType::set_string 1847 ns 1847 ns 379013 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1846 ns 1846 ns 377722 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2285 ns 2285 ns 305947 +bm_call::direct__Function::get_string 2372 ns 2371 ns 295210 -bm_call::via_function_ptr__Function::get_string 2287 ns 2288 ns 305982 -bm_call::via_function_ptr____Method::get_string 2289 ns 2290 ns 305610 +bm_call::via_function_ptr__Function::get_string 2375 ns 2374 ns 295181 +bm_call::via_function_ptr____Method::get_string 2371 ns 2371 ns 295161 -bm_std::function_calls__Function::get_string 2287 ns 2288 ns 305896 -bm_std::function_calls____Method::get_string 2290 ns 2291 ns 305644 +bm_std::function_calls__Function::get_string 2373 ns 2373 ns 295444 +bm_std::function_calls____Method::get_string 2375 ns 2374 ns 294851 -bm_rtl::function_calls__Function::get_string 2287 ns 2288 ns 306110 -bm_rtl::method_calls______Method::get_string 2289 ns 2289 ns 305683 +bm_rtl::function_calls__Function::get_string 2375 ns 2375 ns 295197 +bm_rtl::method_calls______Method::get_string 2371 ns 2370 ns 295144 -bm_rtl::function__ErasedReturnType::get_string 2321 ns 2322 ns 301437 -bm_rtl::method____ErasedReturnType::get_string 2323 ns 2323 ns 301190 -bm_rtl::method____ErasedTargetType::get_string 2295 ns 2295 ns 304947 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2331 ns 2332 ns 300136 +bm_rtl::function__ErasedReturnType::get_string 2402 ns 2402 ns 291878 +bm_rtl::method____ErasedReturnType::get_string 2401 ns 2401 ns 291746 +bm_rtl::method____ErasedTargetType::get_string 2394 ns 2394 ns 292974 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2405 ns 2405 ns 291092 ----------------------------------- -[2025-11-04 11:45:20] >>> Run 2: workload scale = 90 +[2026-01-19 22:34:00] >>> Run 2: workload scale = 90 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 90 iterations ============================================= -2025-11-04T11:45:20+05:30 +2026-01-19T22:34:00+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2618,254 +2618,254 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.02, 0.74 +Load Average: 1.00, 1.00, 0.76 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1870 ns 1871 ns 373902 +bm_call::direct__Function::set_string 1849 ns 1849 ns 378261 -bm_call::via_function_ptr__Function::set_string 1866 ns 1866 ns 375733 -bm_call::via_function_ptr____Method::set_string 1860 ns 1860 ns 376397 +bm_call::via_function_ptr__Function::set_string 1823 ns 1823 ns 383390 +bm_call::via_function_ptr____Method::set_string 1826 ns 1826 ns 383423 -bm_std::function_calls__Function::set_string 1859 ns 1860 ns 376365 -bm_std::function_calls____Method::set_string 1862 ns 1863 ns 373798 +bm_std::function_calls__Function::set_string 1826 ns 1826 ns 383591 +bm_std::function_calls____Method::set_string 1831 ns 1831 ns 381967 -bm_rtl::function_calls__Function::set_string 1857 ns 1858 ns 376991 -bm_rtl::method_calls______Method::set_string 1862 ns 1863 ns 376328 +bm_rtl::function_calls__Function::set_string 1825 ns 1825 ns 383713 +bm_rtl::method_calls______Method::set_string 1827 ns 1826 ns 383181 -bm_rtl::function__ErasedReturnType::set_string 1865 ns 1865 ns 375497 -bm_rtl::method____ErasedReturnType::set_string 1868 ns 1868 ns 375141 -bm_rtl::method____ErasedTargetType::set_string 1872 ns 1873 ns 373961 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1876 ns 1876 ns 373051 +bm_rtl::function__ErasedReturnType::set_string 1834 ns 1834 ns 381783 +bm_rtl::method____ErasedReturnType::set_string 1864 ns 1864 ns 375810 +bm_rtl::method____ErasedTargetType::set_string 1837 ns 1837 ns 380838 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1836 ns 1836 ns 381270 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2317 ns 2317 ns 301971 +bm_call::direct__Function::get_string 2263 ns 2263 ns 309522 -bm_call::via_function_ptr__Function::get_string 2312 ns 2312 ns 302404 -bm_call::via_function_ptr____Method::get_string 2313 ns 2314 ns 302312 +bm_call::via_function_ptr__Function::get_string 2263 ns 2263 ns 309279 +bm_call::via_function_ptr____Method::get_string 2264 ns 2263 ns 309468 -bm_std::function_calls__Function::get_string 2312 ns 2313 ns 302678 -bm_std::function_calls____Method::get_string 2320 ns 2320 ns 301614 +bm_std::function_calls__Function::get_string 2264 ns 2264 ns 308991 +bm_std::function_calls____Method::get_string 2268 ns 2268 ns 308743 -bm_rtl::function_calls__Function::get_string 2313 ns 2314 ns 302455 -bm_rtl::method_calls______Method::get_string 2314 ns 2315 ns 302291 +bm_rtl::function_calls__Function::get_string 2264 ns 2263 ns 309197 +bm_rtl::method_calls______Method::get_string 2263 ns 2263 ns 309007 -bm_rtl::function__ErasedReturnType::get_string 2350 ns 2351 ns 297755 -bm_rtl::method____ErasedReturnType::get_string 2354 ns 2354 ns 297340 -bm_rtl::method____ErasedTargetType::get_string 2333 ns 2334 ns 300017 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2366 ns 2366 ns 295941 +bm_rtl::function__ErasedReturnType::get_string 2293 ns 2293 ns 305398 +bm_rtl::method____ErasedReturnType::get_string 2295 ns 2294 ns 305011 +bm_rtl::method____ErasedTargetType::get_string 2282 ns 2282 ns 306678 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2293 ns 2292 ns 305219 ----------------------------------- -[2025-11-04 11:45:40] >>> Run 3: workload scale = 90 +[2026-01-19 22:34:20] >>> Run 3: workload scale = 90 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 90 iterations ============================================= -2025-11-04T11:45:40+05:30 +2026-01-19T22:34:20+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3231.2 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.09, 1.04, 0.75 +Load Average: 1.00, 1.00, 0.77 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1868 ns 1869 ns 374396 +bm_call::direct__Function::set_string 1848 ns 1847 ns 379051 -bm_call::via_function_ptr__Function::set_string 1867 ns 1867 ns 374797 -bm_call::via_function_ptr____Method::set_string 1868 ns 1869 ns 374400 +bm_call::via_function_ptr__Function::set_string 1834 ns 1834 ns 381757 +bm_call::via_function_ptr____Method::set_string 1840 ns 1840 ns 380947 -bm_std::function_calls__Function::set_string 1867 ns 1868 ns 375065 -bm_std::function_calls____Method::set_string 1871 ns 1872 ns 374292 +bm_std::function_calls__Function::set_string 1836 ns 1835 ns 381485 +bm_std::function_calls____Method::set_string 1868 ns 1868 ns 375302 -bm_rtl::function_calls__Function::set_string 1867 ns 1867 ns 374894 -bm_rtl::method_calls______Method::set_string 1869 ns 1869 ns 374490 +bm_rtl::function_calls__Function::set_string 1834 ns 1834 ns 381787 +bm_rtl::method_calls______Method::set_string 1837 ns 1836 ns 381079 -bm_rtl::function__ErasedReturnType::set_string 1871 ns 1872 ns 373958 -bm_rtl::method____ErasedReturnType::set_string 1875 ns 1875 ns 373262 -bm_rtl::method____ErasedTargetType::set_string 1883 ns 1883 ns 371719 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1883 ns 1884 ns 371947 +bm_rtl::function__ErasedReturnType::set_string 1845 ns 1844 ns 379011 +bm_rtl::method____ErasedReturnType::set_string 1846 ns 1846 ns 379197 +bm_rtl::method____ErasedTargetType::set_string 1848 ns 1848 ns 379779 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1848 ns 1847 ns 379216 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2410 ns 2410 ns 290228 +bm_call::direct__Function::get_string 2293 ns 2292 ns 305828 -bm_call::via_function_ptr__Function::get_string 2410 ns 2411 ns 290367 -bm_call::via_function_ptr____Method::get_string 2412 ns 2413 ns 290266 +bm_call::via_function_ptr__Function::get_string 2290 ns 2290 ns 305261 +bm_call::via_function_ptr____Method::get_string 2296 ns 2296 ns 305268 -bm_std::function_calls__Function::get_string 2408 ns 2409 ns 290412 -bm_std::function_calls____Method::get_string 2417 ns 2418 ns 289516 +bm_std::function_calls__Function::get_string 2293 ns 2293 ns 305575 +bm_std::function_calls____Method::get_string 2302 ns 2302 ns 304368 -bm_rtl::function_calls__Function::get_string 2410 ns 2411 ns 290432 -bm_rtl::method_calls______Method::get_string 2411 ns 2411 ns 290130 +bm_rtl::function_calls__Function::get_string 2291 ns 2290 ns 305721 +bm_rtl::method_calls______Method::get_string 2295 ns 2295 ns 305440 -bm_rtl::function__ErasedReturnType::get_string 2448 ns 2449 ns 285773 -bm_rtl::method____ErasedReturnType::get_string 2453 ns 2454 ns 285286 -bm_rtl::method____ErasedTargetType::get_string 2433 ns 2434 ns 287844 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2458 ns 2458 ns 284818 +bm_rtl::function__ErasedReturnType::get_string 2322 ns 2322 ns 301402 +bm_rtl::method____ErasedReturnType::get_string 2325 ns 2325 ns 300979 +bm_rtl::method____ErasedTargetType::get_string 2313 ns 2313 ns 301214 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2321 ns 2321 ns 301863 ----------------------------------- -[2025-11-04 11:46:01] >>> Run 1: workload scale = 100 +[2026-01-19 22:34:41] >>> Run 1: workload scale = 100 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 100 iterations ============================================= -2025-11-04T11:46:01+05:30 +2026-01-19T22:34:41+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2637.51 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 1.03, 0.76 +Load Average: 1.00, 1.00, 0.77 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1962 ns 1962 ns 356628 +bm_call::direct__Function::set_string 1997 ns 1997 ns 348547 -bm_call::via_function_ptr__Function::set_string 1959 ns 1960 ns 357267 -bm_call::via_function_ptr____Method::set_string 1958 ns 1959 ns 357354 +bm_call::via_function_ptr__Function::set_string 1990 ns 1990 ns 352058 +bm_call::via_function_ptr____Method::set_string 1990 ns 1990 ns 351866 -bm_std::function_calls__Function::set_string 1958 ns 1959 ns 357026 -bm_std::function_calls____Method::set_string 1966 ns 1966 ns 356465 +bm_std::function_calls__Function::set_string 1989 ns 1989 ns 351920 +bm_std::function_calls____Method::set_string 1954 ns 1954 ns 358559 -bm_rtl::function_calls__Function::set_string 1959 ns 1959 ns 357324 -bm_rtl::method_calls______Method::set_string 1959 ns 1960 ns 357320 +bm_rtl::function_calls__Function::set_string 1989 ns 1989 ns 352081 +bm_rtl::method_calls______Method::set_string 1992 ns 1992 ns 351760 -bm_rtl::function__ErasedReturnType::set_string 1971 ns 1971 ns 354968 -bm_rtl::method____ErasedReturnType::set_string 1967 ns 1968 ns 355173 -bm_rtl::method____ErasedTargetType::set_string 1976 ns 1977 ns 354265 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1977 ns 1978 ns 353660 +bm_rtl::function__ErasedReturnType::set_string 1963 ns 1962 ns 357063 +bm_rtl::method____ErasedReturnType::set_string 1960 ns 1960 ns 357847 +bm_rtl::method____ErasedTargetType::set_string 1946 ns 1946 ns 359612 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1962 ns 1961 ns 356847 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2488 ns 2488 ns 281199 +bm_call::direct__Function::get_string 2504 ns 2504 ns 278402 -bm_call::via_function_ptr__Function::get_string 2486 ns 2487 ns 281683 -bm_call::via_function_ptr____Method::get_string 2490 ns 2491 ns 280922 +bm_call::via_function_ptr__Function::get_string 2501 ns 2501 ns 279911 +bm_call::via_function_ptr____Method::get_string 2502 ns 2502 ns 279036 -bm_std::function_calls__Function::get_string 2492 ns 2492 ns 280970 -bm_std::function_calls____Method::get_string 2494 ns 2495 ns 280222 +bm_std::function_calls__Function::get_string 2500 ns 2499 ns 280151 +bm_std::function_calls____Method::get_string 2459 ns 2458 ns 283683 -bm_rtl::function_calls__Function::get_string 2485 ns 2486 ns 281630 -bm_rtl::method_calls______Method::get_string 2488 ns 2489 ns 281276 +bm_rtl::function_calls__Function::get_string 2501 ns 2501 ns 279874 +bm_rtl::method_calls______Method::get_string 2504 ns 2504 ns 279888 -bm_rtl::function__ErasedReturnType::get_string 2523 ns 2524 ns 277389 -bm_rtl::method____ErasedReturnType::get_string 2527 ns 2528 ns 276820 -bm_rtl::method____ErasedTargetType::get_string 2504 ns 2504 ns 279332 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2533 ns 2534 ns 276551 +bm_rtl::function__ErasedReturnType::get_string 2482 ns 2481 ns 282147 +bm_rtl::method____ErasedReturnType::get_string 2485 ns 2485 ns 282054 +bm_rtl::method____ErasedTargetType::get_string 2467 ns 2467 ns 283637 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2488 ns 2487 ns 281941 ----------------------------------- -[2025-11-04 11:46:22] >>> Run 2: workload scale = 100 +[2026-01-19 22:35:01] >>> Run 2: workload scale = 100 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 100 iterations ============================================= -2025-11-04T11:46:22+05:30 +2026-01-19T22:35:01+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4866.2 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.03, 0.77 +Load Average: 1.00, 1.00, 0.78 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1958 ns 1959 ns 357126 +bm_call::direct__Function::set_string 1947 ns 1947 ns 359187 -bm_call::via_function_ptr__Function::set_string 1960 ns 1960 ns 357441 -bm_call::via_function_ptr____Method::set_string 1957 ns 1958 ns 357515 +bm_call::via_function_ptr__Function::set_string 1938 ns 1938 ns 361868 +bm_call::via_function_ptr____Method::set_string 1935 ns 1935 ns 361960 -bm_std::function_calls__Function::set_string 1957 ns 1958 ns 357880 -bm_std::function_calls____Method::set_string 1969 ns 1969 ns 356125 +bm_std::function_calls__Function::set_string 1937 ns 1936 ns 361911 +bm_std::function_calls____Method::set_string 1944 ns 1943 ns 360138 -bm_rtl::function_calls__Function::set_string 1959 ns 1959 ns 357313 -bm_rtl::method_calls______Method::set_string 1957 ns 1958 ns 357136 +bm_rtl::function_calls__Function::set_string 1934 ns 1934 ns 361967 +bm_rtl::method_calls______Method::set_string 1935 ns 1935 ns 360915 -bm_rtl::function__ErasedReturnType::set_string 1966 ns 1967 ns 355791 -bm_rtl::method____ErasedReturnType::set_string 1968 ns 1968 ns 355742 -bm_rtl::method____ErasedTargetType::set_string 1973 ns 1973 ns 354496 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1978 ns 1979 ns 353748 +bm_rtl::function__ErasedReturnType::set_string 1945 ns 1945 ns 360218 +bm_rtl::method____ErasedReturnType::set_string 1942 ns 1942 ns 358792 +bm_rtl::method____ErasedTargetType::set_string 1947 ns 1946 ns 359434 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1949 ns 1949 ns 359796 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2583 ns 2584 ns 270769 +bm_call::direct__Function::get_string 2451 ns 2450 ns 285493 -bm_call::via_function_ptr__Function::get_string 2585 ns 2586 ns 270684 -bm_call::via_function_ptr____Method::get_string 2586 ns 2587 ns 270687 +bm_call::via_function_ptr__Function::get_string 2453 ns 2453 ns 285744 +bm_call::via_function_ptr____Method::get_string 2451 ns 2451 ns 285759 -bm_std::function_calls__Function::get_string 2591 ns 2592 ns 270101 -bm_std::function_calls____Method::get_string 2592 ns 2593 ns 270162 +bm_std::function_calls__Function::get_string 2456 ns 2455 ns 285718 +bm_std::function_calls____Method::get_string 2469 ns 2469 ns 283176 -bm_rtl::function_calls__Function::get_string 2588 ns 2589 ns 270376 -bm_rtl::method_calls______Method::get_string 2591 ns 2591 ns 269776 +bm_rtl::function_calls__Function::get_string 2456 ns 2456 ns 285646 +bm_rtl::method_calls______Method::get_string 2451 ns 2451 ns 285771 -bm_rtl::function__ErasedReturnType::get_string 2619 ns 2620 ns 267102 -bm_rtl::method____ErasedReturnType::get_string 2619 ns 2620 ns 267036 -bm_rtl::method____ErasedTargetType::get_string 2601 ns 2602 ns 268965 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2625 ns 2626 ns 266419 +bm_rtl::function__ErasedReturnType::get_string 2500 ns 2500 ns 281548 +bm_rtl::method____ErasedReturnType::get_string 2599 ns 2599 ns 274914 +bm_rtl::method____ErasedTargetType::get_string 2587 ns 2586 ns 270912 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2595 ns 2595 ns 269299 ----------------------------------- -[2025-11-04 11:46:43] >>> Run 3: workload scale = 100 +[2026-01-19 22:35:22] >>> Run 3: workload scale = 100 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 100 iterations ============================================= -2025-11-04T11:46:43+05:30 +2026-01-19T22:35:22+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4684.54 MHz CPU s) +Run on (16 X 2685.67 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.09, 1.04, 0.78 +Load Average: 1.08, 1.02, 0.79 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1958 ns 1958 ns 357642 +bm_call::direct__Function::set_string 1940 ns 1940 ns 359624 -bm_call::via_function_ptr__Function::set_string 1976 ns 1976 ns 354513 -bm_call::via_function_ptr____Method::set_string 1975 ns 1975 ns 354409 +bm_call::via_function_ptr__Function::set_string 1944 ns 1944 ns 360107 +bm_call::via_function_ptr____Method::set_string 1942 ns 1942 ns 360542 -bm_std::function_calls__Function::set_string 1975 ns 1976 ns 354522 -bm_std::function_calls____Method::set_string 2040 ns 2040 ns 342871 +bm_std::function_calls__Function::set_string 1942 ns 1942 ns 357815 +bm_std::function_calls____Method::set_string 1963 ns 1963 ns 356515 -bm_rtl::function_calls__Function::set_string 1972 ns 1972 ns 355167 -bm_rtl::method_calls______Method::set_string 1973 ns 1974 ns 354698 +bm_rtl::function_calls__Function::set_string 1947 ns 1947 ns 360618 +bm_rtl::method_calls______Method::set_string 1943 ns 1943 ns 360619 -bm_rtl::function__ErasedReturnType::set_string 1969 ns 1970 ns 355340 -bm_rtl::method____ErasedReturnType::set_string 1974 ns 1975 ns 354492 -bm_rtl::method____ErasedTargetType::set_string 1979 ns 1980 ns 353705 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1982 ns 1982 ns 353134 +bm_rtl::function__ErasedReturnType::set_string 1977 ns 1976 ns 358735 +bm_rtl::method____ErasedReturnType::set_string 1946 ns 1945 ns 358855 +bm_rtl::method____ErasedTargetType::set_string 1949 ns 1949 ns 359699 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1949 ns 1949 ns 359356 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2570 ns 2571 ns 272122 +bm_call::direct__Function::get_string 2458 ns 2458 ns 284033 -bm_call::via_function_ptr__Function::get_string 2615 ns 2616 ns 267506 -bm_call::via_function_ptr____Method::get_string 2618 ns 2619 ns 267281 +bm_call::via_function_ptr__Function::get_string 2457 ns 2457 ns 285086 +bm_call::via_function_ptr____Method::get_string 2458 ns 2458 ns 285013 -bm_std::function_calls__Function::get_string 2618 ns 2618 ns 267315 -bm_std::function_calls____Method::get_string 2658 ns 2658 ns 263345 +bm_std::function_calls__Function::get_string 2455 ns 2455 ns 285133 +bm_std::function_calls____Method::get_string 2462 ns 2462 ns 284508 -bm_rtl::function_calls__Function::get_string 2616 ns 2617 ns 267494 -bm_rtl::method_calls______Method::get_string 2619 ns 2620 ns 267124 +bm_rtl::function_calls__Function::get_string 2457 ns 2457 ns 285057 +bm_rtl::method_calls______Method::get_string 2456 ns 2456 ns 285020 -bm_rtl::function__ErasedReturnType::get_string 2616 ns 2617 ns 267478 -bm_rtl::method____ErasedReturnType::get_string 2615 ns 2616 ns 267658 -bm_rtl::method____ErasedTargetType::get_string 2591 ns 2592 ns 270061 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2620 ns 2620 ns 266947 +bm_rtl::function__ErasedReturnType::get_string 2486 ns 2486 ns 281798 +bm_rtl::method____ErasedReturnType::get_string 2487 ns 2486 ns 281683 +bm_rtl::method____ErasedTargetType::get_string 2470 ns 2470 ns 283091 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2492 ns 2492 ns 280955 ----------------------------------- -[2025-11-04 11:47:04] >>> Run 1: workload scale = 120 +[2026-01-19 22:35:43] >>> Run 1: workload scale = 120 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 120 iterations ============================================= -2025-11-04T11:47:04+05:30 +2026-01-19T22:35:43+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2873,50 +2873,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 1.04, 0.78 +Load Average: 1.06, 1.01, 0.80 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 2135 ns 2136 ns 327606 +bm_call::direct__Function::set_string 2137 ns 2137 ns 326829 -bm_call::via_function_ptr__Function::set_string 2134 ns 2135 ns 327517 -bm_call::via_function_ptr____Method::set_string 2134 ns 2135 ns 327554 +bm_call::via_function_ptr__Function::set_string 2125 ns 2124 ns 329605 +bm_call::via_function_ptr____Method::set_string 2125 ns 2125 ns 329665 -bm_std::function_calls__Function::set_string 2138 ns 2139 ns 327567 -bm_std::function_calls____Method::set_string 2137 ns 2138 ns 326930 +bm_std::function_calls__Function::set_string 2124 ns 2124 ns 329576 +bm_std::function_calls____Method::set_string 2157 ns 2157 ns 324516 -bm_rtl::function_calls__Function::set_string 2134 ns 2135 ns 328040 -bm_rtl::method_calls______Method::set_string 2134 ns 2135 ns 327050 +bm_rtl::function_calls__Function::set_string 2123 ns 2123 ns 329881 +bm_rtl::method_calls______Method::set_string 2125 ns 2124 ns 329448 -bm_rtl::function__ErasedReturnType::set_string 2140 ns 2141 ns 326742 -bm_rtl::method____ErasedReturnType::set_string 2142 ns 2143 ns 326912 -bm_rtl::method____ErasedTargetType::set_string 2147 ns 2147 ns 326378 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2151 ns 2152 ns 325392 +bm_rtl::function__ErasedReturnType::set_string 2129 ns 2129 ns 328759 +bm_rtl::method____ErasedReturnType::set_string 2131 ns 2130 ns 305340 +bm_rtl::method____ErasedTargetType::set_string 2131 ns 2131 ns 328500 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2132 ns 2132 ns 328066 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2925 ns 2926 ns 239187 +bm_call::direct__Function::get_string 3007 ns 3007 ns 232978 -bm_call::via_function_ptr__Function::get_string 2922 ns 2923 ns 239675 -bm_call::via_function_ptr____Method::get_string 2919 ns 2920 ns 239757 +bm_call::via_function_ptr__Function::get_string 3011 ns 3010 ns 232634 +bm_call::via_function_ptr____Method::get_string 3012 ns 3011 ns 232464 -bm_std::function_calls__Function::get_string 2922 ns 2923 ns 239511 -bm_std::function_calls____Method::get_string 2927 ns 2927 ns 239088 +bm_std::function_calls__Function::get_string 3014 ns 3013 ns 232339 +bm_std::function_calls____Method::get_string 3019 ns 3019 ns 231831 -bm_rtl::function_calls__Function::get_string 2921 ns 2922 ns 239587 -bm_rtl::method_calls______Method::get_string 2919 ns 2920 ns 239850 +bm_rtl::function_calls__Function::get_string 3014 ns 3013 ns 232535 +bm_rtl::method_calls______Method::get_string 3008 ns 3008 ns 232654 -bm_rtl::function__ErasedReturnType::get_string 2970 ns 2971 ns 235687 -bm_rtl::method____ErasedReturnType::get_string 2969 ns 2970 ns 235693 -bm_rtl::method____ErasedTargetType::get_string 2939 ns 2940 ns 238228 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2973 ns 2974 ns 235380 +bm_rtl::function__ErasedReturnType::get_string 3051 ns 3051 ns 229522 +bm_rtl::method____ErasedReturnType::get_string 3040 ns 3040 ns 230285 +bm_rtl::method____ErasedTargetType::get_string 3040 ns 3040 ns 230408 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3042 ns 3041 ns 230091 ----------------------------------- -[2025-11-04 11:47:25] >>> Run 2: workload scale = 120 +[2026-01-19 22:36:05] >>> Run 2: workload scale = 120 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 120 iterations ============================================= -2025-11-04T11:47:25+05:30 +2026-01-19T22:36:05+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2924,50 +2924,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.03, 0.79 +Load Average: 1.04, 1.01, 0.80 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 2143 ns 2143 ns 327009 +bm_call::direct__Function::set_string 2128 ns 2128 ns 329355 -bm_call::via_function_ptr__Function::set_string 2144 ns 2144 ns 326962 -bm_call::via_function_ptr____Method::set_string 2143 ns 2143 ns 326336 +bm_call::via_function_ptr__Function::set_string 2125 ns 2125 ns 329104 +bm_call::via_function_ptr____Method::set_string 2128 ns 2128 ns 329260 -bm_std::function_calls__Function::set_string 2141 ns 2142 ns 326610 -bm_std::function_calls____Method::set_string 2147 ns 2148 ns 325479 +bm_std::function_calls__Function::set_string 2126 ns 2126 ns 329537 +bm_std::function_calls____Method::set_string 2159 ns 2158 ns 325160 -bm_rtl::function_calls__Function::set_string 2141 ns 2141 ns 326887 -bm_rtl::method_calls______Method::set_string 2141 ns 2142 ns 326810 +bm_rtl::function_calls__Function::set_string 2126 ns 2126 ns 329470 +bm_rtl::method_calls______Method::set_string 2125 ns 2125 ns 329217 -bm_rtl::function__ErasedReturnType::set_string 2149 ns 2149 ns 325633 -bm_rtl::method____ErasedReturnType::set_string 2152 ns 2152 ns 325416 -bm_rtl::method____ErasedTargetType::set_string 2151 ns 2152 ns 325646 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2159 ns 2160 ns 324017 +bm_rtl::function__ErasedReturnType::set_string 2134 ns 2134 ns 326337 +bm_rtl::method____ErasedReturnType::set_string 2140 ns 2140 ns 327348 +bm_rtl::method____ErasedTargetType::set_string 2137 ns 2137 ns 327992 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2150 ns 2150 ns 325220 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3033 ns 3034 ns 230681 +bm_call::direct__Function::get_string 2895 ns 2894 ns 242080 -bm_call::via_function_ptr__Function::get_string 3036 ns 3037 ns 230556 -bm_call::via_function_ptr____Method::get_string 3035 ns 3036 ns 230561 +bm_call::via_function_ptr__Function::get_string 2892 ns 2892 ns 242012 +bm_call::via_function_ptr____Method::get_string 2897 ns 2897 ns 241915 -bm_std::function_calls__Function::get_string 3036 ns 3037 ns 230558 -bm_std::function_calls____Method::get_string 3044 ns 3045 ns 229777 +bm_std::function_calls__Function::get_string 2894 ns 2894 ns 242013 +bm_std::function_calls____Method::get_string 2897 ns 2897 ns 241621 -bm_rtl::function_calls__Function::get_string 3036 ns 3036 ns 230539 -bm_rtl::method_calls______Method::get_string 3036 ns 3037 ns 230571 +bm_rtl::function_calls__Function::get_string 2891 ns 2891 ns 242113 +bm_rtl::method_calls______Method::get_string 2970 ns 2939 ns 241649 -bm_rtl::function__ErasedReturnType::get_string 3078 ns 3079 ns 227428 -bm_rtl::method____ErasedReturnType::get_string 3082 ns 3083 ns 227040 -bm_rtl::method____ErasedTargetType::get_string 3052 ns 3053 ns 229389 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3092 ns 3093 ns 226442 +bm_rtl::function__ErasedReturnType::get_string 2922 ns 2922 ns 239779 +bm_rtl::method____ErasedReturnType::get_string 2924 ns 2924 ns 238642 +bm_rtl::method____ErasedTargetType::get_string 2911 ns 2911 ns 240434 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2937 ns 2937 ns 237304 ----------------------------------- -[2025-11-04 11:47:47] >>> Run 3: workload scale = 120 +[2026-01-19 22:36:26] >>> Run 3: workload scale = 120 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 120 iterations ============================================= -2025-11-04T11:47:47+05:30 +2026-01-19T22:36:26+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2975,50 +2975,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 1.03, 0.80 +Load Average: 1.02, 1.01, 0.81 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 2146 ns 2147 ns 326155 +bm_call::direct__Function::set_string 2123 ns 2123 ns 330104 -bm_call::via_function_ptr__Function::set_string 2146 ns 2146 ns 326275 -bm_call::via_function_ptr____Method::set_string 2146 ns 2146 ns 326240 +bm_call::via_function_ptr__Function::set_string 2119 ns 2118 ns 331108 +bm_call::via_function_ptr____Method::set_string 2143 ns 2142 ns 327007 -bm_std::function_calls__Function::set_string 2145 ns 2146 ns 325899 -bm_std::function_calls____Method::set_string 2147 ns 2148 ns 325784 +bm_std::function_calls__Function::set_string 2117 ns 2117 ns 330772 +bm_std::function_calls____Method::set_string 2123 ns 2123 ns 329985 -bm_rtl::function_calls__Function::set_string 2143 ns 2143 ns 326216 -bm_rtl::method_calls______Method::set_string 2144 ns 2144 ns 326155 +bm_rtl::function_calls__Function::set_string 2118 ns 2118 ns 331201 +bm_rtl::method_calls______Method::set_string 2123 ns 2123 ns 330834 -bm_rtl::function__ErasedReturnType::set_string 2152 ns 2153 ns 325106 -bm_rtl::method____ErasedReturnType::set_string 2155 ns 2156 ns 324821 -bm_rtl::method____ErasedTargetType::set_string 2156 ns 2157 ns 324752 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2161 ns 2162 ns 323898 +bm_rtl::function__ErasedReturnType::set_string 2132 ns 2131 ns 328810 +bm_rtl::method____ErasedReturnType::set_string 2157 ns 2156 ns 324121 +bm_rtl::method____ErasedTargetType::set_string 2135 ns 2134 ns 321782 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2130 ns 2130 ns 328678 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3035 ns 3036 ns 230716 +bm_call::direct__Function::get_string 2890 ns 2890 ns 242683 -bm_call::via_function_ptr__Function::get_string 3033 ns 3034 ns 230686 -bm_call::via_function_ptr____Method::get_string 3034 ns 3035 ns 230636 +bm_call::via_function_ptr__Function::get_string 2892 ns 2891 ns 237467 +bm_call::via_function_ptr____Method::get_string 2891 ns 2891 ns 242306 -bm_std::function_calls__Function::get_string 3034 ns 3034 ns 230656 -bm_std::function_calls____Method::get_string 3047 ns 3048 ns 230042 +bm_std::function_calls__Function::get_string 2891 ns 2891 ns 242434 +bm_std::function_calls____Method::get_string 2893 ns 2892 ns 242299 -bm_rtl::function_calls__Function::get_string 3040 ns 3041 ns 230018 -bm_rtl::method_calls______Method::get_string 3034 ns 3035 ns 230309 +bm_rtl::function_calls__Function::get_string 2888 ns 2887 ns 242305 +bm_rtl::method_calls______Method::get_string 2897 ns 2897 ns 242416 -bm_rtl::function__ErasedReturnType::get_string 3080 ns 3080 ns 227057 -bm_rtl::method____ErasedReturnType::get_string 3083 ns 3084 ns 226951 -bm_rtl::method____ErasedTargetType::get_string 3056 ns 3057 ns 229016 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3086 ns 3087 ns 226766 +bm_rtl::function__ErasedReturnType::get_string 2918 ns 2918 ns 239887 +bm_rtl::method____ErasedReturnType::get_string 3088 ns 3087 ns 238252 +bm_rtl::method____ErasedTargetType::get_string 2907 ns 2907 ns 236594 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2929 ns 2928 ns 239651 ----------------------------------- -[2025-11-04 11:48:09] >>> Run 1: workload scale = 150 +[2026-01-19 22:36:48] >>> Run 1: workload scale = 150 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 150 iterations ============================================= -2025-11-04T11:48:09+05:30 +2026-01-19T22:36:48+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -3026,142 +3026,142 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 1.03, 0.80 +Load Average: 1.10, 1.03, 0.82 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 3513 ns 3514 ns 199230 +bm_call::direct__Function::set_string 3502 ns 3502 ns 200154 -bm_call::via_function_ptr__Function::set_string 3518 ns 3518 ns 199138 -bm_call::via_function_ptr____Method::set_string 3515 ns 3517 ns 199100 +bm_call::via_function_ptr__Function::set_string 3514 ns 3514 ns 199717 +bm_call::via_function_ptr____Method::set_string 3511 ns 3511 ns 198567 -bm_std::function_calls__Function::set_string 3513 ns 3514 ns 199262 -bm_std::function_calls____Method::set_string 3522 ns 3523 ns 198748 +bm_std::function_calls__Function::set_string 3515 ns 3515 ns 199394 +bm_std::function_calls____Method::set_string 3485 ns 3485 ns 200801 -bm_rtl::function_calls__Function::set_string 3511 ns 3512 ns 199310 -bm_rtl::method_calls______Method::set_string 3513 ns 3514 ns 199163 +bm_rtl::function_calls__Function::set_string 3511 ns 3510 ns 199483 +bm_rtl::method_calls______Method::set_string 3515 ns 3514 ns 199409 -bm_rtl::function__ErasedReturnType::set_string 3524 ns 3525 ns 198360 -bm_rtl::method____ErasedReturnType::set_string 3524 ns 3525 ns 198512 -bm_rtl::method____ErasedTargetType::set_string 3528 ns 3529 ns 198173 -bm_rtl::method____ErasedTargetAndReturnType::set_string 3534 ns 3535 ns 198093 +bm_rtl::function__ErasedReturnType::set_string 3524 ns 3524 ns 196051 +bm_rtl::method____ErasedReturnType::set_string 3496 ns 3495 ns 200018 +bm_rtl::method____ErasedTargetType::set_string 3531 ns 3531 ns 197723 +bm_rtl::method____ErasedTargetAndReturnType::set_string 3534 ns 3533 ns 198440 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4425 ns 4426 ns 158169 +bm_call::direct__Function::get_string 4399 ns 4399 ns 159236 -bm_call::via_function_ptr__Function::get_string 4427 ns 4429 ns 158159 -bm_call::via_function_ptr____Method::get_string 4427 ns 4428 ns 158046 +bm_call::via_function_ptr__Function::get_string 4399 ns 4398 ns 159393 +bm_call::via_function_ptr____Method::get_string 4393 ns 4392 ns 159311 -bm_std::function_calls__Function::get_string 4425 ns 4427 ns 158030 -bm_std::function_calls____Method::get_string 4437 ns 4438 ns 157709 +bm_std::function_calls__Function::get_string 4393 ns 4393 ns 158980 +bm_std::function_calls____Method::get_string 4394 ns 4394 ns 159365 -bm_rtl::function_calls__Function::get_string 4426 ns 4427 ns 158157 -bm_rtl::method_calls______Method::get_string 4429 ns 4430 ns 158050 +bm_rtl::function_calls__Function::get_string 4391 ns 4391 ns 159379 +bm_rtl::method_calls______Method::get_string 4400 ns 4399 ns 159263 -bm_rtl::function__ErasedReturnType::get_string 4477 ns 4478 ns 156294 -bm_rtl::method____ErasedReturnType::get_string 4477 ns 4479 ns 156172 -bm_rtl::method____ErasedTargetType::get_string 4454 ns 4456 ns 157109 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4486 ns 4487 ns 155951 +bm_rtl::function__ErasedReturnType::get_string 4437 ns 4436 ns 157746 +bm_rtl::method____ErasedReturnType::get_string 4434 ns 4434 ns 157288 +bm_rtl::method____ErasedTargetType::get_string 4426 ns 4425 ns 158114 +bm_rtl::method____ErasedTargetAndReturnType::get_string 4434 ns 4434 ns 157500 ----------------------------------- -[2025-11-04 11:48:34] >>> Run 2: workload scale = 150 +[2026-01-19 22:37:13] >>> Run 2: workload scale = 150 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 150 iterations ============================================= -2025-11-04T11:48:34+05:30 +2026-01-19T22:37:13+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4900.01 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 1.02, 0.81 +Load Average: 1.06, 1.02, 0.83 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 3523 ns 3524 ns 198828 +bm_call::direct__Function::set_string 3527 ns 3526 ns 198689 -bm_call::via_function_ptr__Function::set_string 3520 ns 3521 ns 199061 -bm_call::via_function_ptr____Method::set_string 3524 ns 3525 ns 198822 +bm_call::via_function_ptr__Function::set_string 3483 ns 3483 ns 200998 +bm_call::via_function_ptr____Method::set_string 3488 ns 3487 ns 201053 -bm_std::function_calls__Function::set_string 3518 ns 3519 ns 198928 -bm_std::function_calls____Method::set_string 3530 ns 3531 ns 198583 +bm_std::function_calls__Function::set_string 3485 ns 3484 ns 200867 +bm_std::function_calls____Method::set_string 3490 ns 3489 ns 200690 -bm_rtl::function_calls__Function::set_string 3521 ns 3522 ns 198936 -bm_rtl::method_calls______Method::set_string 3525 ns 3526 ns 198848 +bm_rtl::function_calls__Function::set_string 3483 ns 3482 ns 200910 +bm_rtl::method_calls______Method::set_string 3487 ns 3487 ns 200961 -bm_rtl::function__ErasedReturnType::set_string 3527 ns 3528 ns 198359 -bm_rtl::method____ErasedReturnType::set_string 3527 ns 3528 ns 197890 -bm_rtl::method____ErasedTargetType::set_string 3534 ns 3535 ns 197890 -bm_rtl::method____ErasedTargetAndReturnType::set_string 3536 ns 3537 ns 197487 +bm_rtl::function__ErasedReturnType::set_string 3493 ns 3493 ns 200445 +bm_rtl::method____ErasedReturnType::set_string 3491 ns 3491 ns 199857 +bm_rtl::method____ErasedTargetType::set_string 3495 ns 3495 ns 200225 +bm_rtl::method____ErasedTargetAndReturnType::set_string 3495 ns 3494 ns 199782 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4456 ns 4457 ns 157300 +bm_call::direct__Function::get_string 4404 ns 4404 ns 159253 -bm_call::via_function_ptr__Function::get_string 4449 ns 4450 ns 157301 -bm_call::via_function_ptr____Method::get_string 4457 ns 4458 ns 157197 +bm_call::via_function_ptr__Function::get_string 4394 ns 4394 ns 159252 +bm_call::via_function_ptr____Method::get_string 4504 ns 4504 ns 159232 -bm_std::function_calls__Function::get_string 4449 ns 4450 ns 157266 -bm_std::function_calls____Method::get_string 4458 ns 4460 ns 156701 +bm_std::function_calls__Function::get_string 4571 ns 4570 ns 153180 +bm_std::function_calls____Method::get_string 4586 ns 4585 ns 152353 -bm_rtl::function_calls__Function::get_string 4455 ns 4456 ns 157313 -bm_rtl::method_calls______Method::get_string 4451 ns 4453 ns 157215 +bm_rtl::function_calls__Function::get_string 4578 ns 4578 ns 153148 +bm_rtl::method_calls______Method::get_string 4571 ns 4571 ns 153119 -bm_rtl::function__ErasedReturnType::get_string 4495 ns 4497 ns 155850 -bm_rtl::method____ErasedReturnType::get_string 4494 ns 4495 ns 155702 -bm_rtl::method____ErasedTargetType::get_string 4470 ns 4471 ns 156262 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4508 ns 4510 ns 155393 +bm_rtl::function__ErasedReturnType::get_string 4602 ns 4601 ns 152206 +bm_rtl::method____ErasedReturnType::get_string 4607 ns 4606 ns 151999 +bm_rtl::method____ErasedTargetType::get_string 4589 ns 4588 ns 152669 +bm_rtl::method____ErasedTargetAndReturnType::get_string 4600 ns 4600 ns 152200 ----------------------------------- -[2025-11-04 11:48:59] >>> Run 3: workload scale = 150 +[2026-01-19 22:37:38] >>> Run 3: workload scale = 150 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 150 iterations ============================================= -2025-11-04T11:48:59+05:30 +2026-01-19T22:37:38+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2162.72 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 1.02, 0.82 +Load Average: 1.04, 1.02, 0.83 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 3504 ns 3505 ns 199689 +bm_call::direct__Function::set_string 3547 ns 3547 ns 197337 -bm_call::via_function_ptr__Function::set_string 3505 ns 3506 ns 199740 -bm_call::via_function_ptr____Method::set_string 3504 ns 3505 ns 199829 +bm_call::via_function_ptr__Function::set_string 3484 ns 3484 ns 200911 +bm_call::via_function_ptr____Method::set_string 3484 ns 3484 ns 200978 -bm_std::function_calls__Function::set_string 3502 ns 3503 ns 199609 -bm_std::function_calls____Method::set_string 3512 ns 3513 ns 199226 +bm_std::function_calls__Function::set_string 3484 ns 3484 ns 200913 +bm_std::function_calls____Method::set_string 3485 ns 3485 ns 200887 -bm_rtl::function_calls__Function::set_string 3505 ns 3506 ns 199956 -bm_rtl::method_calls______Method::set_string 3504 ns 3505 ns 199794 +bm_rtl::function_calls__Function::set_string 3482 ns 3482 ns 201096 +bm_rtl::method_calls______Method::set_string 3485 ns 3484 ns 200963 -bm_rtl::function__ErasedReturnType::set_string 3519 ns 3520 ns 198946 -bm_rtl::method____ErasedReturnType::set_string 3518 ns 3519 ns 198913 -bm_rtl::method____ErasedTargetType::set_string 3525 ns 3526 ns 198501 -bm_rtl::method____ErasedTargetAndReturnType::set_string 3525 ns 3526 ns 198610 +bm_rtl::function__ErasedReturnType::set_string 3490 ns 3490 ns 200491 +bm_rtl::method____ErasedReturnType::set_string 3491 ns 3491 ns 200589 +bm_rtl::method____ErasedTargetType::set_string 3496 ns 3495 ns 200278 +bm_rtl::method____ErasedTargetAndReturnType::set_string 3496 ns 3496 ns 200227 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4431 ns 4432 ns 157921 +bm_call::direct__Function::get_string 4561 ns 4560 ns 153507 -bm_call::via_function_ptr__Function::get_string 4440 ns 4441 ns 157629 -bm_call::via_function_ptr____Method::get_string 4441 ns 4442 ns 157533 +bm_call::via_function_ptr__Function::get_string 4560 ns 4559 ns 153553 +bm_call::via_function_ptr____Method::get_string 4559 ns 4559 ns 153622 -bm_std::function_calls__Function::get_string 4440 ns 4441 ns 157655 -bm_std::function_calls____Method::get_string 4437 ns 4438 ns 157742 +bm_std::function_calls__Function::get_string 4559 ns 4559 ns 153581 +bm_std::function_calls____Method::get_string 4578 ns 4578 ns 152921 -bm_rtl::function_calls__Function::get_string 4439 ns 4440 ns 157633 -bm_rtl::method_calls______Method::get_string 4441 ns 4443 ns 157563 +bm_rtl::function_calls__Function::get_string 4627 ns 4627 ns 153630 +bm_rtl::method_calls______Method::get_string 4486 ns 4484 ns 158892 -bm_rtl::function__ErasedReturnType::get_string 4470 ns 4471 ns 156524 -bm_rtl::method____ErasedReturnType::get_string 4472 ns 4474 ns 156472 -bm_rtl::method____ErasedTargetType::get_string 4448 ns 4449 ns 157314 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4478 ns 4479 ns 156261 +bm_rtl::function__ErasedReturnType::get_string 4433 ns 4433 ns 156084 +bm_rtl::method____ErasedReturnType::get_string 4433 ns 4432 ns 157643 +bm_rtl::method____ErasedTargetType::get_string 4403 ns 4403 ns 158980 +bm_rtl::method____ErasedTargetAndReturnType::get_string 4422 ns 4421 ns 157853 ----------------------------------- All benchmarks completed. From f5d2a89ea085cc1ca78b25cbbc1f7317449e8c86 Mon Sep 17 00:00:00 2001 From: neeraj Date: Mon, 19 Jan 2026 23:29:34 +0530 Subject: [PATCH 011/102] string: benchmark logs added. --- docs/benchmark_runs_string.log | 3190 ++++++++++++++++---------------- 1 file changed, 1595 insertions(+), 1595 deletions(-) diff --git a/docs/benchmark_runs_string.log b/docs/benchmark_runs_string.log index 8411fb33..2cbe9a25 100644 --- a/docs/benchmark_runs_string.log +++ b/docs/benchmark_runs_string.log @@ -2,116 +2,116 @@ Starting benchmark runs... Binary: ./bin/RTLBenchmarkApp Log: ./benchmark_runs.log =================================== -[2025-11-04 12:16:26] >>> Run 1: workload scale = 0 +[2026-01-19 23:00:30] >>> Run 1: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T12:16:26+05:30 +2026-01-19T23:00:30+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3710.04 MHz CPU s) +Run on (16 X 1167.28 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 0.72, 1.01, 0.81 +Load Average: 0.83, 0.71, 0.51 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 10.7 ns 10.7 ns 63153409 +bm_call::direct__Function::set_string 9.81 ns 9.81 ns 71490262 -bm_call::via_function_ptr__Function::set_string 11.0 ns 11.0 ns 62273630 -bm_call::via_function_ptr____Method::set_string 11.1 ns 11.1 ns 62565849 +bm_call::via_function_ptr__Function::set_string 10.6 ns 10.6 ns 66175516 +bm_call::via_function_ptr____Method::set_string 10.5 ns 10.5 ns 65825819 -bm_std::function_calls__Function::set_string 11.3 ns 11.3 ns 60820859 -bm_std::function_calls____Method::set_string 11.3 ns 11.2 ns 62223001 +bm_std::function_calls__Function::set_string 10.7 ns 10.7 ns 65252218 +bm_std::function_calls____Method::set_string 10.6 ns 10.6 ns 66308995 -bm_rtl::function_calls__Function::set_string 11.8 ns 11.8 ns 62334625 -bm_rtl::method_calls______Method::set_string 11.7 ns 11.7 ns 58038245 +bm_rtl::function_calls__Function::set_string 10.2 ns 10.2 ns 70267504 +bm_rtl::method_calls______Method::set_string 10.5 ns 10.5 ns 66588972 -bm_rtl::function__ErasedReturnType::set_string 13.6 ns 13.6 ns 51307142 -bm_rtl::method____ErasedReturnType::set_string 14.5 ns 14.5 ns 49013292 -bm_rtl::method____ErasedTargetType::set_string 14.4 ns 14.4 ns 48282886 -bm_rtl::method____ErasedTargetAndReturnType::set_string 14.3 ns 14.3 ns 48290341 +bm_rtl::function__ErasedReturnType::set_string 14.2 ns 14.2 ns 49256488 +bm_rtl::method____ErasedReturnType::set_string 13.6 ns 13.6 ns 51807316 +bm_rtl::method____ErasedTargetType::set_string 14.5 ns 14.5 ns 48461435 +bm_rtl::method____ErasedTargetAndReturnType::set_string 15.3 ns 15.3 ns 45341839 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 12.3 ns 12.3 ns 56910624 +bm_call::direct__Function::get_string 12.8 ns 12.8 ns 55715198 -bm_call::via_function_ptr__Function::get_string 13.3 ns 13.3 ns 54725237 -bm_call::via_function_ptr____Method::get_string 13.5 ns 13.5 ns 51174087 +bm_call::via_function_ptr__Function::get_string 12.7 ns 12.7 ns 55284583 +bm_call::via_function_ptr____Method::get_string 12.4 ns 12.4 ns 56197664 -bm_std::function_calls__Function::get_string 13.4 ns 13.4 ns 51284624 -bm_std::function_calls____Method::get_string 13.4 ns 13.4 ns 53332275 +bm_std::function_calls__Function::get_string 12.5 ns 12.5 ns 56330937 +bm_std::function_calls____Method::get_string 13.1 ns 13.1 ns 53156802 -bm_rtl::function_calls__Function::get_string 12.9 ns 12.9 ns 51676343 -bm_rtl::method_calls______Method::get_string 13.0 ns 13.0 ns 53310944 +bm_rtl::function_calls__Function::get_string 12.1 ns 12.1 ns 57911838 +bm_rtl::method_calls______Method::get_string 12.5 ns 12.5 ns 55429760 -bm_rtl::function__ErasedReturnType::get_string 33.5 ns 33.5 ns 21875285 -bm_rtl::method____ErasedReturnType::get_string 33.8 ns 33.8 ns 20417210 -bm_rtl::method____ErasedTargetType::get_string 23.0 ns 23.0 ns 31547854 -bm_rtl::method____ErasedTargetAndReturnType::get_string 34.6 ns 34.6 ns 20062476 +bm_rtl::function__ErasedReturnType::get_string 30.0 ns 30.0 ns 23256364 +bm_rtl::method____ErasedReturnType::get_string 30.8 ns 30.8 ns 22557648 +bm_rtl::method____ErasedTargetType::get_string 25.1 ns 25.1 ns 27722734 +bm_rtl::method____ErasedTargetAndReturnType::get_string 32.1 ns 32.1 ns 21698776 ----------------------------------- -[2025-11-04 12:16:45] >>> Run 2: workload scale = 0 +[2026-01-19 23:00:49] >>> Run 2: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T12:16:45+05:30 +2026-01-19T23:00:49+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3859.55 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 1.06, 0.83 +Load Average: 0.88, 0.73, 0.52 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 10.8 ns 10.8 ns 59543169 +bm_call::direct__Function::set_string 9.74 ns 9.74 ns 71535521 -bm_call::via_function_ptr__Function::set_string 11.3 ns 11.3 ns 63603473 -bm_call::via_function_ptr____Method::set_string 11.4 ns 11.4 ns 60018727 +bm_call::via_function_ptr__Function::set_string 10.5 ns 10.5 ns 66143823 +bm_call::via_function_ptr____Method::set_string 10.7 ns 10.7 ns 65023900 -bm_std::function_calls__Function::set_string 11.6 ns 11.6 ns 61482058 -bm_std::function_calls____Method::set_string 11.4 ns 11.4 ns 60456156 +bm_std::function_calls__Function::set_string 10.6 ns 10.6 ns 65354399 +bm_std::function_calls____Method::set_string 10.5 ns 10.5 ns 65453839 -bm_rtl::function_calls__Function::set_string 11.2 ns 11.2 ns 62862118 -bm_rtl::method_calls______Method::set_string 11.8 ns 11.8 ns 58169006 +bm_rtl::function_calls__Function::set_string 10.1 ns 10.1 ns 69712198 +bm_rtl::method_calls______Method::set_string 10.4 ns 10.4 ns 66905737 -bm_rtl::function__ErasedReturnType::set_string 13.8 ns 13.8 ns 49964913 -bm_rtl::method____ErasedReturnType::set_string 14.1 ns 14.1 ns 49075849 -bm_rtl::method____ErasedTargetType::set_string 14.7 ns 14.7 ns 47435229 -bm_rtl::method____ErasedTargetAndReturnType::set_string 14.4 ns 14.4 ns 48401256 +bm_rtl::function__ErasedReturnType::set_string 14.2 ns 14.2 ns 49078487 +bm_rtl::method____ErasedReturnType::set_string 13.8 ns 13.8 ns 50624940 +bm_rtl::method____ErasedTargetType::set_string 14.6 ns 14.6 ns 48083655 +bm_rtl::method____ErasedTargetAndReturnType::set_string 15.1 ns 15.1 ns 46102091 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 12.7 ns 12.7 ns 54462134 +bm_call::direct__Function::get_string 12.8 ns 12.8 ns 55815763 -bm_call::via_function_ptr__Function::get_string 12.9 ns 12.9 ns 55248821 -bm_call::via_function_ptr____Method::get_string 12.9 ns 12.9 ns 54718885 +bm_call::via_function_ptr__Function::get_string 12.6 ns 12.6 ns 55774749 +bm_call::via_function_ptr____Method::get_string 12.6 ns 12.6 ns 56928113 -bm_std::function_calls__Function::get_string 13.0 ns 13.0 ns 53924949 -bm_std::function_calls____Method::get_string 12.9 ns 12.9 ns 53432887 +bm_std::function_calls__Function::get_string 12.7 ns 12.7 ns 55895179 +bm_std::function_calls____Method::get_string 13.1 ns 13.1 ns 52615650 -bm_rtl::function_calls__Function::get_string 12.6 ns 12.6 ns 55170671 -bm_rtl::method_calls______Method::get_string 12.8 ns 12.8 ns 54845579 +bm_rtl::function_calls__Function::get_string 12.1 ns 12.1 ns 57938812 +bm_rtl::method_calls______Method::get_string 12.5 ns 12.5 ns 55570876 -bm_rtl::function__ErasedReturnType::get_string 31.9 ns 31.8 ns 21982235 -bm_rtl::method____ErasedReturnType::get_string 32.3 ns 32.3 ns 21861314 -bm_rtl::method____ErasedTargetType::get_string 21.5 ns 21.5 ns 32708463 -bm_rtl::method____ErasedTargetAndReturnType::get_string 32.9 ns 32.9 ns 21076858 +bm_rtl::function__ErasedReturnType::get_string 30.1 ns 30.1 ns 23389099 +bm_rtl::method____ErasedReturnType::get_string 30.9 ns 30.9 ns 22546410 +bm_rtl::method____ErasedTargetType::get_string 25.3 ns 25.3 ns 27502524 +bm_rtl::method____ErasedTargetAndReturnType::get_string 32.2 ns 32.2 ns 21576033 ----------------------------------- -[2025-11-04 12:17:05] >>> Run 3: workload scale = 0 +[2026-01-19 23:01:08] >>> Run 3: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T12:17:05+05:30 +2026-01-19T23:01:08+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -119,1478 +119,1478 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 1.05, 0.83 +Load Average: 0.99, 0.76, 0.54 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 10.6 ns 10.6 ns 64487293 +bm_call::direct__Function::set_string 9.77 ns 9.76 ns 71887826 -bm_call::via_function_ptr__Function::set_string 10.9 ns 10.9 ns 64347447 -bm_call::via_function_ptr____Method::set_string 10.9 ns 10.9 ns 63847988 +bm_call::via_function_ptr__Function::set_string 10.7 ns 10.7 ns 66604739 +bm_call::via_function_ptr____Method::set_string 10.8 ns 10.7 ns 65976848 -bm_std::function_calls__Function::set_string 11.2 ns 11.2 ns 61218687 -bm_std::function_calls____Method::set_string 11.3 ns 11.3 ns 61153450 +bm_std::function_calls__Function::set_string 10.7 ns 10.7 ns 66028009 +bm_std::function_calls____Method::set_string 10.6 ns 10.6 ns 66566271 -bm_rtl::function_calls__Function::set_string 11.1 ns 11.1 ns 61892878 -bm_rtl::method_calls______Method::set_string 11.3 ns 11.3 ns 61658245 +bm_rtl::function_calls__Function::set_string 10.2 ns 10.2 ns 69416123 +bm_rtl::method_calls______Method::set_string 10.5 ns 10.5 ns 67401327 -bm_rtl::function__ErasedReturnType::set_string 13.3 ns 13.3 ns 52552206 -bm_rtl::method____ErasedReturnType::set_string 13.9 ns 13.9 ns 50430274 -bm_rtl::method____ErasedTargetType::set_string 14.4 ns 14.4 ns 47389596 -bm_rtl::method____ErasedTargetAndReturnType::set_string 14.7 ns 14.7 ns 47109221 +bm_rtl::function__ErasedReturnType::set_string 14.1 ns 14.1 ns 49227860 +bm_rtl::method____ErasedReturnType::set_string 13.6 ns 13.6 ns 52058823 +bm_rtl::method____ErasedTargetType::set_string 14.9 ns 14.9 ns 47060682 +bm_rtl::method____ErasedTargetAndReturnType::set_string 15.1 ns 15.1 ns 46447515 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 12.6 ns 12.6 ns 55992884 +bm_call::direct__Function::get_string 12.8 ns 12.8 ns 54718500 -bm_call::via_function_ptr__Function::get_string 12.9 ns 12.9 ns 51161238 -bm_call::via_function_ptr____Method::get_string 12.9 ns 12.9 ns 55017241 +bm_call::via_function_ptr__Function::get_string 12.6 ns 12.6 ns 55763290 +bm_call::via_function_ptr____Method::get_string 12.4 ns 12.4 ns 56477323 -bm_std::function_calls__Function::get_string 13.5 ns 13.5 ns 53286324 -bm_std::function_calls____Method::get_string 13.3 ns 13.3 ns 52908638 +bm_std::function_calls__Function::get_string 12.6 ns 12.6 ns 55878651 +bm_std::function_calls____Method::get_string 13.2 ns 13.1 ns 54078767 -bm_rtl::function_calls__Function::get_string 12.6 ns 12.6 ns 54243132 -bm_rtl::method_calls______Method::get_string 13.2 ns 13.2 ns 54944142 +bm_rtl::function_calls__Function::get_string 12.1 ns 12.1 ns 57732783 +bm_rtl::method_calls______Method::get_string 12.2 ns 12.2 ns 56825956 -bm_rtl::function__ErasedReturnType::get_string 33.1 ns 33.1 ns 20589263 -bm_rtl::method____ErasedReturnType::get_string 32.9 ns 32.9 ns 21653434 -bm_rtl::method____ErasedTargetType::get_string 23.6 ns 23.6 ns 32185719 -bm_rtl::method____ErasedTargetAndReturnType::get_string 34.2 ns 34.2 ns 20567080 +bm_rtl::function__ErasedReturnType::get_string 30.1 ns 30.1 ns 23149525 +bm_rtl::method____ErasedReturnType::get_string 30.8 ns 30.8 ns 22499692 +bm_rtl::method____ErasedTargetType::get_string 24.9 ns 24.9 ns 27926147 +bm_rtl::method____ErasedTargetAndReturnType::get_string 32.0 ns 32.0 ns 21748751 ----------------------------------- -[2025-11-04 12:17:24] >>> Run 4: workload scale = 0 +[2026-01-19 23:01:27] >>> Run 4: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T12:17:24+05:30 +2026-01-19T23:01:27+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4288.87 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.09, 1.07, 0.84 +Load Average: 0.99, 0.78, 0.55 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 11.1 ns 11.1 ns 66290824 +bm_call::direct__Function::set_string 9.79 ns 9.79 ns 71522140 -bm_call::via_function_ptr__Function::set_string 11.0 ns 11.0 ns 60341873 -bm_call::via_function_ptr____Method::set_string 11.6 ns 11.6 ns 61663734 +bm_call::via_function_ptr__Function::set_string 10.6 ns 10.6 ns 66283611 +bm_call::via_function_ptr____Method::set_string 10.7 ns 10.7 ns 64284489 -bm_std::function_calls__Function::set_string 11.6 ns 11.6 ns 62238534 -bm_std::function_calls____Method::set_string 11.4 ns 11.4 ns 62096594 +bm_std::function_calls__Function::set_string 10.7 ns 10.7 ns 66729049 +bm_std::function_calls____Method::set_string 10.5 ns 10.5 ns 65897765 -bm_rtl::function_calls__Function::set_string 11.3 ns 11.3 ns 61460234 -bm_rtl::method_calls______Method::set_string 11.6 ns 11.6 ns 60712083 +bm_rtl::function_calls__Function::set_string 10.3 ns 10.3 ns 66838298 +bm_rtl::method_calls______Method::set_string 10.5 ns 10.5 ns 66750769 -bm_rtl::function__ErasedReturnType::set_string 13.3 ns 13.3 ns 52213654 -bm_rtl::method____ErasedReturnType::set_string 14.2 ns 14.2 ns 48504898 -bm_rtl::method____ErasedTargetType::set_string 14.7 ns 14.7 ns 47578516 -bm_rtl::method____ErasedTargetAndReturnType::set_string 14.7 ns 14.7 ns 48196113 +bm_rtl::function__ErasedReturnType::set_string 14.1 ns 14.1 ns 49234894 +bm_rtl::method____ErasedReturnType::set_string 13.6 ns 13.5 ns 51084203 +bm_rtl::method____ErasedTargetType::set_string 14.8 ns 14.8 ns 46993007 +bm_rtl::method____ErasedTargetAndReturnType::set_string 15.0 ns 15.0 ns 46202093 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 12.4 ns 12.4 ns 56590796 +bm_call::direct__Function::get_string 12.8 ns 12.8 ns 55437558 -bm_call::via_function_ptr__Function::get_string 12.7 ns 12.7 ns 55116932 -bm_call::via_function_ptr____Method::get_string 12.8 ns 12.8 ns 53240632 +bm_call::via_function_ptr__Function::get_string 12.5 ns 12.5 ns 56136811 +bm_call::via_function_ptr____Method::get_string 12.3 ns 12.3 ns 56979768 -bm_std::function_calls__Function::get_string 13.0 ns 13.0 ns 52948776 -bm_std::function_calls____Method::get_string 12.9 ns 12.9 ns 54392848 +bm_std::function_calls__Function::get_string 12.6 ns 12.6 ns 56259152 +bm_std::function_calls____Method::get_string 13.1 ns 13.1 ns 53971590 -bm_rtl::function_calls__Function::get_string 12.6 ns 12.6 ns 55104443 -bm_rtl::method_calls______Method::get_string 12.7 ns 12.7 ns 54425465 +bm_rtl::function_calls__Function::get_string 12.1 ns 12.1 ns 57898696 +bm_rtl::method_calls______Method::get_string 12.4 ns 12.4 ns 56814167 -bm_rtl::function__ErasedReturnType::get_string 31.6 ns 31.6 ns 22273160 -bm_rtl::method____ErasedReturnType::get_string 32.1 ns 32.1 ns 21839814 -bm_rtl::method____ErasedTargetType::get_string 22.2 ns 22.2 ns 31167600 -bm_rtl::method____ErasedTargetAndReturnType::get_string 32.7 ns 32.7 ns 21437578 +bm_rtl::function__ErasedReturnType::get_string 30.0 ns 30.0 ns 23184768 +bm_rtl::method____ErasedReturnType::get_string 31.0 ns 31.0 ns 22508828 +bm_rtl::method____ErasedTargetType::get_string 24.9 ns 24.9 ns 27847260 +bm_rtl::method____ErasedTargetAndReturnType::get_string 31.8 ns 31.8 ns 21567547 ----------------------------------- -[2025-11-04 12:17:43] >>> Run 5: workload scale = 0 +[2026-01-19 23:01:47] >>> Run 5: workload scale = 0 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 0 iterations ============================================= -2025-11-04T12:17:43+05:30 +2026-01-19T23:01:47+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2364.75 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.13, 1.08, 0.85 +Load Average: 1.00, 0.79, 0.56 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 10.6 ns 10.6 ns 65062380 +bm_call::direct__Function::set_string 9.71 ns 9.71 ns 71721418 -bm_call::via_function_ptr__Function::set_string 10.8 ns 10.8 ns 64248959 -bm_call::via_function_ptr____Method::set_string 11.0 ns 11.0 ns 62551535 +bm_call::via_function_ptr__Function::set_string 10.5 ns 10.5 ns 66177847 +bm_call::via_function_ptr____Method::set_string 10.6 ns 10.6 ns 65397237 -bm_std::function_calls__Function::set_string 11.2 ns 11.2 ns 60406745 -bm_std::function_calls____Method::set_string 11.3 ns 11.3 ns 62448796 +bm_std::function_calls__Function::set_string 10.7 ns 10.7 ns 65548379 +bm_std::function_calls____Method::set_string 10.5 ns 10.5 ns 66242899 -bm_rtl::function_calls__Function::set_string 11.2 ns 11.2 ns 62675614 -bm_rtl::method_calls______Method::set_string 11.3 ns 11.3 ns 61733399 +bm_rtl::function_calls__Function::set_string 10.2 ns 10.2 ns 69346305 +bm_rtl::method_calls______Method::set_string 10.5 ns 10.5 ns 66803592 -bm_rtl::function__ErasedReturnType::set_string 13.3 ns 13.3 ns 52161573 -bm_rtl::method____ErasedReturnType::set_string 14.3 ns 14.3 ns 48854344 -bm_rtl::method____ErasedTargetType::set_string 14.5 ns 14.5 ns 47526683 -bm_rtl::method____ErasedTargetAndReturnType::set_string 14.4 ns 14.4 ns 48356248 +bm_rtl::function__ErasedReturnType::set_string 14.2 ns 14.2 ns 49742575 +bm_rtl::method____ErasedReturnType::set_string 13.5 ns 13.5 ns 51315601 +bm_rtl::method____ErasedTargetType::set_string 14.6 ns 14.6 ns 48287521 +bm_rtl::method____ErasedTargetAndReturnType::set_string 15.1 ns 15.1 ns 46820399 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 12.4 ns 12.4 ns 57334137 +bm_call::direct__Function::get_string 12.7 ns 12.7 ns 53727435 -bm_call::via_function_ptr__Function::get_string 12.7 ns 12.7 ns 54933363 -bm_call::via_function_ptr____Method::get_string 12.8 ns 12.8 ns 53994926 +bm_call::via_function_ptr__Function::get_string 12.5 ns 12.5 ns 56306509 +bm_call::via_function_ptr____Method::get_string 12.5 ns 12.5 ns 55548656 -bm_std::function_calls__Function::get_string 12.9 ns 12.9 ns 53790025 -bm_std::function_calls____Method::get_string 12.9 ns 12.9 ns 54509865 +bm_std::function_calls__Function::get_string 12.5 ns 12.5 ns 56331555 +bm_std::function_calls____Method::get_string 13.2 ns 13.2 ns 53912395 -bm_rtl::function_calls__Function::get_string 12.6 ns 12.6 ns 55782606 -bm_rtl::method_calls______Method::get_string 12.8 ns 12.8 ns 54696995 +bm_rtl::function_calls__Function::get_string 12.1 ns 12.1 ns 57788395 +bm_rtl::method_calls______Method::get_string 12.4 ns 12.4 ns 55455755 -bm_rtl::function__ErasedReturnType::get_string 31.7 ns 31.7 ns 22095198 -bm_rtl::method____ErasedReturnType::get_string 32.4 ns 32.3 ns 21713225 -bm_rtl::method____ErasedTargetType::get_string 22.2 ns 22.2 ns 31569734 -bm_rtl::method____ErasedTargetAndReturnType::get_string 33.1 ns 33.1 ns 21257867 +bm_rtl::function__ErasedReturnType::get_string 29.9 ns 29.9 ns 23344757 +bm_rtl::method____ErasedReturnType::get_string 30.7 ns 30.7 ns 22917165 +bm_rtl::method____ErasedTargetType::get_string 24.7 ns 24.7 ns 28207240 +bm_rtl::method____ErasedTargetAndReturnType::get_string 31.5 ns 31.5 ns 21664753 ----------------------------------- -[2025-11-04 12:18:02] >>> Run 1: workload scale = 1 +[2026-01-19 23:02:06] >>> Run 1: workload scale = 1 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 1 iterations ============================================= -2025-11-04T12:18:02+05:30 +2026-01-19T23:02:06+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2640.13 MHz CPU s) +Run on (16 X 822.243 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.09, 1.07, 0.85 +Load Average: 1.00, 0.81, 0.57 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 24.9 ns 24.9 ns 28022770 +bm_call::direct__Function::set_string 22.9 ns 22.9 ns 30455310 -bm_call::via_function_ptr__Function::set_string 25.9 ns 25.9 ns 26967330 -bm_call::via_function_ptr____Method::set_string 25.9 ns 25.9 ns 27132859 +bm_call::via_function_ptr__Function::set_string 23.3 ns 23.3 ns 29973903 +bm_call::via_function_ptr____Method::set_string 24.4 ns 24.4 ns 28682167 -bm_std::function_calls__Function::set_string 26.4 ns 26.4 ns 26707120 -bm_std::function_calls____Method::set_string 27.0 ns 27.0 ns 25364124 +bm_std::function_calls__Function::set_string 24.4 ns 24.4 ns 28786177 +bm_std::function_calls____Method::set_string 24.1 ns 24.1 ns 29498356 -bm_rtl::function_calls__Function::set_string 26.5 ns 26.5 ns 26552439 -bm_rtl::method_calls______Method::set_string 26.6 ns 26.6 ns 26210950 +bm_rtl::function_calls__Function::set_string 23.5 ns 23.5 ns 29535454 +bm_rtl::method_calls______Method::set_string 24.1 ns 24.1 ns 28929366 -bm_rtl::function__ErasedReturnType::set_string 28.3 ns 28.3 ns 24736980 -bm_rtl::method____ErasedReturnType::set_string 30.2 ns 30.2 ns 23375542 -bm_rtl::method____ErasedTargetType::set_string 30.6 ns 30.6 ns 22925732 -bm_rtl::method____ErasedTargetAndReturnType::set_string 30.2 ns 30.2 ns 23200080 +bm_rtl::function__ErasedReturnType::set_string 27.7 ns 27.7 ns 25356353 +bm_rtl::method____ErasedReturnType::set_string 28.0 ns 28.0 ns 25219914 +bm_rtl::method____ErasedTargetType::set_string 28.7 ns 28.7 ns 24158357 +bm_rtl::method____ErasedTargetAndReturnType::set_string 29.2 ns 29.2 ns 24256140 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 48.3 ns 48.3 ns 15089307 +bm_call::direct__Function::get_string 45.3 ns 45.3 ns 15459028 -bm_call::via_function_ptr__Function::get_string 46.2 ns 46.2 ns 14395666 -bm_call::via_function_ptr____Method::get_string 46.4 ns 46.4 ns 15068891 +bm_call::via_function_ptr__Function::get_string 44.7 ns 44.6 ns 15646357 +bm_call::via_function_ptr____Method::get_string 45.3 ns 45.3 ns 15492658 -bm_std::function_calls__Function::get_string 47.4 ns 47.4 ns 14709171 -bm_std::function_calls____Method::get_string 47.0 ns 47.0 ns 14929156 +bm_std::function_calls__Function::get_string 45.6 ns 45.6 ns 15370690 +bm_std::function_calls____Method::get_string 46.9 ns 46.9 ns 14968996 -bm_rtl::function_calls__Function::get_string 47.2 ns 47.2 ns 14911798 -bm_rtl::method_calls______Method::get_string 47.4 ns 47.3 ns 14890050 +bm_rtl::function_calls__Function::get_string 45.2 ns 45.2 ns 15494849 +bm_rtl::method_calls______Method::get_string 45.7 ns 45.7 ns 15233822 -bm_rtl::function__ErasedReturnType::get_string 73.3 ns 73.3 ns 9416841 -bm_rtl::method____ErasedReturnType::get_string 74.4 ns 74.4 ns 9461511 -bm_rtl::method____ErasedTargetType::get_string 51.9 ns 51.8 ns 13545805 -bm_rtl::method____ErasedTargetAndReturnType::get_string 76.1 ns 76.1 ns 9115088 +bm_rtl::function__ErasedReturnType::get_string 59.8 ns 59.8 ns 11773379 +bm_rtl::method____ErasedReturnType::get_string 61.2 ns 61.2 ns 11420534 +bm_rtl::method____ErasedTargetType::get_string 51.6 ns 51.6 ns 13552861 +bm_rtl::method____ErasedTargetAndReturnType::get_string 61.9 ns 61.9 ns 11233344 ----------------------------------- -[2025-11-04 12:18:25] >>> Run 2: workload scale = 1 +[2026-01-19 23:02:28] >>> Run 2: workload scale = 1 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 1 iterations ============================================= -2025-11-04T12:18:25+05:30 +2026-01-19T23:02:28+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3955.49 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.19, 1.10, 0.87 +Load Average: 1.00, 0.82, 0.58 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 26.2 ns 26.2 ns 27125007 +bm_call::direct__Function::set_string 22.9 ns 22.9 ns 30573465 -bm_call::via_function_ptr__Function::set_string 27.0 ns 27.0 ns 25958094 -bm_call::via_function_ptr____Method::set_string 27.6 ns 27.6 ns 25196375 +bm_call::via_function_ptr__Function::set_string 23.3 ns 23.3 ns 30164807 +bm_call::via_function_ptr____Method::set_string 24.3 ns 24.3 ns 28476945 -bm_std::function_calls__Function::set_string 26.5 ns 26.5 ns 25360125 -bm_std::function_calls____Method::set_string 26.9 ns 26.9 ns 26002489 +bm_std::function_calls__Function::set_string 24.4 ns 24.4 ns 28790697 +bm_std::function_calls____Method::set_string 23.9 ns 23.9 ns 29364194 -bm_rtl::function_calls__Function::set_string 27.6 ns 27.6 ns 26475578 -bm_rtl::method_calls______Method::set_string 27.4 ns 27.4 ns 26001742 +bm_rtl::function_calls__Function::set_string 23.7 ns 23.7 ns 29697609 +bm_rtl::method_calls______Method::set_string 24.2 ns 24.2 ns 29116922 -bm_rtl::function__ErasedReturnType::set_string 29.0 ns 29.0 ns 24504219 -bm_rtl::method____ErasedReturnType::set_string 30.8 ns 30.8 ns 22220233 -bm_rtl::method____ErasedTargetType::set_string 32.1 ns 32.1 ns 22030367 -bm_rtl::method____ErasedTargetAndReturnType::set_string 31.5 ns 31.5 ns 21595468 +bm_rtl::function__ErasedReturnType::set_string 27.7 ns 27.7 ns 25144828 +bm_rtl::method____ErasedReturnType::set_string 27.7 ns 27.7 ns 25387533 +bm_rtl::method____ErasedTargetType::set_string 28.5 ns 28.5 ns 24641155 +bm_rtl::method____ErasedTargetAndReturnType::set_string 28.8 ns 28.8 ns 24383208 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 48.9 ns 48.9 ns 14300718 +bm_call::direct__Function::get_string 45.0 ns 45.0 ns 15538373 -bm_call::via_function_ptr__Function::get_string 47.1 ns 47.0 ns 14990892 -bm_call::via_function_ptr____Method::get_string 50.2 ns 50.2 ns 12790209 +bm_call::via_function_ptr__Function::get_string 44.7 ns 44.7 ns 15574842 +bm_call::via_function_ptr____Method::get_string 45.1 ns 45.1 ns 15547513 -bm_std::function_calls__Function::get_string 51.9 ns 51.9 ns 13535943 -bm_std::function_calls____Method::get_string 51.0 ns 51.0 ns 13266104 +bm_std::function_calls__Function::get_string 45.3 ns 45.3 ns 15505394 +bm_std::function_calls____Method::get_string 45.9 ns 45.9 ns 15301532 -bm_rtl::function_calls__Function::get_string 52.0 ns 52.0 ns 13086597 -bm_rtl::method_calls______Method::get_string 52.3 ns 52.3 ns 13161774 +bm_rtl::function_calls__Function::get_string 45.6 ns 45.6 ns 15359388 +bm_rtl::method_calls______Method::get_string 45.1 ns 45.1 ns 15555156 -bm_rtl::function__ErasedReturnType::get_string 75.2 ns 75.1 ns 9107436 -bm_rtl::method____ErasedReturnType::get_string 75.1 ns 75.1 ns 9267100 -bm_rtl::method____ErasedTargetType::get_string 55.1 ns 55.1 ns 12320961 -bm_rtl::method____ErasedTargetAndReturnType::get_string 75.8 ns 75.8 ns 8943782 +bm_rtl::function__ErasedReturnType::get_string 60.2 ns 60.2 ns 11620355 +bm_rtl::method____ErasedReturnType::get_string 61.8 ns 61.8 ns 11321576 +bm_rtl::method____ErasedTargetType::get_string 51.9 ns 51.9 ns 13385317 +bm_rtl::method____ErasedTargetAndReturnType::get_string 62.2 ns 62.2 ns 11353544 ----------------------------------- -[2025-11-04 12:18:45] >>> Run 3: workload scale = 1 +[2026-01-19 23:02:50] >>> Run 3: workload scale = 1 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 1 iterations ============================================= -2025-11-04T12:18:45+05:30 +2026-01-19T23:02:50+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3021.55 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.42, 1.16, 0.89 +Load Average: 1.00, 0.83, 0.59 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 25.8 ns 25.8 ns 26976208 +bm_call::direct__Function::set_string 22.9 ns 22.9 ns 30171191 -bm_call::via_function_ptr__Function::set_string 26.2 ns 26.2 ns 26667714 -bm_call::via_function_ptr____Method::set_string 25.9 ns 25.9 ns 26622049 +bm_call::via_function_ptr__Function::set_string 23.3 ns 23.3 ns 30353005 +bm_call::via_function_ptr____Method::set_string 24.1 ns 24.1 ns 28744923 -bm_std::function_calls__Function::set_string 26.5 ns 26.5 ns 26580719 -bm_std::function_calls____Method::set_string 26.5 ns 26.5 ns 26123278 +bm_std::function_calls__Function::set_string 24.3 ns 24.3 ns 28783840 +bm_std::function_calls____Method::set_string 23.9 ns 23.9 ns 29180247 -bm_rtl::function_calls__Function::set_string 26.5 ns 26.5 ns 26879045 -bm_rtl::method_calls______Method::set_string 26.9 ns 26.9 ns 25596201 +bm_rtl::function_calls__Function::set_string 23.5 ns 23.5 ns 29891004 +bm_rtl::method_calls______Method::set_string 23.9 ns 23.9 ns 28932461 -bm_rtl::function__ErasedReturnType::set_string 28.5 ns 28.5 ns 24501028 -bm_rtl::method____ErasedReturnType::set_string 29.4 ns 29.4 ns 23746741 -bm_rtl::method____ErasedTargetType::set_string 30.3 ns 30.3 ns 23247708 -bm_rtl::method____ErasedTargetAndReturnType::set_string 29.8 ns 29.7 ns 23353452 +bm_rtl::function__ErasedReturnType::set_string 27.7 ns 27.7 ns 25245560 +bm_rtl::method____ErasedReturnType::set_string 27.6 ns 27.6 ns 24913705 +bm_rtl::method____ErasedTargetType::set_string 28.9 ns 28.9 ns 24395606 +bm_rtl::method____ErasedTargetAndReturnType::set_string 28.9 ns 28.9 ns 23972582 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 50.2 ns 50.2 ns 13814456 +bm_call::direct__Function::get_string 46.3 ns 46.3 ns 15148491 -bm_call::via_function_ptr__Function::get_string 50.3 ns 50.3 ns 13214574 -bm_call::via_function_ptr____Method::get_string 50.3 ns 50.3 ns 13867447 +bm_call::via_function_ptr__Function::get_string 45.8 ns 45.8 ns 15294280 +bm_call::via_function_ptr____Method::get_string 46.0 ns 46.0 ns 15228762 -bm_std::function_calls__Function::get_string 51.4 ns 51.4 ns 13700559 -bm_std::function_calls____Method::get_string 50.8 ns 50.8 ns 12953501 +bm_std::function_calls__Function::get_string 47.0 ns 47.0 ns 14879735 +bm_std::function_calls____Method::get_string 47.1 ns 47.1 ns 14831304 -bm_rtl::function_calls__Function::get_string 51.3 ns 51.2 ns 13527958 -bm_rtl::method_calls______Method::get_string 51.4 ns 51.4 ns 13420354 +bm_rtl::function_calls__Function::get_string 46.6 ns 46.6 ns 15034283 +bm_rtl::method_calls______Method::get_string 46.6 ns 46.6 ns 15014229 -bm_rtl::function__ErasedReturnType::get_string 72.1 ns 72.1 ns 9577905 -bm_rtl::method____ErasedReturnType::get_string 73.4 ns 73.4 ns 9418802 -bm_rtl::method____ErasedTargetType::get_string 52.8 ns 52.8 ns 12881319 -bm_rtl::method____ErasedTargetAndReturnType::get_string 75.1 ns 75.1 ns 9268764 +bm_rtl::function__ErasedReturnType::get_string 60.7 ns 60.7 ns 11616969 +bm_rtl::method____ErasedReturnType::get_string 62.3 ns 62.3 ns 11216128 +bm_rtl::method____ErasedTargetType::get_string 52.1 ns 52.1 ns 13440738 +bm_rtl::method____ErasedTargetAndReturnType::get_string 63.0 ns 62.9 ns 11210745 ----------------------------------- -[2025-11-04 12:19:05] >>> Run 1: workload scale = 5 +[2026-01-19 23:03:13] >>> Run 1: workload scale = 5 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 5 iterations ============================================= -2025-11-04T12:19:05+05:30 +2026-01-19T23:03:13+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1832.76 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.51, 1.19, 0.91 +Load Average: 1.00, 0.85, 0.60 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 109 ns 109 ns 6356905 +bm_call::direct__Function::set_string 114 ns 114 ns 6150689 -bm_call::via_function_ptr__Function::set_string 110 ns 110 ns 6362958 -bm_call::via_function_ptr____Method::set_string 110 ns 110 ns 6337180 +bm_call::via_function_ptr__Function::set_string 115 ns 115 ns 6120408 +bm_call::via_function_ptr____Method::set_string 114 ns 114 ns 6096091 -bm_std::function_calls__Function::set_string 112 ns 112 ns 6271505 -bm_std::function_calls____Method::set_string 111 ns 111 ns 6267824 +bm_std::function_calls__Function::set_string 115 ns 115 ns 6153189 +bm_std::function_calls____Method::set_string 114 ns 114 ns 6142978 -bm_rtl::function_calls__Function::set_string 111 ns 111 ns 6287188 -bm_rtl::method_calls______Method::set_string 111 ns 111 ns 6263824 +bm_rtl::function_calls__Function::set_string 114 ns 114 ns 6186381 +bm_rtl::method_calls______Method::set_string 114 ns 114 ns 6147215 -bm_rtl::function__ErasedReturnType::set_string 114 ns 114 ns 6107867 -bm_rtl::method____ErasedReturnType::set_string 114 ns 114 ns 6126524 -bm_rtl::method____ErasedTargetType::set_string 115 ns 115 ns 6078615 -bm_rtl::method____ErasedTargetAndReturnType::set_string 114 ns 114 ns 6060333 +bm_rtl::function__ErasedReturnType::set_string 117 ns 117 ns 6004976 +bm_rtl::method____ErasedReturnType::set_string 116 ns 116 ns 6002059 +bm_rtl::method____ErasedTargetType::set_string 118 ns 118 ns 5952044 +bm_rtl::method____ErasedTargetAndReturnType::set_string 118 ns 118 ns 5904788 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 211 ns 211 ns 3302773 +bm_call::direct__Function::get_string 185 ns 185 ns 3776514 -bm_call::via_function_ptr__Function::get_string 212 ns 212 ns 3300130 -bm_call::via_function_ptr____Method::get_string 213 ns 213 ns 3269215 +bm_call::via_function_ptr__Function::get_string 185 ns 185 ns 3774660 +bm_call::via_function_ptr____Method::get_string 191 ns 191 ns 3675448 -bm_std::function_calls__Function::get_string 212 ns 212 ns 3289700 -bm_std::function_calls____Method::get_string 212 ns 212 ns 3283718 +bm_std::function_calls__Function::get_string 186 ns 186 ns 3765692 +bm_std::function_calls____Method::get_string 189 ns 189 ns 3699608 -bm_rtl::function_calls__Function::get_string 213 ns 213 ns 3282782 -bm_rtl::method_calls______Method::get_string 214 ns 214 ns 3260274 +bm_rtl::function_calls__Function::get_string 185 ns 185 ns 3767600 +bm_rtl::method_calls______Method::get_string 188 ns 188 ns 3713718 -bm_rtl::function__ErasedReturnType::get_string 267 ns 267 ns 2625824 -bm_rtl::method____ErasedReturnType::get_string 268 ns 268 ns 2609629 -bm_rtl::method____ErasedTargetType::get_string 218 ns 218 ns 3204239 -bm_rtl::method____ErasedTargetAndReturnType::get_string 269 ns 269 ns 2603345 +bm_rtl::function__ErasedReturnType::get_string 200 ns 200 ns 3517235 +bm_rtl::method____ErasedReturnType::get_string 201 ns 201 ns 3490550 +bm_rtl::method____ErasedTargetType::get_string 194 ns 194 ns 3621561 +bm_rtl::method____ErasedTargetAndReturnType::get_string 201 ns 201 ns 3473829 ----------------------------------- -[2025-11-04 12:19:24] >>> Run 2: workload scale = 5 +[2026-01-19 23:03:32] >>> Run 2: workload scale = 5 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 5 iterations ============================================= -2025-11-04T12:19:24+05:30 +2026-01-19T23:03:32+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4801.49 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.40, 1.18, 0.92 +Load Average: 1.00, 0.86, 0.61 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 110 ns 110 ns 6254342 +bm_call::direct__Function::set_string 115 ns 115 ns 6101534 -bm_call::via_function_ptr__Function::set_string 111 ns 111 ns 6127808 -bm_call::via_function_ptr____Method::set_string 110 ns 110 ns 6215491 +bm_call::via_function_ptr__Function::set_string 114 ns 114 ns 6087851 +bm_call::via_function_ptr____Method::set_string 114 ns 114 ns 6121086 -bm_std::function_calls__Function::set_string 112 ns 112 ns 6194003 -bm_std::function_calls____Method::set_string 112 ns 112 ns 6253000 +bm_std::function_calls__Function::set_string 115 ns 115 ns 6129096 +bm_std::function_calls____Method::set_string 115 ns 115 ns 6110410 -bm_rtl::function_calls__Function::set_string 111 ns 111 ns 6277966 -bm_rtl::method_calls______Method::set_string 110 ns 110 ns 6335238 +bm_rtl::function_calls__Function::set_string 114 ns 114 ns 6138724 +bm_rtl::method_calls______Method::set_string 114 ns 114 ns 6128080 -bm_rtl::function__ErasedReturnType::set_string 113 ns 113 ns 6173358 -bm_rtl::method____ErasedReturnType::set_string 113 ns 113 ns 6189036 -bm_rtl::method____ErasedTargetType::set_string 114 ns 114 ns 6088778 -bm_rtl::method____ErasedTargetAndReturnType::set_string 114 ns 114 ns 6097107 +bm_rtl::function__ErasedReturnType::set_string 121 ns 121 ns 5790978 +bm_rtl::method____ErasedReturnType::set_string 121 ns 121 ns 5753753 +bm_rtl::method____ErasedTargetType::set_string 123 ns 123 ns 5694073 +bm_rtl::method____ErasedTargetAndReturnType::set_string 121 ns 121 ns 5768724 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 190 ns 190 ns 3679128 +bm_call::direct__Function::get_string 211 ns 211 ns 3322602 -bm_call::via_function_ptr__Function::get_string 190 ns 190 ns 3672961 -bm_call::via_function_ptr____Method::get_string 190 ns 190 ns 3680081 +bm_call::via_function_ptr__Function::get_string 212 ns 212 ns 3302320 +bm_call::via_function_ptr____Method::get_string 214 ns 214 ns 3267708 -bm_std::function_calls__Function::get_string 189 ns 189 ns 3685674 -bm_std::function_calls____Method::get_string 189 ns 189 ns 3697261 +bm_std::function_calls__Function::get_string 212 ns 212 ns 3300344 +bm_std::function_calls____Method::get_string 213 ns 213 ns 3296294 -bm_rtl::function_calls__Function::get_string 190 ns 190 ns 3690621 -bm_rtl::method_calls______Method::get_string 190 ns 190 ns 3685585 +bm_rtl::function_calls__Function::get_string 211 ns 211 ns 3312103 +bm_rtl::method_calls______Method::get_string 212 ns 212 ns 3289616 -bm_rtl::function__ErasedReturnType::get_string 242 ns 242 ns 2896462 -bm_rtl::method____ErasedReturnType::get_string 240 ns 240 ns 2919692 -bm_rtl::method____ErasedTargetType::get_string 195 ns 195 ns 3598721 -bm_rtl::method____ErasedTargetAndReturnType::get_string 242 ns 242 ns 2896405 +bm_rtl::function__ErasedReturnType::get_string 224 ns 224 ns 3138855 +bm_rtl::method____ErasedReturnType::get_string 224 ns 224 ns 3109100 +bm_rtl::method____ErasedTargetType::get_string 220 ns 220 ns 3186412 +bm_rtl::method____ErasedTargetAndReturnType::get_string 224 ns 224 ns 3125628 ----------------------------------- -[2025-11-04 12:19:44] >>> Run 3: workload scale = 5 +[2026-01-19 23:03:51] >>> Run 3: workload scale = 5 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 5 iterations ============================================= -2025-11-04T12:19:44+05:30 +2026-01-19T23:03:51+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2019.39 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.28, 1.17, 0.92 +Load Average: 1.00, 0.87, 0.62 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 109 ns 109 ns 6366490 +bm_call::direct__Function::set_string 114 ns 114 ns 6132649 -bm_call::via_function_ptr__Function::set_string 110 ns 110 ns 6364151 -bm_call::via_function_ptr____Method::set_string 110 ns 110 ns 6358758 +bm_call::via_function_ptr__Function::set_string 114 ns 114 ns 6142191 +bm_call::via_function_ptr____Method::set_string 114 ns 114 ns 6141152 -bm_std::function_calls__Function::set_string 111 ns 111 ns 6296215 -bm_std::function_calls____Method::set_string 111 ns 111 ns 6318768 +bm_std::function_calls__Function::set_string 115 ns 115 ns 6068904 +bm_std::function_calls____Method::set_string 115 ns 115 ns 6098069 -bm_rtl::function_calls__Function::set_string 110 ns 110 ns 6318789 -bm_rtl::method_calls______Method::set_string 110 ns 110 ns 6326380 +bm_rtl::function_calls__Function::set_string 113 ns 113 ns 6166440 +bm_rtl::method_calls______Method::set_string 114 ns 114 ns 6132392 -bm_rtl::function__ErasedReturnType::set_string 113 ns 113 ns 6147018 -bm_rtl::method____ErasedReturnType::set_string 113 ns 113 ns 6162989 -bm_rtl::method____ErasedTargetType::set_string 115 ns 115 ns 5940721 -bm_rtl::method____ErasedTargetAndReturnType::set_string 114 ns 114 ns 6084423 +bm_rtl::function__ErasedReturnType::set_string 117 ns 117 ns 5984139 +bm_rtl::method____ErasedReturnType::set_string 117 ns 117 ns 6008851 +bm_rtl::method____ErasedTargetType::set_string 118 ns 118 ns 5935050 +bm_rtl::method____ErasedTargetAndReturnType::set_string 119 ns 119 ns 5906698 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 191 ns 191 ns 3678026 +bm_call::direct__Function::get_string 214 ns 214 ns 3274422 -bm_call::via_function_ptr__Function::get_string 191 ns 191 ns 3666456 -bm_call::via_function_ptr____Method::get_string 191 ns 191 ns 3666182 +bm_call::via_function_ptr__Function::get_string 214 ns 214 ns 3221626 +bm_call::via_function_ptr____Method::get_string 217 ns 217 ns 3219416 -bm_std::function_calls__Function::get_string 190 ns 190 ns 3676735 -bm_std::function_calls____Method::get_string 190 ns 190 ns 3679305 +bm_std::function_calls__Function::get_string 215 ns 215 ns 3258831 +bm_std::function_calls____Method::get_string 216 ns 215 ns 3248424 -bm_rtl::function_calls__Function::get_string 191 ns 190 ns 3683024 -bm_rtl::method_calls______Method::get_string 191 ns 191 ns 3674662 +bm_rtl::function_calls__Function::get_string 215 ns 215 ns 3128220 +bm_rtl::method_calls______Method::get_string 215 ns 215 ns 3238895 -bm_rtl::function__ErasedReturnType::get_string 242 ns 242 ns 2882786 -bm_rtl::method____ErasedReturnType::get_string 241 ns 241 ns 2911958 -bm_rtl::method____ErasedTargetType::get_string 196 ns 196 ns 3581200 -bm_rtl::method____ErasedTargetAndReturnType::get_string 243 ns 243 ns 2882409 +bm_rtl::function__ErasedReturnType::get_string 225 ns 225 ns 3133131 +bm_rtl::method____ErasedReturnType::get_string 225 ns 225 ns 3107999 +bm_rtl::method____ErasedTargetType::get_string 222 ns 222 ns 3153094 +bm_rtl::method____ErasedTargetAndReturnType::get_string 225 ns 225 ns 3109784 ----------------------------------- -[2025-11-04 12:20:03] >>> Run 1: workload scale = 10 +[2026-01-19 23:04:11] >>> Run 1: workload scale = 10 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 10 iterations ============================================= -2025-11-04T12:20:03+05:30 +2026-01-19T23:04:11+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3993.12 MHz CPU s) +Run on (16 X 800.325 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.20, 1.16, 0.92 +Load Average: 1.00, 0.88, 0.63 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 187 ns 187 ns 3726311 +bm_call::direct__Function::set_string 184 ns 184 ns 3777733 -bm_call::via_function_ptr__Function::set_string 188 ns 188 ns 3744673 -bm_call::via_function_ptr____Method::set_string 188 ns 188 ns 3735227 +bm_call::via_function_ptr__Function::set_string 184 ns 184 ns 3785782 +bm_call::via_function_ptr____Method::set_string 184 ns 184 ns 3807719 -bm_std::function_calls__Function::set_string 188 ns 188 ns 3718232 -bm_std::function_calls____Method::set_string 188 ns 188 ns 3712163 +bm_std::function_calls__Function::set_string 184 ns 184 ns 3814668 +bm_std::function_calls____Method::set_string 184 ns 184 ns 3809985 -bm_rtl::function_calls__Function::set_string 188 ns 188 ns 3719395 -bm_rtl::method_calls______Method::set_string 188 ns 188 ns 3708975 +bm_rtl::function_calls__Function::set_string 184 ns 184 ns 3817093 +bm_rtl::method_calls______Method::set_string 184 ns 184 ns 3818075 -bm_rtl::function__ErasedReturnType::set_string 192 ns 192 ns 3644143 -bm_rtl::method____ErasedReturnType::set_string 192 ns 192 ns 3646885 -bm_rtl::method____ErasedTargetType::set_string 193 ns 193 ns 3651118 -bm_rtl::method____ErasedTargetAndReturnType::set_string 194 ns 194 ns 3617474 +bm_rtl::function__ErasedReturnType::set_string 189 ns 189 ns 3698101 +bm_rtl::method____ErasedReturnType::set_string 188 ns 188 ns 3734841 +bm_rtl::method____ErasedTargetType::set_string 189 ns 189 ns 3697316 +bm_rtl::method____ErasedTargetAndReturnType::set_string 188 ns 188 ns 3720922 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 358 ns 358 ns 1956467 +bm_call::direct__Function::get_string 299 ns 299 ns 2330036 -bm_call::via_function_ptr__Function::get_string 349 ns 349 ns 2006340 -bm_call::via_function_ptr____Method::get_string 351 ns 351 ns 2002609 +bm_call::via_function_ptr__Function::get_string 298 ns 298 ns 2348216 +bm_call::via_function_ptr____Method::get_string 298 ns 298 ns 2337354 -bm_std::function_calls__Function::get_string 348 ns 348 ns 2008102 -bm_std::function_calls____Method::get_string 349 ns 349 ns 2011577 +bm_std::function_calls__Function::get_string 299 ns 299 ns 2334440 +bm_std::function_calls____Method::get_string 299 ns 299 ns 2335303 -bm_rtl::function_calls__Function::get_string 348 ns 348 ns 2010126 -bm_rtl::method_calls______Method::get_string 349 ns 349 ns 2004066 +bm_rtl::function_calls__Function::get_string 297 ns 297 ns 2353177 +bm_rtl::method_calls______Method::get_string 299 ns 299 ns 2342282 -bm_rtl::function__ErasedReturnType::get_string 426 ns 426 ns 1643422 -bm_rtl::method____ErasedReturnType::get_string 430 ns 430 ns 1629089 -bm_rtl::method____ErasedTargetType::get_string 353 ns 353 ns 1979505 -bm_rtl::method____ErasedTargetAndReturnType::get_string 429 ns 428 ns 1635028 +bm_rtl::function__ErasedReturnType::get_string 311 ns 311 ns 2252004 +bm_rtl::method____ErasedReturnType::get_string 313 ns 313 ns 2236406 +bm_rtl::method____ErasedTargetType::get_string 305 ns 305 ns 2299083 +bm_rtl::method____ErasedTargetAndReturnType::get_string 312 ns 312 ns 2244346 ----------------------------------- -[2025-11-04 12:20:25] >>> Run 2: workload scale = 10 +[2026-01-19 23:04:32] >>> Run 2: workload scale = 10 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 10 iterations ============================================= -2025-11-04T12:20:25+05:30 +2026-01-19T23:04:32+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2840.4 MHz CPU s) +Run on (16 X 4758.38 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.13, 1.14, 0.92 +Load Average: 1.00, 0.89, 0.64 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 177 ns 177 ns 3940952 +bm_call::direct__Function::set_string 184 ns 184 ns 3819930 -bm_call::via_function_ptr__Function::set_string 178 ns 178 ns 3934929 -bm_call::via_function_ptr____Method::set_string 178 ns 178 ns 3932855 +bm_call::via_function_ptr__Function::set_string 177 ns 177 ns 3948053 +bm_call::via_function_ptr____Method::set_string 177 ns 177 ns 3922201 -bm_std::function_calls__Function::set_string 179 ns 178 ns 3927235 -bm_std::function_calls____Method::set_string 183 ns 183 ns 3673773 +bm_std::function_calls__Function::set_string 178 ns 178 ns 3939696 +bm_std::function_calls____Method::set_string 178 ns 178 ns 3950022 -bm_rtl::function_calls__Function::set_string 180 ns 180 ns 3868708 -bm_rtl::method_calls______Method::set_string 180 ns 180 ns 3907622 +bm_rtl::function_calls__Function::set_string 177 ns 177 ns 3928694 +bm_rtl::method_calls______Method::set_string 178 ns 177 ns 3953717 -bm_rtl::function__ErasedReturnType::set_string 183 ns 183 ns 3861068 -bm_rtl::method____ErasedReturnType::set_string 180 ns 180 ns 3885727 -bm_rtl::method____ErasedTargetType::set_string 183 ns 183 ns 3796810 -bm_rtl::method____ErasedTargetAndReturnType::set_string 183 ns 183 ns 3820688 +bm_rtl::function__ErasedReturnType::set_string 180 ns 180 ns 3888139 +bm_rtl::method____ErasedReturnType::set_string 180 ns 180 ns 3885087 +bm_rtl::method____ErasedTargetType::set_string 183 ns 183 ns 3845699 +bm_rtl::method____ErasedTargetAndReturnType::set_string 181 ns 181 ns 3875406 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 319 ns 319 ns 2203411 +bm_call::direct__Function::get_string 294 ns 294 ns 2384603 -bm_call::via_function_ptr__Function::get_string 310 ns 310 ns 2263612 -bm_call::via_function_ptr____Method::get_string 312 ns 312 ns 2254295 +bm_call::via_function_ptr__Function::get_string 293 ns 293 ns 2393415 +bm_call::via_function_ptr____Method::get_string 293 ns 293 ns 2391860 -bm_std::function_calls__Function::get_string 311 ns 311 ns 2247231 -bm_std::function_calls____Method::get_string 310 ns 310 ns 2274352 +bm_std::function_calls__Function::get_string 294 ns 294 ns 2382741 +bm_std::function_calls____Method::get_string 293 ns 293 ns 2385674 -bm_rtl::function_calls__Function::get_string 314 ns 314 ns 2259091 -bm_rtl::method_calls______Method::get_string 315 ns 315 ns 2266882 +bm_rtl::function_calls__Function::get_string 292 ns 292 ns 2397954 +bm_rtl::method_calls______Method::get_string 293 ns 293 ns 2395882 -bm_rtl::function__ErasedReturnType::get_string 381 ns 381 ns 1843706 -bm_rtl::method____ErasedReturnType::get_string 382 ns 382 ns 1846973 -bm_rtl::method____ErasedTargetType::get_string 316 ns 316 ns 2213949 -bm_rtl::method____ErasedTargetAndReturnType::get_string 381 ns 381 ns 1843965 +bm_rtl::function__ErasedReturnType::get_string 307 ns 307 ns 2281723 +bm_rtl::method____ErasedReturnType::get_string 309 ns 309 ns 2272152 +bm_rtl::method____ErasedTargetType::get_string 299 ns 299 ns 2340064 +bm_rtl::method____ErasedTargetAndReturnType::get_string 307 ns 307 ns 2281982 ----------------------------------- -[2025-11-04 12:20:47] >>> Run 3: workload scale = 10 +[2026-01-19 23:04:53] >>> Run 3: workload scale = 10 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 10 iterations ============================================= -2025-11-04T12:20:47+05:30 +2026-01-19T23:04:53+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2572.05 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.25, 1.17, 0.93 +Load Average: 1.11, 0.93, 0.66 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 178 ns 178 ns 3900950 +bm_call::direct__Function::set_string 183 ns 183 ns 3824216 -bm_call::via_function_ptr__Function::set_string 180 ns 180 ns 3879189 -bm_call::via_function_ptr____Method::set_string 179 ns 179 ns 3834422 +bm_call::via_function_ptr__Function::set_string 178 ns 178 ns 3959660 +bm_call::via_function_ptr____Method::set_string 177 ns 177 ns 3948511 -bm_std::function_calls__Function::set_string 179 ns 179 ns 3920381 -bm_std::function_calls____Method::set_string 180 ns 180 ns 3891620 +bm_std::function_calls__Function::set_string 177 ns 177 ns 3967769 +bm_std::function_calls____Method::set_string 179 ns 179 ns 3900356 -bm_rtl::function_calls__Function::set_string 181 ns 181 ns 3872767 -bm_rtl::method_calls______Method::set_string 180 ns 180 ns 3910455 +bm_rtl::function_calls__Function::set_string 178 ns 178 ns 3918698 +bm_rtl::method_calls______Method::set_string 179 ns 179 ns 3899680 -bm_rtl::function__ErasedReturnType::set_string 182 ns 182 ns 3832558 -bm_rtl::method____ErasedReturnType::set_string 181 ns 181 ns 3885287 -bm_rtl::method____ErasedTargetType::set_string 185 ns 185 ns 3776004 -bm_rtl::method____ErasedTargetAndReturnType::set_string 183 ns 183 ns 3823404 +bm_rtl::function__ErasedReturnType::set_string 181 ns 181 ns 3851517 +bm_rtl::method____ErasedReturnType::set_string 180 ns 180 ns 3878815 +bm_rtl::method____ErasedTargetType::set_string 181 ns 181 ns 3889425 +bm_rtl::method____ErasedTargetAndReturnType::set_string 181 ns 181 ns 3881658 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 320 ns 320 ns 2191852 +bm_call::direct__Function::get_string 296 ns 296 ns 2366399 -bm_call::via_function_ptr__Function::get_string 311 ns 311 ns 2255298 -bm_call::via_function_ptr____Method::get_string 314 ns 314 ns 2234056 +bm_call::via_function_ptr__Function::get_string 295 ns 295 ns 2374439 +bm_call::via_function_ptr____Method::get_string 294 ns 294 ns 2384224 -bm_std::function_calls__Function::get_string 313 ns 313 ns 2230322 -bm_std::function_calls____Method::get_string 313 ns 313 ns 2216167 +bm_std::function_calls__Function::get_string 295 ns 295 ns 2364076 +bm_std::function_calls____Method::get_string 294 ns 294 ns 2370526 -bm_rtl::function_calls__Function::get_string 355 ns 355 ns 2009288 -bm_rtl::method_calls______Method::get_string 323 ns 323 ns 1912946 +bm_rtl::function_calls__Function::get_string 294 ns 294 ns 2385620 +bm_rtl::method_calls______Method::get_string 293 ns 293 ns 2389281 -bm_rtl::function__ErasedReturnType::get_string 384 ns 384 ns 1824265 -bm_rtl::method____ErasedReturnType::get_string 384 ns 384 ns 1808329 -bm_rtl::method____ErasedTargetType::get_string 321 ns 321 ns 2143924 -bm_rtl::method____ErasedTargetAndReturnType::get_string 385 ns 385 ns 1808807 +bm_rtl::function__ErasedReturnType::get_string 307 ns 307 ns 2278302 +bm_rtl::method____ErasedReturnType::get_string 308 ns 308 ns 2271193 +bm_rtl::method____ErasedTargetType::get_string 299 ns 299 ns 2343702 +bm_rtl::method____ErasedTargetAndReturnType::get_string 306 ns 306 ns 2283153 ----------------------------------- -[2025-11-04 12:21:09] >>> Run 1: workload scale = 15 +[2026-01-19 23:05:15] >>> Run 1: workload scale = 15 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 15 iterations ============================================= -2025-11-04T12:21:09+05:30 +2026-01-19T23:05:15+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4900 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.18, 1.16, 0.94 +Load Average: 1.08, 0.93, 0.67 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 208 ns 208 ns 3354887 +bm_call::direct__Function::set_string 226 ns 226 ns 3089610 -bm_call::via_function_ptr__Function::set_string 209 ns 209 ns 3348189 -bm_call::via_function_ptr____Method::set_string 214 ns 214 ns 3338144 +bm_call::via_function_ptr__Function::set_string 222 ns 222 ns 3153870 +bm_call::via_function_ptr____Method::set_string 221 ns 221 ns 3175215 -bm_std::function_calls__Function::set_string 210 ns 210 ns 3356079 -bm_std::function_calls____Method::set_string 209 ns 209 ns 3352077 +bm_std::function_calls__Function::set_string 223 ns 223 ns 3117008 +bm_std::function_calls____Method::set_string 220 ns 220 ns 3173515 -bm_rtl::function_calls__Function::set_string 211 ns 211 ns 3317584 -bm_rtl::method_calls______Method::set_string 209 ns 209 ns 3338550 +bm_rtl::function_calls__Function::set_string 220 ns 220 ns 3194400 +bm_rtl::method_calls______Method::set_string 220 ns 220 ns 3140247 -bm_rtl::function__ErasedReturnType::set_string 212 ns 212 ns 3325113 -bm_rtl::method____ErasedReturnType::set_string 216 ns 216 ns 3217407 -bm_rtl::method____ErasedTargetType::set_string 212 ns 212 ns 3296378 -bm_rtl::method____ErasedTargetAndReturnType::set_string 210 ns 210 ns 3347149 +bm_rtl::function__ErasedReturnType::set_string 222 ns 222 ns 3147549 +bm_rtl::method____ErasedReturnType::set_string 225 ns 225 ns 3142824 +bm_rtl::method____ErasedTargetType::set_string 224 ns 224 ns 3124349 +bm_rtl::method____ErasedTargetAndReturnType::set_string 222 ns 222 ns 3152685 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 383 ns 383 ns 1835016 +bm_call::direct__Function::get_string 409 ns 409 ns 1709662 -bm_call::via_function_ptr__Function::get_string 381 ns 381 ns 1842308 -bm_call::via_function_ptr____Method::get_string 383 ns 383 ns 1831574 +bm_call::via_function_ptr__Function::get_string 408 ns 408 ns 1719343 +bm_call::via_function_ptr____Method::get_string 408 ns 408 ns 1714648 -bm_std::function_calls__Function::get_string 395 ns 395 ns 1761881 -bm_std::function_calls____Method::get_string 387 ns 387 ns 1804570 +bm_std::function_calls__Function::get_string 409 ns 409 ns 1709610 +bm_std::function_calls____Method::get_string 410 ns 410 ns 1708052 -bm_rtl::function_calls__Function::get_string 383 ns 383 ns 1817991 -bm_rtl::method_calls______Method::get_string 385 ns 385 ns 1823692 +bm_rtl::function_calls__Function::get_string 407 ns 407 ns 1684885 +bm_rtl::method_calls______Method::get_string 407 ns 407 ns 1716993 -bm_rtl::function__ErasedReturnType::get_string 461 ns 461 ns 1524833 -bm_rtl::method____ErasedReturnType::get_string 463 ns 463 ns 1511457 -bm_rtl::method____ErasedTargetType::get_string 390 ns 390 ns 1795845 -bm_rtl::method____ErasedTargetAndReturnType::get_string 462 ns 462 ns 1515668 +bm_rtl::function__ErasedReturnType::get_string 420 ns 420 ns 1665371 +bm_rtl::method____ErasedReturnType::get_string 420 ns 420 ns 1663095 +bm_rtl::method____ErasedTargetType::get_string 416 ns 416 ns 1683688 +bm_rtl::method____ErasedTargetAndReturnType::get_string 422 ns 422 ns 1657701 ----------------------------------- -[2025-11-04 12:21:31] >>> Run 2: workload scale = 15 +[2026-01-19 23:05:38] >>> Run 2: workload scale = 15 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 15 iterations ============================================= -2025-11-04T12:21:31+05:30 +2026-01-19T23:05:38+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3073.18 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.19, 1.16, 0.94 +Load Average: 1.05, 0.94, 0.67 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 210 ns 210 ns 3340652 +bm_call::direct__Function::set_string 215 ns 215 ns 3251791 -bm_call::via_function_ptr__Function::set_string 211 ns 211 ns 3324856 -bm_call::via_function_ptr____Method::set_string 211 ns 211 ns 3310404 +bm_call::via_function_ptr__Function::set_string 215 ns 215 ns 3250360 +bm_call::via_function_ptr____Method::set_string 216 ns 216 ns 3245971 -bm_std::function_calls__Function::set_string 212 ns 212 ns 3308725 -bm_std::function_calls____Method::set_string 212 ns 212 ns 3287037 +bm_std::function_calls__Function::set_string 215 ns 215 ns 3263158 +bm_std::function_calls____Method::set_string 216 ns 216 ns 3214634 -bm_rtl::function_calls__Function::set_string 212 ns 212 ns 3314574 -bm_rtl::method_calls______Method::set_string 212 ns 212 ns 3283145 +bm_rtl::function_calls__Function::set_string 217 ns 217 ns 3235199 +bm_rtl::method_calls______Method::set_string 216 ns 216 ns 3255549 -bm_rtl::function__ErasedReturnType::set_string 211 ns 211 ns 3341051 -bm_rtl::method____ErasedReturnType::set_string 214 ns 214 ns 3259385 -bm_rtl::method____ErasedTargetType::set_string 212 ns 212 ns 3304041 -bm_rtl::method____ErasedTargetAndReturnType::set_string 226 ns 226 ns 3085668 +bm_rtl::function__ErasedReturnType::set_string 219 ns 219 ns 3205308 +bm_rtl::method____ErasedReturnType::set_string 217 ns 217 ns 3223213 +bm_rtl::method____ErasedTargetType::set_string 218 ns 218 ns 3198103 +bm_rtl::method____ErasedTargetAndReturnType::set_string 219 ns 219 ns 3208427 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 382 ns 382 ns 1626037 +bm_call::direct__Function::get_string 389 ns 389 ns 1801150 -bm_call::via_function_ptr__Function::get_string 381 ns 381 ns 1835546 -bm_call::via_function_ptr____Method::get_string 383 ns 383 ns 1828808 +bm_call::via_function_ptr__Function::get_string 367 ns 367 ns 1906149 +bm_call::via_function_ptr____Method::get_string 366 ns 366 ns 1911347 -bm_std::function_calls__Function::get_string 387 ns 387 ns 1822200 -bm_std::function_calls____Method::get_string 393 ns 393 ns 1800319 +bm_std::function_calls__Function::get_string 367 ns 367 ns 1907044 +bm_std::function_calls____Method::get_string 368 ns 368 ns 1906042 -bm_rtl::function_calls__Function::get_string 386 ns 386 ns 1800817 -bm_rtl::method_calls______Method::get_string 384 ns 384 ns 1823455 +bm_rtl::function_calls__Function::get_string 365 ns 365 ns 1917571 +bm_rtl::method_calls______Method::get_string 366 ns 366 ns 1913051 -bm_rtl::function__ErasedReturnType::get_string 462 ns 462 ns 1519511 -bm_rtl::method____ErasedReturnType::get_string 464 ns 464 ns 1504120 -bm_rtl::method____ErasedTargetType::get_string 393 ns 393 ns 1794253 -bm_rtl::method____ErasedTargetAndReturnType::get_string 462 ns 462 ns 1497097 +bm_rtl::function__ErasedReturnType::get_string 379 ns 379 ns 1842696 +bm_rtl::method____ErasedReturnType::get_string 380 ns 380 ns 1841381 +bm_rtl::method____ErasedTargetType::get_string 372 ns 372 ns 1878324 +bm_rtl::method____ErasedTargetAndReturnType::get_string 381 ns 381 ns 1818358 ----------------------------------- -[2025-11-04 12:21:54] >>> Run 3: workload scale = 15 +[2026-01-19 23:06:00] >>> Run 3: workload scale = 15 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 15 iterations ============================================= -2025-11-04T12:21:54+05:30 +2026-01-19T23:06:00+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2736.79 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.14, 1.15, 0.95 +Load Average: 1.04, 0.95, 0.68 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 212 ns 212 ns 3300818 +bm_call::direct__Function::set_string 215 ns 215 ns 3253799 -bm_call::via_function_ptr__Function::set_string 213 ns 213 ns 3277311 -bm_call::via_function_ptr____Method::set_string 212 ns 212 ns 3300103 +bm_call::via_function_ptr__Function::set_string 216 ns 216 ns 3249440 +bm_call::via_function_ptr____Method::set_string 217 ns 217 ns 3227746 -bm_std::function_calls__Function::set_string 212 ns 212 ns 3272237 -bm_std::function_calls____Method::set_string 212 ns 212 ns 3299601 +bm_std::function_calls__Function::set_string 213 ns 213 ns 3296572 +bm_std::function_calls____Method::set_string 213 ns 213 ns 3277342 -bm_rtl::function_calls__Function::set_string 219 ns 219 ns 3298106 -bm_rtl::method_calls______Method::set_string 217 ns 217 ns 3175023 +bm_rtl::function_calls__Function::set_string 213 ns 213 ns 3280935 +bm_rtl::method_calls______Method::set_string 214 ns 214 ns 3268047 -bm_rtl::function__ErasedReturnType::set_string 228 ns 228 ns 3138094 -bm_rtl::method____ErasedReturnType::set_string 225 ns 225 ns 3093211 -bm_rtl::method____ErasedTargetType::set_string 222 ns 222 ns 3260985 -bm_rtl::method____ErasedTargetAndReturnType::set_string 225 ns 225 ns 3014027 +bm_rtl::function__ErasedReturnType::set_string 216 ns 216 ns 3252538 +bm_rtl::method____ErasedReturnType::set_string 228 ns 228 ns 3254612 +bm_rtl::method____ErasedTargetType::set_string 230 ns 230 ns 3064649 +bm_rtl::method____ErasedTargetAndReturnType::set_string 230 ns 230 ns 3026544 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 409 ns 409 ns 1704362 +bm_call::direct__Function::get_string 418 ns 418 ns 1679672 -bm_call::via_function_ptr__Function::get_string 400 ns 400 ns 1816140 -bm_call::via_function_ptr____Method::get_string 396 ns 396 ns 1710091 +bm_call::via_function_ptr__Function::get_string 413 ns 413 ns 1674254 +bm_call::via_function_ptr____Method::get_string 413 ns 413 ns 1696505 -bm_std::function_calls__Function::get_string 396 ns 396 ns 1764724 -bm_std::function_calls____Method::get_string 413 ns 413 ns 1719759 +bm_std::function_calls__Function::get_string 416 ns 416 ns 1684761 +bm_std::function_calls____Method::get_string 416 ns 416 ns 1682074 -bm_rtl::function_calls__Function::get_string 401 ns 401 ns 1722218 -bm_rtl::method_calls______Method::get_string 396 ns 395 ns 1730519 +bm_rtl::function_calls__Function::get_string 412 ns 412 ns 1697759 +bm_rtl::method_calls______Method::get_string 412 ns 412 ns 1692481 -bm_rtl::function__ErasedReturnType::get_string 494 ns 494 ns 1440837 -bm_rtl::method____ErasedReturnType::get_string 475 ns 475 ns 1396097 -bm_rtl::method____ErasedTargetType::get_string 394 ns 394 ns 1749298 -bm_rtl::method____ErasedTargetAndReturnType::get_string 462 ns 462 ns 1464101 +bm_rtl::function__ErasedReturnType::get_string 424 ns 424 ns 1652039 +bm_rtl::method____ErasedReturnType::get_string 424 ns 424 ns 1649284 +bm_rtl::method____ErasedTargetType::get_string 419 ns 419 ns 1667856 +bm_rtl::method____ErasedTargetAndReturnType::get_string 424 ns 424 ns 1650836 ----------------------------------- -[2025-11-04 12:22:17] >>> Run 1: workload scale = 20 +[2026-01-19 23:06:24] >>> Run 1: workload scale = 20 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 20 iterations ============================================= -2025-11-04T12:22:17+05:30 +2026-01-19T23:06:24+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4443.83 MHz CPU s) +Run on (16 X 4849.08 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.39, 1.20, 0.97 +Load Average: 1.02, 0.95, 0.69 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 300 ns 300 ns 2364526 +bm_call::direct__Function::set_string 291 ns 291 ns 2418278 -bm_call::via_function_ptr__Function::set_string 308 ns 308 ns 2261139 -bm_call::via_function_ptr____Method::set_string 305 ns 305 ns 2314184 +bm_call::via_function_ptr__Function::set_string 292 ns 292 ns 2424822 +bm_call::via_function_ptr____Method::set_string 286 ns 286 ns 2402039 -bm_std::function_calls__Function::set_string 304 ns 304 ns 2341024 -bm_std::function_calls____Method::set_string 289 ns 289 ns 2389222 +bm_std::function_calls__Function::set_string 287 ns 287 ns 2465734 +bm_std::function_calls____Method::set_string 291 ns 291 ns 2441376 -bm_rtl::function_calls__Function::set_string 332 ns 332 ns 2175216 -bm_rtl::method_calls______Method::set_string 322 ns 322 ns 2088936 +bm_rtl::function_calls__Function::set_string 311 ns 311 ns 2236358 +bm_rtl::method_calls______Method::set_string 311 ns 311 ns 2265730 -bm_rtl::function__ErasedReturnType::set_string 323 ns 322 ns 2146160 -bm_rtl::method____ErasedReturnType::set_string 333 ns 333 ns 2191564 -bm_rtl::method____ErasedTargetType::set_string 303 ns 303 ns 2332242 -bm_rtl::method____ErasedTargetAndReturnType::set_string 326 ns 326 ns 2345345 +bm_rtl::function__ErasedReturnType::set_string 311 ns 311 ns 2245428 +bm_rtl::method____ErasedReturnType::set_string 308 ns 308 ns 2264057 +bm_rtl::method____ErasedTargetType::set_string 311 ns 310 ns 2257890 +bm_rtl::method____ErasedTargetAndReturnType::set_string 311 ns 311 ns 2244261 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 566 ns 566 ns 1251288 +bm_call::direct__Function::get_string 590 ns 590 ns 1182058 -bm_call::via_function_ptr__Function::get_string 548 ns 548 ns 1233039 -bm_call::via_function_ptr____Method::get_string 540 ns 540 ns 1272200 +bm_call::via_function_ptr__Function::get_string 590 ns 590 ns 1185424 +bm_call::via_function_ptr____Method::get_string 590 ns 590 ns 1185900 -bm_std::function_calls__Function::get_string 541 ns 541 ns 1268122 -bm_std::function_calls____Method::get_string 543 ns 543 ns 1234772 +bm_std::function_calls__Function::get_string 593 ns 593 ns 1177543 +bm_std::function_calls____Method::get_string 596 ns 596 ns 1179929 -bm_rtl::function_calls__Function::get_string 543 ns 543 ns 1288268 -bm_rtl::method_calls______Method::get_string 546 ns 546 ns 1267151 +bm_rtl::function_calls__Function::get_string 589 ns 589 ns 1182819 +bm_rtl::method_calls______Method::get_string 589 ns 589 ns 1187964 -bm_rtl::function__ErasedReturnType::get_string 659 ns 659 ns 1057558 -bm_rtl::method____ErasedReturnType::get_string 662 ns 662 ns 1022937 -bm_rtl::method____ErasedTargetType::get_string 562 ns 562 ns 1212939 -bm_rtl::method____ErasedTargetAndReturnType::get_string 666 ns 666 ns 1049185 +bm_rtl::function__ErasedReturnType::get_string 606 ns 606 ns 1157909 +bm_rtl::method____ErasedReturnType::get_string 607 ns 607 ns 1159297 +bm_rtl::method____ErasedTargetType::get_string 600 ns 600 ns 1160673 +bm_rtl::method____ErasedTargetAndReturnType::get_string 608 ns 608 ns 1153514 ----------------------------------- -[2025-11-04 12:22:37] >>> Run 2: workload scale = 20 +[2026-01-19 23:06:43] >>> Run 2: workload scale = 20 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 20 iterations ============================================= -2025-11-04T12:22:37+05:30 +2026-01-19T23:06:43+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1913.44 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.41, 1.22, 0.98 +Load Average: 1.02, 0.95, 0.70 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 295 ns 295 ns 2334833 +bm_call::direct__Function::set_string 283 ns 283 ns 2496763 -bm_call::via_function_ptr__Function::set_string 300 ns 300 ns 2352180 -bm_call::via_function_ptr____Method::set_string 301 ns 301 ns 2293720 +bm_call::via_function_ptr__Function::set_string 284 ns 284 ns 2467014 +bm_call::via_function_ptr____Method::set_string 282 ns 282 ns 2495436 -bm_std::function_calls__Function::set_string 296 ns 296 ns 2395257 -bm_std::function_calls____Method::set_string 301 ns 301 ns 2276040 +bm_std::function_calls__Function::set_string 286 ns 286 ns 2441347 +bm_std::function_calls____Method::set_string 280 ns 280 ns 2487991 -bm_rtl::function_calls__Function::set_string 297 ns 297 ns 2345901 -bm_rtl::method_calls______Method::set_string 296 ns 296 ns 2355417 +bm_rtl::function_calls__Function::set_string 283 ns 283 ns 2469977 +bm_rtl::method_calls______Method::set_string 284 ns 284 ns 2497314 -bm_rtl::function__ErasedReturnType::set_string 295 ns 295 ns 2377750 -bm_rtl::method____ErasedReturnType::set_string 294 ns 294 ns 2351079 -bm_rtl::method____ErasedTargetType::set_string 295 ns 295 ns 2383689 -bm_rtl::method____ErasedTargetAndReturnType::set_string 296 ns 296 ns 2374165 +bm_rtl::function__ErasedReturnType::set_string 281 ns 281 ns 2483595 +bm_rtl::method____ErasedReturnType::set_string 285 ns 285 ns 2441698 +bm_rtl::method____ErasedTargetType::set_string 285 ns 285 ns 2457468 +bm_rtl::method____ErasedTargetAndReturnType::set_string 284 ns 284 ns 2472081 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 536 ns 536 ns 1301506 +bm_call::direct__Function::get_string 513 ns 513 ns 1363089 -bm_call::via_function_ptr__Function::get_string 535 ns 535 ns 1316754 -bm_call::via_function_ptr____Method::get_string 534 ns 534 ns 1293290 +bm_call::via_function_ptr__Function::get_string 513 ns 513 ns 1359811 +bm_call::via_function_ptr____Method::get_string 515 ns 515 ns 1353957 -bm_std::function_calls__Function::get_string 537 ns 536 ns 1307063 -bm_std::function_calls____Method::get_string 540 ns 540 ns 1284540 +bm_std::function_calls__Function::get_string 522 ns 522 ns 1339690 +bm_std::function_calls____Method::get_string 516 ns 516 ns 1344580 -bm_rtl::function_calls__Function::get_string 536 ns 536 ns 1287766 -bm_rtl::method_calls______Method::get_string 539 ns 539 ns 1301959 +bm_rtl::function_calls__Function::get_string 513 ns 513 ns 1367161 +bm_rtl::method_calls______Method::get_string 513 ns 513 ns 1369286 -bm_rtl::function__ErasedReturnType::get_string 641 ns 641 ns 1085182 -bm_rtl::method____ErasedReturnType::get_string 645 ns 645 ns 1084685 -bm_rtl::method____ErasedTargetType::get_string 546 ns 546 ns 1273493 -bm_rtl::method____ErasedTargetAndReturnType::get_string 649 ns 649 ns 1072660 +bm_rtl::function__ErasedReturnType::get_string 530 ns 530 ns 1302691 +bm_rtl::method____ErasedReturnType::get_string 539 ns 539 ns 1297240 +bm_rtl::method____ErasedTargetType::get_string 534 ns 534 ns 1314364 +bm_rtl::method____ErasedTargetAndReturnType::get_string 541 ns 541 ns 1294039 ----------------------------------- -[2025-11-04 12:22:57] >>> Run 3: workload scale = 20 +[2026-01-19 23:07:03] >>> Run 3: workload scale = 20 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 20 iterations ============================================= -2025-11-04T12:22:57+05:30 +2026-01-19T23:07:03+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3817.78 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.29, 1.21, 0.98 +Load Average: 1.01, 0.96, 0.71 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 288 ns 288 ns 2443622 +bm_call::direct__Function::set_string 280 ns 280 ns 2516712 -bm_call::via_function_ptr__Function::set_string 291 ns 291 ns 2423578 -bm_call::via_function_ptr____Method::set_string 295 ns 295 ns 2407524 +bm_call::via_function_ptr__Function::set_string 281 ns 281 ns 2482011 +bm_call::via_function_ptr____Method::set_string 279 ns 279 ns 2503584 -bm_std::function_calls__Function::set_string 294 ns 294 ns 2344270 -bm_std::function_calls____Method::set_string 291 ns 291 ns 2396174 +bm_std::function_calls__Function::set_string 281 ns 281 ns 2480554 +bm_std::function_calls____Method::set_string 281 ns 281 ns 2518718 -bm_rtl::function_calls__Function::set_string 293 ns 293 ns 2412280 -bm_rtl::method_calls______Method::set_string 294 ns 294 ns 2426574 +bm_rtl::function_calls__Function::set_string 281 ns 281 ns 2502456 +bm_rtl::method_calls______Method::set_string 281 ns 281 ns 2500633 -bm_rtl::function__ErasedReturnType::set_string 295 ns 295 ns 2377689 -bm_rtl::method____ErasedReturnType::set_string 293 ns 293 ns 2394389 -bm_rtl::method____ErasedTargetType::set_string 297 ns 297 ns 2344509 -bm_rtl::method____ErasedTargetAndReturnType::set_string 300 ns 300 ns 2352884 +bm_rtl::function__ErasedReturnType::set_string 284 ns 283 ns 2477449 +bm_rtl::method____ErasedReturnType::set_string 281 ns 281 ns 2487763 +bm_rtl::method____ErasedTargetType::set_string 289 ns 289 ns 2443654 +bm_rtl::method____ErasedTargetAndReturnType::set_string 283 ns 283 ns 2474642 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 536 ns 536 ns 1295414 +bm_call::direct__Function::get_string 512 ns 512 ns 1370543 -bm_call::via_function_ptr__Function::get_string 541 ns 541 ns 1233897 -bm_call::via_function_ptr____Method::get_string 541 ns 541 ns 1288959 +bm_call::via_function_ptr__Function::get_string 512 ns 511 ns 1372544 +bm_call::via_function_ptr____Method::get_string 512 ns 512 ns 1356469 -bm_std::function_calls__Function::get_string 547 ns 547 ns 1262440 -bm_std::function_calls____Method::get_string 566 ns 566 ns 1227613 +bm_std::function_calls__Function::get_string 513 ns 513 ns 1363349 +bm_std::function_calls____Method::get_string 514 ns 514 ns 1365830 -bm_rtl::function_calls__Function::get_string 548 ns 548 ns 1275405 -bm_rtl::method_calls______Method::get_string 548 ns 548 ns 1245585 +bm_rtl::function_calls__Function::get_string 512 ns 512 ns 1370684 +bm_rtl::method_calls______Method::get_string 511 ns 511 ns 1372313 -bm_rtl::function__ErasedReturnType::get_string 653 ns 653 ns 1046627 -bm_rtl::method____ErasedReturnType::get_string 650 ns 650 ns 1059528 -bm_rtl::method____ErasedTargetType::get_string 552 ns 552 ns 1244640 -bm_rtl::method____ErasedTargetAndReturnType::get_string 654 ns 654 ns 1067972 +bm_rtl::function__ErasedReturnType::get_string 527 ns 527 ns 1327641 +bm_rtl::method____ErasedReturnType::get_string 527 ns 527 ns 1313459 +bm_rtl::method____ErasedTargetType::get_string 525 ns 525 ns 1335873 +bm_rtl::method____ErasedTargetAndReturnType::get_string 530 ns 530 ns 1321480 ----------------------------------- -[2025-11-04 12:23:16] >>> Run 1: workload scale = 25 +[2026-01-19 23:07:22] >>> Run 1: workload scale = 25 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 25 iterations ============================================= -2025-11-04T12:23:16+05:30 +2026-01-19T23:07:22+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2745.05 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.21, 1.19, 0.99 +Load Average: 1.01, 0.96, 0.72 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 321 ns 321 ns 2145052 +bm_call::direct__Function::set_string 352 ns 352 ns 1986306 -bm_call::via_function_ptr__Function::set_string 321 ns 321 ns 2172662 -bm_call::via_function_ptr____Method::set_string 320 ns 320 ns 2190165 +bm_call::via_function_ptr__Function::set_string 355 ns 354 ns 1970032 +bm_call::via_function_ptr____Method::set_string 355 ns 355 ns 1975489 -bm_std::function_calls__Function::set_string 319 ns 319 ns 2215014 -bm_std::function_calls____Method::set_string 319 ns 319 ns 2192899 +bm_std::function_calls__Function::set_string 362 ns 362 ns 1947671 +bm_std::function_calls____Method::set_string 348 ns 348 ns 2015214 -bm_rtl::function_calls__Function::set_string 326 ns 326 ns 2167253 -bm_rtl::method_calls______Method::set_string 323 ns 323 ns 2146891 +bm_rtl::function_calls__Function::set_string 356 ns 356 ns 1960779 +bm_rtl::method_calls______Method::set_string 356 ns 356 ns 1970573 -bm_rtl::function__ErasedReturnType::set_string 331 ns 331 ns 2128543 -bm_rtl::method____ErasedReturnType::set_string 330 ns 330 ns 2161480 -bm_rtl::method____ErasedTargetType::set_string 329 ns 329 ns 2093144 -bm_rtl::method____ErasedTargetAndReturnType::set_string 328 ns 328 ns 2128289 +bm_rtl::function__ErasedReturnType::set_string 355 ns 355 ns 1967083 +bm_rtl::method____ErasedReturnType::set_string 363 ns 363 ns 1931290 +bm_rtl::method____ErasedTargetType::set_string 357 ns 357 ns 1956980 +bm_rtl::method____ErasedTargetAndReturnType::set_string 357 ns 357 ns 1961696 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 669 ns 668 ns 937516 +bm_call::direct__Function::get_string 741 ns 741 ns 946428 -bm_call::via_function_ptr__Function::get_string 664 ns 664 ns 1042010 -bm_call::via_function_ptr____Method::get_string 666 ns 666 ns 1047814 +bm_call::via_function_ptr__Function::get_string 744 ns 744 ns 939247 +bm_call::via_function_ptr____Method::get_string 749 ns 748 ns 934680 -bm_std::function_calls__Function::get_string 668 ns 668 ns 1021621 -bm_std::function_calls____Method::get_string 668 ns 668 ns 1017963 +bm_std::function_calls__Function::get_string 761 ns 761 ns 920792 +bm_std::function_calls____Method::get_string 752 ns 752 ns 931714 -bm_rtl::function_calls__Function::get_string 669 ns 669 ns 1037708 -bm_rtl::method_calls______Method::get_string 665 ns 665 ns 1047174 +bm_rtl::function_calls__Function::get_string 745 ns 745 ns 931761 +bm_rtl::method_calls______Method::get_string 745 ns 745 ns 936980 -bm_rtl::function__ErasedReturnType::get_string 793 ns 793 ns 883503 -bm_rtl::method____ErasedReturnType::get_string 795 ns 795 ns 871865 -bm_rtl::method____ErasedTargetType::get_string 680 ns 680 ns 1021801 -bm_rtl::method____ErasedTargetAndReturnType::get_string 801 ns 801 ns 874189 +bm_rtl::function__ErasedReturnType::get_string 765 ns 765 ns 915979 +bm_rtl::method____ErasedReturnType::get_string 776 ns 776 ns 902448 +bm_rtl::method____ErasedTargetType::get_string 768 ns 768 ns 910555 +bm_rtl::method____ErasedTargetAndReturnType::get_string 781 ns 781 ns 895862 ----------------------------------- -[2025-11-04 12:23:37] >>> Run 2: workload scale = 25 +[2026-01-19 23:07:43] >>> Run 2: workload scale = 25 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 25 iterations ============================================= -2025-11-04T12:23:37+05:30 +2026-01-19T23:07:43+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3126.6 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.22, 1.19, 0.99 +Load Average: 1.00, 0.97, 0.72 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 320 ns 320 ns 2189231 +bm_call::direct__Function::set_string 352 ns 352 ns 1982071 -bm_call::via_function_ptr__Function::set_string 342 ns 342 ns 2163509 -bm_call::via_function_ptr____Method::set_string 365 ns 365 ns 1916223 +bm_call::via_function_ptr__Function::set_string 355 ns 355 ns 1970296 +bm_call::via_function_ptr____Method::set_string 356 ns 356 ns 1963515 -bm_std::function_calls__Function::set_string 361 ns 361 ns 1905923 -bm_std::function_calls____Method::set_string 356 ns 356 ns 1958867 +bm_std::function_calls__Function::set_string 342 ns 342 ns 2044461 +bm_std::function_calls____Method::set_string 344 ns 344 ns 2043629 -bm_rtl::function_calls__Function::set_string 359 ns 359 ns 1907278 -bm_rtl::method_calls______Method::set_string 354 ns 354 ns 1909265 +bm_rtl::function_calls__Function::set_string 345 ns 345 ns 2032898 +bm_rtl::method_calls______Method::set_string 345 ns 345 ns 2030104 -bm_rtl::function__ErasedReturnType::set_string 364 ns 363 ns 1935027 -bm_rtl::method____ErasedReturnType::set_string 360 ns 360 ns 1957560 -bm_rtl::method____ErasedTargetType::set_string 362 ns 362 ns 1941976 -bm_rtl::method____ErasedTargetAndReturnType::set_string 332 ns 332 ns 2099239 +bm_rtl::function__ErasedReturnType::set_string 347 ns 347 ns 2003550 +bm_rtl::method____ErasedReturnType::set_string 347 ns 347 ns 2018317 +bm_rtl::method____ErasedTargetType::set_string 348 ns 348 ns 2001122 +bm_rtl::method____ErasedTargetAndReturnType::set_string 357 ns 357 ns 1968473 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 680 ns 680 ns 1030475 +bm_call::direct__Function::get_string 735 ns 735 ns 949993 -bm_call::via_function_ptr__Function::get_string 668 ns 667 ns 1005079 -bm_call::via_function_ptr____Method::get_string 668 ns 668 ns 1048120 +bm_call::via_function_ptr__Function::get_string 737 ns 737 ns 948580 +bm_call::via_function_ptr____Method::get_string 743 ns 743 ns 940417 -bm_std::function_calls__Function::get_string 670 ns 670 ns 1049568 -bm_std::function_calls____Method::get_string 666 ns 666 ns 1053000 +bm_std::function_calls__Function::get_string 742 ns 742 ns 942789 +bm_std::function_calls____Method::get_string 759 ns 759 ns 924306 -bm_rtl::function_calls__Function::get_string 665 ns 665 ns 1055481 -bm_rtl::method_calls______Method::get_string 665 ns 665 ns 1058130 +bm_rtl::function_calls__Function::get_string 739 ns 739 ns 948214 +bm_rtl::method_calls______Method::get_string 739 ns 739 ns 947757 -bm_rtl::function__ErasedReturnType::get_string 788 ns 788 ns 887250 -bm_rtl::method____ErasedReturnType::get_string 793 ns 793 ns 890800 -bm_rtl::method____ErasedTargetType::get_string 698 ns 698 ns 1004244 -bm_rtl::method____ErasedTargetAndReturnType::get_string 794 ns 794 ns 884426 +bm_rtl::function__ErasedReturnType::get_string 763 ns 763 ns 912115 +bm_rtl::method____ErasedReturnType::get_string 763 ns 763 ns 917643 +bm_rtl::method____ErasedTargetType::get_string 761 ns 761 ns 920593 +bm_rtl::method____ErasedTargetAndReturnType::get_string 767 ns 767 ns 913033 ----------------------------------- -[2025-11-04 12:23:57] >>> Run 3: workload scale = 25 +[2026-01-19 23:08:04] >>> Run 3: workload scale = 25 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 25 iterations ============================================= -2025-11-04T12:23:57+05:30 +2026-01-19T23:08:04+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800.525 MHz CPU s) +Run on (16 X 4239.17 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.44, 1.25, 1.02 +Load Average: 1.00, 0.97, 0.73 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 318 ns 318 ns 2197752 +bm_call::direct__Function::set_string 318 ns 318 ns 2209791 -bm_call::via_function_ptr__Function::set_string 322 ns 322 ns 2162163 -bm_call::via_function_ptr____Method::set_string 345 ns 345 ns 2174209 +bm_call::via_function_ptr__Function::set_string 320 ns 320 ns 2194462 +bm_call::via_function_ptr____Method::set_string 318 ns 318 ns 2200705 -bm_std::function_calls__Function::set_string 354 ns 354 ns 1984909 -bm_std::function_calls____Method::set_string 353 ns 353 ns 1979871 +bm_std::function_calls__Function::set_string 330 ns 330 ns 2105129 +bm_std::function_calls____Method::set_string 317 ns 317 ns 2214509 -bm_rtl::function_calls__Function::set_string 358 ns 357 ns 1969102 -bm_rtl::method_calls______Method::set_string 357 ns 357 ns 1963100 +bm_rtl::function_calls__Function::set_string 320 ns 320 ns 2196336 +bm_rtl::method_calls______Method::set_string 319 ns 319 ns 2193113 -bm_rtl::function__ErasedReturnType::set_string 356 ns 356 ns 1956769 -bm_rtl::method____ErasedReturnType::set_string 359 ns 359 ns 1953417 -bm_rtl::method____ErasedTargetType::set_string 363 ns 363 ns 1961373 -bm_rtl::method____ErasedTargetAndReturnType::set_string 360 ns 360 ns 1947329 +bm_rtl::function__ErasedReturnType::set_string 326 ns 326 ns 2153096 +bm_rtl::method____ErasedReturnType::set_string 334 ns 334 ns 2109094 +bm_rtl::method____ErasedTargetType::set_string 327 ns 327 ns 2126213 +bm_rtl::method____ErasedTargetAndReturnType::set_string 329 ns 329 ns 2135549 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 748 ns 748 ns 924341 +bm_call::direct__Function::get_string 676 ns 676 ns 1033968 -bm_call::via_function_ptr__Function::get_string 747 ns 747 ns 925487 -bm_call::via_function_ptr____Method::get_string 746 ns 746 ns 928898 +bm_call::via_function_ptr__Function::get_string 684 ns 684 ns 1024490 +bm_call::via_function_ptr____Method::get_string 699 ns 699 ns 1001694 -bm_std::function_calls__Function::get_string 749 ns 749 ns 925990 -bm_std::function_calls____Method::get_string 749 ns 749 ns 929901 +bm_std::function_calls__Function::get_string 696 ns 696 ns 1007881 +bm_std::function_calls____Method::get_string 686 ns 686 ns 1022139 -bm_rtl::function_calls__Function::get_string 746 ns 746 ns 915844 -bm_rtl::method_calls______Method::get_string 750 ns 750 ns 928817 +bm_rtl::function_calls__Function::get_string 682 ns 681 ns 1029656 +bm_rtl::method_calls______Method::get_string 680 ns 680 ns 1029375 -bm_rtl::function__ErasedReturnType::get_string 901 ns 901 ns 776868 -bm_rtl::method____ErasedReturnType::get_string 897 ns 897 ns 773498 -bm_rtl::method____ErasedTargetType::get_string 757 ns 757 ns 925383 -bm_rtl::method____ErasedTargetAndReturnType::get_string 897 ns 897 ns 778280 +bm_rtl::function__ErasedReturnType::get_string 691 ns 691 ns 1004599 +bm_rtl::method____ErasedReturnType::get_string 711 ns 711 ns 984643 +bm_rtl::method____ErasedTargetType::get_string 716 ns 715 ns 978554 +bm_rtl::method____ErasedTargetAndReturnType::get_string 715 ns 715 ns 978719 ----------------------------------- -[2025-11-04 12:24:18] >>> Run 1: workload scale = 30 +[2026-01-19 23:08:24] >>> Run 1: workload scale = 30 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 30 iterations ============================================= -2025-11-04T12:24:18+05:30 +2026-01-19T23:08:24+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4153.56 MHz CPU s) +Run on (16 X 2476.53 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.32, 1.23, 1.01 +Load Average: 1.00, 0.97, 0.74 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 374 ns 373 ns 1873476 +bm_call::direct__Function::set_string 396 ns 396 ns 1770525 -bm_call::via_function_ptr__Function::set_string 376 ns 376 ns 1863509 -bm_call::via_function_ptr____Method::set_string 374 ns 374 ns 1863221 +bm_call::via_function_ptr__Function::set_string 394 ns 394 ns 1782096 +bm_call::via_function_ptr____Method::set_string 395 ns 395 ns 1773848 -bm_std::function_calls__Function::set_string 373 ns 373 ns 1871738 -bm_std::function_calls____Method::set_string 376 ns 376 ns 1865547 +bm_std::function_calls__Function::set_string 400 ns 399 ns 1754344 +bm_std::function_calls____Method::set_string 401 ns 401 ns 1730094 -bm_rtl::function_calls__Function::set_string 376 ns 376 ns 1865067 -bm_rtl::method_calls______Method::set_string 377 ns 377 ns 1858187 +bm_rtl::function_calls__Function::set_string 401 ns 401 ns 1739081 +bm_rtl::method_calls______Method::set_string 401 ns 401 ns 1745860 -bm_rtl::function__ErasedReturnType::set_string 380 ns 380 ns 1837243 -bm_rtl::method____ErasedReturnType::set_string 386 ns 386 ns 1822783 -bm_rtl::method____ErasedTargetType::set_string 412 ns 412 ns 1701170 -bm_rtl::method____ErasedTargetAndReturnType::set_string 414 ns 413 ns 1700118 +bm_rtl::function__ErasedReturnType::set_string 403 ns 403 ns 1745498 +bm_rtl::method____ErasedReturnType::set_string 394 ns 394 ns 1778868 +bm_rtl::method____ErasedTargetType::set_string 398 ns 398 ns 1764951 +bm_rtl::method____ErasedTargetAndReturnType::set_string 395 ns 395 ns 1776625 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 956 ns 956 ns 728821 +bm_call::direct__Function::get_string 928 ns 928 ns 754696 -bm_call::via_function_ptr__Function::get_string 956 ns 956 ns 729173 -bm_call::via_function_ptr____Method::get_string 955 ns 954 ns 732604 +bm_call::via_function_ptr__Function::get_string 929 ns 929 ns 753468 +bm_call::via_function_ptr____Method::get_string 928 ns 928 ns 754762 -bm_std::function_calls__Function::get_string 963 ns 963 ns 720513 -bm_std::function_calls____Method::get_string 970 ns 970 ns 720651 +bm_std::function_calls__Function::get_string 933 ns 933 ns 742321 +bm_std::function_calls____Method::get_string 932 ns 932 ns 751071 -bm_rtl::function_calls__Function::get_string 962 ns 962 ns 724222 -bm_rtl::method_calls______Method::get_string 964 ns 964 ns 720737 +bm_rtl::function_calls__Function::get_string 931 ns 930 ns 753258 +bm_rtl::method_calls______Method::get_string 928 ns 928 ns 753388 -bm_rtl::function__ErasedReturnType::get_string 1167 ns 1166 ns 598228 -bm_rtl::method____ErasedReturnType::get_string 1177 ns 1177 ns 594646 -bm_rtl::method____ErasedTargetType::get_string 982 ns 982 ns 710920 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1181 ns 1181 ns 590085 +bm_rtl::function__ErasedReturnType::get_string 966 ns 966 ns 724498 +bm_rtl::method____ErasedReturnType::get_string 947 ns 946 ns 732009 +bm_rtl::method____ErasedTargetType::get_string 952 ns 952 ns 735704 +bm_rtl::method____ErasedTargetAndReturnType::get_string 950 ns 950 ns 736736 ----------------------------------- -[2025-11-04 12:24:39] >>> Run 2: workload scale = 30 +[2026-01-19 23:08:45] >>> Run 2: workload scale = 30 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 30 iterations ============================================= -2025-11-04T12:24:39+05:30 +2026-01-19T23:08:45+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2855.26 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.23, 1.22, 1.01 +Load Average: 1.00, 0.97, 0.74 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 400 ns 400 ns 1746516 +bm_call::direct__Function::set_string 399 ns 399 ns 1758978 -bm_call::via_function_ptr__Function::set_string 401 ns 401 ns 1746207 -bm_call::via_function_ptr____Method::set_string 401 ns 401 ns 1755755 +bm_call::via_function_ptr__Function::set_string 399 ns 399 ns 1760800 +bm_call::via_function_ptr____Method::set_string 397 ns 397 ns 1751423 -bm_std::function_calls__Function::set_string 402 ns 402 ns 1742386 -bm_std::function_calls____Method::set_string 403 ns 403 ns 1743721 +bm_std::function_calls__Function::set_string 401 ns 401 ns 1756623 +bm_std::function_calls____Method::set_string 398 ns 398 ns 1748346 -bm_rtl::function_calls__Function::set_string 406 ns 406 ns 1726824 -bm_rtl::method_calls______Method::set_string 401 ns 401 ns 1734713 +bm_rtl::function_calls__Function::set_string 397 ns 397 ns 1758430 +bm_rtl::method_calls______Method::set_string 399 ns 399 ns 1754744 -bm_rtl::function__ErasedReturnType::set_string 408 ns 408 ns 1720118 -bm_rtl::method____ErasedReturnType::set_string 407 ns 407 ns 1718166 -bm_rtl::method____ErasedTargetType::set_string 410 ns 410 ns 1711945 -bm_rtl::method____ErasedTargetAndReturnType::set_string 381 ns 381 ns 1768747 +bm_rtl::function__ErasedReturnType::set_string 401 ns 401 ns 1755050 +bm_rtl::method____ErasedReturnType::set_string 394 ns 394 ns 1782942 +bm_rtl::method____ErasedTargetType::set_string 409 ns 409 ns 1722123 +bm_rtl::method____ErasedTargetAndReturnType::set_string 385 ns 385 ns 1768735 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 881 ns 881 ns 787730 +bm_call::direct__Function::get_string 857 ns 857 ns 817452 -bm_call::via_function_ptr__Function::get_string 874 ns 874 ns 796785 -bm_call::via_function_ptr____Method::get_string 872 ns 872 ns 793060 +bm_call::via_function_ptr__Function::get_string 859 ns 859 ns 815751 +bm_call::via_function_ptr____Method::get_string 856 ns 856 ns 817710 -bm_std::function_calls__Function::get_string 891 ns 890 ns 784802 -bm_std::function_calls____Method::get_string 889 ns 889 ns 780768 +bm_std::function_calls__Function::get_string 870 ns 870 ns 804960 +bm_std::function_calls____Method::get_string 869 ns 868 ns 797056 -bm_rtl::function_calls__Function::get_string 883 ns 883 ns 789722 -bm_rtl::method_calls______Method::get_string 887 ns 887 ns 786262 +bm_rtl::function_calls__Function::get_string 858 ns 858 ns 816875 +bm_rtl::method_calls______Method::get_string 857 ns 857 ns 817853 -bm_rtl::function__ErasedReturnType::get_string 1083 ns 1083 ns 643370 -bm_rtl::method____ErasedReturnType::get_string 1089 ns 1089 ns 643122 -bm_rtl::method____ErasedTargetType::get_string 912 ns 912 ns 752875 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1095 ns 1095 ns 640973 +bm_rtl::function__ErasedReturnType::get_string 902 ns 902 ns 776365 +bm_rtl::method____ErasedReturnType::get_string 885 ns 885 ns 791981 +bm_rtl::method____ErasedTargetType::get_string 891 ns 891 ns 781450 +bm_rtl::method____ErasedTargetAndReturnType::get_string 882 ns 882 ns 793685 ----------------------------------- -[2025-11-04 12:25:01] >>> Run 3: workload scale = 30 +[2026-01-19 23:09:07] >>> Run 3: workload scale = 30 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 30 iterations ============================================= -2025-11-04T12:25:01+05:30 +2026-01-19T23:09:07+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4282.06 MHz CPU s) +Run on (16 X 4883.24 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.15, 1.20, 1.01 +Load Average: 1.00, 0.98, 0.75 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 374 ns 374 ns 1885971 +bm_call::direct__Function::set_string 368 ns 368 ns 1907536 -bm_call::via_function_ptr__Function::set_string 375 ns 375 ns 1873368 -bm_call::via_function_ptr____Method::set_string 373 ns 373 ns 1868671 +bm_call::via_function_ptr__Function::set_string 367 ns 367 ns 1908381 +bm_call::via_function_ptr____Method::set_string 365 ns 365 ns 1910674 -bm_std::function_calls__Function::set_string 377 ns 377 ns 1860537 -bm_std::function_calls____Method::set_string 378 ns 378 ns 1854349 +bm_std::function_calls__Function::set_string 367 ns 367 ns 1896507 +bm_std::function_calls____Method::set_string 382 ns 382 ns 1831001 -bm_rtl::function_calls__Function::set_string 376 ns 376 ns 1861382 -bm_rtl::method_calls______Method::set_string 376 ns 376 ns 1858131 +bm_rtl::function_calls__Function::set_string 382 ns 381 ns 1831892 +bm_rtl::method_calls______Method::set_string 380 ns 380 ns 1825582 -bm_rtl::function__ErasedReturnType::set_string 383 ns 383 ns 1839310 -bm_rtl::method____ErasedReturnType::set_string 383 ns 383 ns 1832865 -bm_rtl::method____ErasedTargetType::set_string 389 ns 389 ns 1823647 -bm_rtl::method____ErasedTargetAndReturnType::set_string 393 ns 393 ns 1743924 +bm_rtl::function__ErasedReturnType::set_string 380 ns 380 ns 1837083 +bm_rtl::method____ErasedReturnType::set_string 370 ns 370 ns 1887118 +bm_rtl::method____ErasedTargetType::set_string 374 ns 374 ns 1875803 +bm_rtl::method____ErasedTargetAndReturnType::set_string 371 ns 371 ns 1887326 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 897 ns 897 ns 777617 +bm_call::direct__Function::get_string 860 ns 859 ns 816446 -bm_call::via_function_ptr__Function::get_string 891 ns 891 ns 792904 -bm_call::via_function_ptr____Method::get_string 883 ns 883 ns 752790 +bm_call::via_function_ptr__Function::get_string 861 ns 861 ns 813585 +bm_call::via_function_ptr____Method::get_string 860 ns 860 ns 813318 -bm_std::function_calls__Function::get_string 897 ns 897 ns 769458 -bm_std::function_calls____Method::get_string 893 ns 893 ns 783150 +bm_std::function_calls__Function::get_string 862 ns 862 ns 810967 +bm_std::function_calls____Method::get_string 861 ns 861 ns 813011 -bm_rtl::function_calls__Function::get_string 881 ns 881 ns 783511 -bm_rtl::method_calls______Method::get_string 892 ns 892 ns 785936 +bm_rtl::function_calls__Function::get_string 861 ns 861 ns 814070 +bm_rtl::method_calls______Method::get_string 860 ns 860 ns 814315 -bm_rtl::function__ErasedReturnType::get_string 1126 ns 1125 ns 633797 -bm_rtl::method____ErasedReturnType::get_string 1137 ns 1137 ns 602780 -bm_rtl::method____ErasedTargetType::get_string 932 ns 931 ns 758769 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1108 ns 1108 ns 602980 +bm_rtl::function__ErasedReturnType::get_string 896 ns 896 ns 780048 +bm_rtl::method____ErasedReturnType::get_string 882 ns 882 ns 797878 +bm_rtl::method____ErasedTargetType::get_string 883 ns 883 ns 793282 +bm_rtl::method____ErasedTargetAndReturnType::get_string 879 ns 879 ns 790735 ----------------------------------- -[2025-11-04 12:25:22] >>> Run 1: workload scale = 35 +[2026-01-19 23:09:28] >>> Run 1: workload scale = 35 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 35 iterations ============================================= -2025-11-04T12:25:22+05:30 +2026-01-19T23:09:28+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2237.04 MHz CPU s) +Run on (16 X 801.76 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.10, 1.18, 1.01 +Load Average: 1.00, 0.98, 0.76 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 750 ns 750 ns 924083 +bm_call::direct__Function::set_string 705 ns 705 ns 985733 -bm_call::via_function_ptr__Function::set_string 757 ns 757 ns 920347 -bm_call::via_function_ptr____Method::set_string 771 ns 771 ns 912619 +bm_call::via_function_ptr__Function::set_string 701 ns 701 ns 1000348 +bm_call::via_function_ptr____Method::set_string 701 ns 701 ns 1000636 -bm_std::function_calls__Function::set_string 780 ns 780 ns 883371 -bm_std::function_calls____Method::set_string 781 ns 780 ns 898678 +bm_std::function_calls__Function::set_string 721 ns 720 ns 967545 +bm_std::function_calls____Method::set_string 708 ns 708 ns 991569 -bm_rtl::function_calls__Function::set_string 787 ns 787 ns 862899 -bm_rtl::method_calls______Method::set_string 796 ns 796 ns 914393 +bm_rtl::function_calls__Function::set_string 700 ns 700 ns 1001086 +bm_rtl::method_calls______Method::set_string 700 ns 700 ns 998814 -bm_rtl::function__ErasedReturnType::set_string 775 ns 775 ns 874764 -bm_rtl::method____ErasedReturnType::set_string 776 ns 776 ns 907678 -bm_rtl::method____ErasedTargetType::set_string 790 ns 789 ns 866660 -bm_rtl::method____ErasedTargetAndReturnType::set_string 805 ns 805 ns 869127 +bm_rtl::function__ErasedReturnType::set_string 714 ns 714 ns 974752 +bm_rtl::method____ErasedReturnType::set_string 728 ns 728 ns 959111 +bm_rtl::method____ErasedTargetType::set_string 719 ns 719 ns 975492 +bm_rtl::method____ErasedTargetAndReturnType::set_string 723 ns 723 ns 969915 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1383 ns 1383 ns 499739 +bm_call::direct__Function::get_string 1284 ns 1284 ns 545119 -bm_call::via_function_ptr__Function::get_string 1315 ns 1315 ns 524654 -bm_call::via_function_ptr____Method::get_string 1326 ns 1326 ns 513208 +bm_call::via_function_ptr__Function::get_string 1286 ns 1286 ns 544229 +bm_call::via_function_ptr____Method::get_string 1287 ns 1287 ns 544270 -bm_std::function_calls__Function::get_string 1309 ns 1309 ns 531060 -bm_std::function_calls____Method::get_string 1331 ns 1331 ns 534228 +bm_std::function_calls__Function::get_string 1297 ns 1296 ns 539804 +bm_std::function_calls____Method::get_string 1283 ns 1283 ns 545848 -bm_rtl::function_calls__Function::get_string 1326 ns 1326 ns 514575 -bm_rtl::method_calls______Method::get_string 1326 ns 1326 ns 525314 +bm_rtl::function_calls__Function::get_string 1284 ns 1284 ns 544814 +bm_rtl::method_calls______Method::get_string 1284 ns 1284 ns 544804 -bm_rtl::function__ErasedReturnType::get_string 1549 ns 1549 ns 447415 -bm_rtl::method____ErasedReturnType::get_string 1543 ns 1543 ns 452767 -bm_rtl::method____ErasedTargetType::get_string 1352 ns 1351 ns 524647 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1562 ns 1562 ns 434293 +bm_rtl::function__ErasedReturnType::get_string 1325 ns 1325 ns 528647 +bm_rtl::method____ErasedReturnType::get_string 1334 ns 1333 ns 525192 +bm_rtl::method____ErasedTargetType::get_string 1337 ns 1337 ns 523963 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1335 ns 1335 ns 524821 ----------------------------------- -[2025-11-04 12:25:40] >>> Run 2: workload scale = 35 +[2026-01-19 23:09:46] >>> Run 2: workload scale = 35 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 35 iterations ============================================= -2025-11-04T12:25:40+05:30 +2026-01-19T23:09:46+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3670.17 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.22, 1.21, 1.02 +Load Average: 1.00, 0.98, 0.76 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 743 ns 743 ns 909759 +bm_call::direct__Function::set_string 705 ns 705 ns 986633 -bm_call::via_function_ptr__Function::set_string 740 ns 740 ns 930090 -bm_call::via_function_ptr____Method::set_string 744 ns 744 ns 933324 +bm_call::via_function_ptr__Function::set_string 704 ns 704 ns 987788 +bm_call::via_function_ptr____Method::set_string 704 ns 704 ns 997143 -bm_std::function_calls__Function::set_string 743 ns 743 ns 913502 -bm_std::function_calls____Method::set_string 758 ns 758 ns 931457 +bm_std::function_calls__Function::set_string 706 ns 706 ns 997719 +bm_std::function_calls____Method::set_string 709 ns 709 ns 986989 -bm_rtl::function_calls__Function::set_string 767 ns 767 ns 910065 -bm_rtl::method_calls______Method::set_string 743 ns 743 ns 931388 +bm_rtl::function_calls__Function::set_string 701 ns 701 ns 987483 +bm_rtl::method_calls______Method::set_string 703 ns 703 ns 997777 -bm_rtl::function__ErasedReturnType::set_string 775 ns 775 ns 921081 -bm_rtl::method____ErasedReturnType::set_string 761 ns 761 ns 915625 -bm_rtl::method____ErasedTargetType::set_string 756 ns 756 ns 913038 -bm_rtl::method____ErasedTargetAndReturnType::set_string 771 ns 771 ns 901263 +bm_rtl::function__ErasedReturnType::set_string 711 ns 711 ns 986143 +bm_rtl::method____ErasedReturnType::set_string 712 ns 712 ns 981320 +bm_rtl::method____ErasedTargetType::set_string 729 ns 729 ns 953478 +bm_rtl::method____ErasedTargetAndReturnType::set_string 721 ns 721 ns 972637 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1357 ns 1357 ns 502661 +bm_call::direct__Function::get_string 1292 ns 1292 ns 542071 -bm_call::via_function_ptr__Function::get_string 1408 ns 1408 ns 503040 -bm_call::via_function_ptr____Method::get_string 1446 ns 1446 ns 478290 +bm_call::via_function_ptr__Function::get_string 1295 ns 1295 ns 540984 +bm_call::via_function_ptr____Method::get_string 1295 ns 1295 ns 541118 -bm_std::function_calls__Function::get_string 1373 ns 1373 ns 498957 -bm_std::function_calls____Method::get_string 1398 ns 1398 ns 502891 +bm_std::function_calls__Function::get_string 1295 ns 1295 ns 540968 +bm_std::function_calls____Method::get_string 1292 ns 1292 ns 539948 -bm_rtl::function_calls__Function::get_string 1395 ns 1395 ns 488686 -bm_rtl::method_calls______Method::get_string 1382 ns 1382 ns 497336 +bm_rtl::function_calls__Function::get_string 1292 ns 1292 ns 541902 +bm_rtl::method_calls______Method::get_string 1294 ns 1294 ns 541265 -bm_rtl::function__ErasedReturnType::get_string 1560 ns 1560 ns 425909 -bm_rtl::method____ErasedReturnType::get_string 1542 ns 1542 ns 450811 -bm_rtl::method____ErasedTargetType::get_string 1337 ns 1337 ns 521375 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1552 ns 1552 ns 447731 +bm_rtl::function__ErasedReturnType::get_string 1327 ns 1327 ns 527659 +bm_rtl::method____ErasedReturnType::get_string 1329 ns 1329 ns 527155 +bm_rtl::method____ErasedTargetType::get_string 1331 ns 1331 ns 525723 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1328 ns 1328 ns 527175 ----------------------------------- -[2025-11-04 12:25:58] >>> Run 3: workload scale = 35 +[2026-01-19 23:10:03] >>> Run 3: workload scale = 35 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 35 iterations ============================================= -2025-11-04T12:25:58+05:30 +2026-01-19T23:10:03+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4129.78 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.23, 1.21, 1.02 +Load Average: 1.00, 0.98, 0.77 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 699 ns 699 ns 970616 +bm_call::direct__Function::set_string 711 ns 711 ns 981009 -bm_call::via_function_ptr__Function::set_string 733 ns 732 ns 992416 -bm_call::via_function_ptr____Method::set_string 743 ns 743 ns 951176 +bm_call::via_function_ptr__Function::set_string 706 ns 706 ns 991650 +bm_call::via_function_ptr____Method::set_string 707 ns 707 ns 993046 -bm_std::function_calls__Function::set_string 719 ns 718 ns 953330 -bm_std::function_calls____Method::set_string 722 ns 722 ns 981699 +bm_std::function_calls__Function::set_string 711 ns 711 ns 987427 +bm_std::function_calls____Method::set_string 722 ns 722 ns 965591 -bm_rtl::function_calls__Function::set_string 716 ns 716 ns 988945 -bm_rtl::method_calls______Method::set_string 711 ns 711 ns 992867 +bm_rtl::function_calls__Function::set_string 718 ns 718 ns 980439 +bm_rtl::method_calls______Method::set_string 716 ns 716 ns 981915 -bm_rtl::function__ErasedReturnType::set_string 729 ns 728 ns 961326 -bm_rtl::method____ErasedReturnType::set_string 762 ns 762 ns 954194 -bm_rtl::method____ErasedTargetType::set_string 768 ns 768 ns 893804 -bm_rtl::method____ErasedTargetAndReturnType::set_string 737 ns 736 ns 929658 +bm_rtl::function__ErasedReturnType::set_string 732 ns 732 ns 955957 +bm_rtl::method____ErasedReturnType::set_string 729 ns 729 ns 960114 +bm_rtl::method____ErasedTargetType::set_string 732 ns 732 ns 954898 +bm_rtl::method____ErasedTargetAndReturnType::set_string 732 ns 732 ns 955316 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1318 ns 1317 ns 529166 +bm_call::direct__Function::get_string 1294 ns 1294 ns 541024 -bm_call::via_function_ptr__Function::get_string 1321 ns 1321 ns 530054 -bm_call::via_function_ptr____Method::get_string 1316 ns 1316 ns 531188 +bm_call::via_function_ptr__Function::get_string 1294 ns 1294 ns 541047 +bm_call::via_function_ptr____Method::get_string 1295 ns 1295 ns 540770 -bm_std::function_calls__Function::get_string 1319 ns 1319 ns 531843 -bm_std::function_calls____Method::get_string 1321 ns 1321 ns 532253 +bm_std::function_calls__Function::get_string 1291 ns 1291 ns 542197 +bm_std::function_calls____Method::get_string 1293 ns 1293 ns 541524 -bm_rtl::function_calls__Function::get_string 1319 ns 1319 ns 531646 -bm_rtl::method_calls______Method::get_string 1319 ns 1319 ns 528183 +bm_rtl::function_calls__Function::get_string 1293 ns 1293 ns 541127 +bm_rtl::method_calls______Method::get_string 1295 ns 1294 ns 540828 -bm_rtl::function__ErasedReturnType::get_string 1615 ns 1614 ns 444285 -bm_rtl::method____ErasedReturnType::get_string 1592 ns 1592 ns 436514 -bm_rtl::method____ErasedTargetType::get_string 1407 ns 1407 ns 496278 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1624 ns 1624 ns 430770 +bm_rtl::function__ErasedReturnType::get_string 1331 ns 1331 ns 526054 +bm_rtl::method____ErasedReturnType::get_string 1324 ns 1324 ns 528304 +bm_rtl::method____ErasedTargetType::get_string 1328 ns 1327 ns 527006 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1326 ns 1325 ns 528118 ----------------------------------- -[2025-11-04 12:26:16] >>> Run 1: workload scale = 40 +[2026-01-19 23:10:21] >>> Run 1: workload scale = 40 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 40 iterations ============================================= -2025-11-04T12:26:16+05:30 +2026-01-19T23:10:21+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1742.32 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.30, 1.23, 1.03 +Load Average: 1.00, 0.98, 0.77 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 786 ns 785 ns 874794 +bm_call::direct__Function::set_string 782 ns 782 ns 891703 -bm_call::via_function_ptr__Function::set_string 789 ns 789 ns 874362 -bm_call::via_function_ptr____Method::set_string 790 ns 790 ns 883497 +bm_call::via_function_ptr__Function::set_string 773 ns 772 ns 906560 +bm_call::via_function_ptr____Method::set_string 773 ns 773 ns 907685 -bm_std::function_calls__Function::set_string 786 ns 786 ns 884943 -bm_std::function_calls____Method::set_string 790 ns 790 ns 870155 +bm_std::function_calls__Function::set_string 786 ns 786 ns 892166 +bm_std::function_calls____Method::set_string 794 ns 794 ns 882725 -bm_rtl::function_calls__Function::set_string 790 ns 790 ns 878262 -bm_rtl::method_calls______Method::set_string 791 ns 791 ns 871008 +bm_rtl::function_calls__Function::set_string 773 ns 773 ns 906587 +bm_rtl::method_calls______Method::set_string 773 ns 773 ns 905399 -bm_rtl::function__ErasedReturnType::set_string 793 ns 793 ns 881206 -bm_rtl::method____ErasedReturnType::set_string 794 ns 794 ns 876546 -bm_rtl::method____ErasedTargetType::set_string 792 ns 792 ns 872609 -bm_rtl::method____ErasedTargetAndReturnType::set_string 794 ns 794 ns 875157 +bm_rtl::function__ErasedReturnType::set_string 781 ns 781 ns 895361 +bm_rtl::method____ErasedReturnType::set_string 802 ns 802 ns 871618 +bm_rtl::method____ErasedTargetType::set_string 807 ns 807 ns 868612 +bm_rtl::method____ErasedTargetAndReturnType::set_string 798 ns 798 ns 875806 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1478 ns 1478 ns 473478 +bm_call::direct__Function::get_string 1386 ns 1386 ns 504769 -bm_call::via_function_ptr__Function::get_string 1469 ns 1469 ns 473069 -bm_call::via_function_ptr____Method::get_string 1468 ns 1468 ns 473326 +bm_call::via_function_ptr__Function::get_string 1388 ns 1388 ns 504508 +bm_call::via_function_ptr____Method::get_string 1389 ns 1389 ns 503908 -bm_std::function_calls__Function::get_string 1471 ns 1470 ns 473822 -bm_std::function_calls____Method::get_string 1473 ns 1473 ns 472376 +bm_std::function_calls__Function::get_string 1393 ns 1392 ns 502344 +bm_std::function_calls____Method::get_string 1401 ns 1401 ns 499474 -bm_rtl::function_calls__Function::get_string 1473 ns 1473 ns 473798 -bm_rtl::method_calls______Method::get_string 1470 ns 1470 ns 476866 +bm_rtl::function_calls__Function::get_string 1388 ns 1388 ns 504285 +bm_rtl::method_calls______Method::get_string 1389 ns 1389 ns 503768 -bm_rtl::function__ErasedReturnType::get_string 1821 ns 1821 ns 385183 -bm_rtl::method____ErasedReturnType::get_string 1816 ns 1816 ns 385499 -bm_rtl::method____ErasedTargetType::get_string 1489 ns 1489 ns 469694 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1821 ns 1821 ns 382024 +bm_rtl::function__ErasedReturnType::get_string 1432 ns 1431 ns 489025 +bm_rtl::method____ErasedReturnType::get_string 1441 ns 1441 ns 485874 +bm_rtl::method____ErasedTargetType::get_string 1437 ns 1437 ns 487198 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1429 ns 1429 ns 489805 ----------------------------------- -[2025-11-04 12:26:34] >>> Run 2: workload scale = 40 +[2026-01-19 23:10:39] >>> Run 2: workload scale = 40 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 40 iterations ============================================= -2025-11-04T12:26:34+05:30 +2026-01-19T23:10:39+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1593.45 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.23, 1.22, 1.03 +Load Average: 1.00, 0.99, 0.78 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 785 ns 785 ns 883374 +bm_call::direct__Function::set_string 785 ns 785 ns 888235 -bm_call::via_function_ptr__Function::set_string 796 ns 796 ns 886782 -bm_call::via_function_ptr____Method::set_string 794 ns 794 ns 877309 +bm_call::via_function_ptr__Function::set_string 783 ns 783 ns 895909 +bm_call::via_function_ptr____Method::set_string 784 ns 784 ns 892181 -bm_std::function_calls__Function::set_string 794 ns 794 ns 873699 -bm_std::function_calls____Method::set_string 796 ns 796 ns 872066 +bm_std::function_calls__Function::set_string 808 ns 807 ns 867107 +bm_std::function_calls____Method::set_string 791 ns 791 ns 886305 -bm_rtl::function_calls__Function::set_string 793 ns 793 ns 885099 -bm_rtl::method_calls______Method::set_string 816 ns 816 ns 841390 +bm_rtl::function_calls__Function::set_string 785 ns 784 ns 895366 +bm_rtl::method_calls______Method::set_string 785 ns 785 ns 893743 -bm_rtl::function__ErasedReturnType::set_string 802 ns 802 ns 847247 -bm_rtl::method____ErasedReturnType::set_string 802 ns 802 ns 858644 -bm_rtl::method____ErasedTargetType::set_string 798 ns 797 ns 870491 -bm_rtl::method____ErasedTargetAndReturnType::set_string 797 ns 797 ns 870936 +bm_rtl::function__ErasedReturnType::set_string 789 ns 789 ns 884109 +bm_rtl::method____ErasedReturnType::set_string 799 ns 799 ns 877237 +bm_rtl::method____ErasedTargetType::set_string 796 ns 796 ns 878299 +bm_rtl::method____ErasedTargetAndReturnType::set_string 795 ns 795 ns 880145 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1507 ns 1507 ns 461478 +bm_call::direct__Function::get_string 1390 ns 1390 ns 503885 -bm_call::via_function_ptr__Function::get_string 1507 ns 1507 ns 461730 -bm_call::via_function_ptr____Method::get_string 1507 ns 1507 ns 464680 +bm_call::via_function_ptr__Function::get_string 1392 ns 1392 ns 503087 +bm_call::via_function_ptr____Method::get_string 1393 ns 1393 ns 502484 -bm_std::function_calls__Function::get_string 1507 ns 1507 ns 463574 -bm_std::function_calls____Method::get_string 1520 ns 1520 ns 464089 +bm_std::function_calls__Function::get_string 1403 ns 1402 ns 499273 +bm_std::function_calls____Method::get_string 1397 ns 1396 ns 501051 -bm_rtl::function_calls__Function::get_string 1504 ns 1503 ns 458070 -bm_rtl::method_calls______Method::get_string 1517 ns 1517 ns 463656 +bm_rtl::function_calls__Function::get_string 1392 ns 1392 ns 503291 +bm_rtl::method_calls______Method::get_string 1394 ns 1394 ns 502404 -bm_rtl::function__ErasedReturnType::get_string 1837 ns 1837 ns 382222 -bm_rtl::method____ErasedReturnType::get_string 1840 ns 1840 ns 381090 -bm_rtl::method____ErasedTargetType::get_string 1521 ns 1521 ns 454047 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1841 ns 1840 ns 381784 +bm_rtl::function__ErasedReturnType::get_string 1429 ns 1429 ns 489928 +bm_rtl::method____ErasedReturnType::get_string 1443 ns 1443 ns 485194 +bm_rtl::method____ErasedTargetType::get_string 1444 ns 1444 ns 484882 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1445 ns 1444 ns 484828 ----------------------------------- -[2025-11-04 12:26:52] >>> Run 3: workload scale = 40 +[2026-01-19 23:10:57] >>> Run 3: workload scale = 40 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 40 iterations ============================================= -2025-11-04T12:26:52+05:30 +2026-01-19T23:10:57+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1598,152 +1598,152 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.16, 1.20, 1.03 +Load Average: 1.00, 0.99, 0.78 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 765 ns 765 ns 900609 +bm_call::direct__Function::set_string 793 ns 792 ns 877198 -bm_call::via_function_ptr__Function::set_string 773 ns 773 ns 902357 -bm_call::via_function_ptr____Method::set_string 775 ns 775 ns 895698 +bm_call::via_function_ptr__Function::set_string 781 ns 781 ns 897556 +bm_call::via_function_ptr____Method::set_string 782 ns 782 ns 895656 -bm_std::function_calls__Function::set_string 769 ns 769 ns 884989 -bm_std::function_calls____Method::set_string 770 ns 770 ns 905215 +bm_std::function_calls__Function::set_string 808 ns 808 ns 867700 +bm_std::function_calls____Method::set_string 794 ns 793 ns 881778 -bm_rtl::function_calls__Function::set_string 781 ns 781 ns 893172 -bm_rtl::method_calls______Method::set_string 785 ns 785 ns 871377 +bm_rtl::function_calls__Function::set_string 783 ns 783 ns 894163 +bm_rtl::method_calls______Method::set_string 782 ns 782 ns 896569 -bm_rtl::function__ErasedReturnType::set_string 796 ns 796 ns 876191 -bm_rtl::method____ErasedReturnType::set_string 795 ns 795 ns 870611 -bm_rtl::method____ErasedTargetType::set_string 786 ns 786 ns 875116 -bm_rtl::method____ErasedTargetAndReturnType::set_string 793 ns 793 ns 853059 +bm_rtl::function__ErasedReturnType::set_string 788 ns 787 ns 889379 +bm_rtl::method____ErasedReturnType::set_string 804 ns 803 ns 873015 +bm_rtl::method____ErasedTargetType::set_string 789 ns 789 ns 886401 +bm_rtl::method____ErasedTargetAndReturnType::set_string 800 ns 800 ns 875673 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1482 ns 1482 ns 471648 +bm_call::direct__Function::get_string 1391 ns 1391 ns 503452 -bm_call::via_function_ptr__Function::get_string 1478 ns 1477 ns 472419 -bm_call::via_function_ptr____Method::get_string 1487 ns 1487 ns 474564 +bm_call::via_function_ptr__Function::get_string 1393 ns 1393 ns 502459 +bm_call::via_function_ptr____Method::get_string 1395 ns 1395 ns 502068 -bm_std::function_calls__Function::get_string 1479 ns 1479 ns 467774 -bm_std::function_calls____Method::get_string 1468 ns 1468 ns 475985 +bm_std::function_calls__Function::get_string 1409 ns 1409 ns 497129 +bm_std::function_calls____Method::get_string 1397 ns 1397 ns 501255 -bm_rtl::function_calls__Function::get_string 1477 ns 1477 ns 471129 -bm_rtl::method_calls______Method::get_string 1484 ns 1483 ns 471432 +bm_rtl::function_calls__Function::get_string 1392 ns 1392 ns 502897 +bm_rtl::method_calls______Method::get_string 1394 ns 1394 ns 502374 -bm_rtl::function__ErasedReturnType::get_string 1830 ns 1829 ns 379477 -bm_rtl::method____ErasedReturnType::get_string 1833 ns 1833 ns 381079 -bm_rtl::method____ErasedTargetType::get_string 1499 ns 1499 ns 460559 -bm_rtl::method____ErasedTargetAndReturnType::get_string 1837 ns 1837 ns 375044 +bm_rtl::function__ErasedReturnType::get_string 1429 ns 1429 ns 489871 +bm_rtl::method____ErasedReturnType::get_string 1445 ns 1445 ns 484141 +bm_rtl::method____ErasedTargetType::get_string 1447 ns 1447 ns 483724 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1446 ns 1446 ns 483729 ----------------------------------- -[2025-11-04 12:27:10] >>> Run 1: workload scale = 45 +[2026-01-19 23:11:16] >>> Run 1: workload scale = 45 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 45 iterations ============================================= -2025-11-04T12:27:10+05:30 +2026-01-19T23:11:16+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2727.08 MHz CPU s) +Run on (16 X 800.791 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.12, 1.19, 1.03 +Load Average: 1.00, 0.99, 0.79 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 859 ns 859 ns 811645 +bm_call::direct__Function::set_string 870 ns 870 ns 802924 -bm_call::via_function_ptr__Function::set_string 868 ns 868 ns 810851 -bm_call::via_function_ptr____Method::set_string 865 ns 865 ns 807435 +bm_call::via_function_ptr__Function::set_string 858 ns 858 ns 815437 +bm_call::via_function_ptr____Method::set_string 859 ns 859 ns 815933 -bm_std::function_calls__Function::set_string 864 ns 863 ns 780880 -bm_std::function_calls____Method::set_string 872 ns 872 ns 806447 +bm_std::function_calls__Function::set_string 874 ns 874 ns 798507 +bm_std::function_calls____Method::set_string 885 ns 885 ns 793864 -bm_rtl::function_calls__Function::set_string 866 ns 865 ns 809246 -bm_rtl::method_calls______Method::set_string 857 ns 857 ns 818472 +bm_rtl::function_calls__Function::set_string 873 ns 873 ns 797727 +bm_rtl::method_calls______Method::set_string 876 ns 875 ns 802078 -bm_rtl::function__ErasedReturnType::set_string 880 ns 880 ns 787509 -bm_rtl::method____ErasedReturnType::set_string 876 ns 876 ns 795235 -bm_rtl::method____ErasedTargetType::set_string 866 ns 866 ns 790561 -bm_rtl::method____ErasedTargetAndReturnType::set_string 880 ns 880 ns 799653 +bm_rtl::function__ErasedReturnType::set_string 883 ns 883 ns 791520 +bm_rtl::method____ErasedReturnType::set_string 870 ns 869 ns 807324 +bm_rtl::method____ErasedTargetType::set_string 878 ns 878 ns 797789 +bm_rtl::method____ErasedTargetAndReturnType::set_string 872 ns 872 ns 799885 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1656 ns 1656 ns 423691 +bm_call::direct__Function::get_string 1584 ns 1584 ns 442078 -bm_call::via_function_ptr__Function::get_string 1645 ns 1645 ns 412059 -bm_call::via_function_ptr____Method::get_string 1651 ns 1651 ns 421852 +bm_call::via_function_ptr__Function::get_string 1585 ns 1584 ns 441731 +bm_call::via_function_ptr____Method::get_string 1582 ns 1582 ns 442494 -bm_std::function_calls__Function::get_string 1674 ns 1674 ns 417578 -bm_std::function_calls____Method::get_string 1656 ns 1656 ns 425072 +bm_std::function_calls__Function::get_string 1576 ns 1576 ns 444173 +bm_std::function_calls____Method::get_string 1577 ns 1577 ns 443790 -bm_rtl::function_calls__Function::get_string 1631 ns 1631 ns 426111 -bm_rtl::method_calls______Method::get_string 1724 ns 1724 ns 420215 +bm_rtl::function_calls__Function::get_string 1580 ns 1580 ns 442964 +bm_rtl::method_calls______Method::get_string 1581 ns 1581 ns 442876 -bm_rtl::function__ErasedReturnType::get_string 2239 ns 2239 ns 319096 -bm_rtl::method____ErasedReturnType::get_string 2118 ns 2117 ns 319400 -bm_rtl::method____ErasedTargetType::get_string 1635 ns 1634 ns 419574 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2082 ns 2081 ns 341195 +bm_rtl::function__ErasedReturnType::get_string 1600 ns 1600 ns 437508 +bm_rtl::method____ErasedReturnType::get_string 1595 ns 1595 ns 439061 +bm_rtl::method____ErasedTargetType::get_string 1595 ns 1595 ns 438882 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1597 ns 1597 ns 438309 ----------------------------------- -[2025-11-04 12:27:29] >>> Run 2: workload scale = 45 +[2026-01-19 23:11:34] >>> Run 2: workload scale = 45 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 45 iterations ============================================= -2025-11-04T12:27:29+05:30 +2026-01-19T23:11:34+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4086.01 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.17, 1.19, 1.03 +Load Average: 1.00, 0.99, 0.79 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 879 ns 879 ns 763667 +bm_call::direct__Function::set_string 872 ns 872 ns 801839 -bm_call::via_function_ptr__Function::set_string 899 ns 899 ns 800493 -bm_call::via_function_ptr____Method::set_string 874 ns 874 ns 784385 +bm_call::via_function_ptr__Function::set_string 862 ns 862 ns 811605 +bm_call::via_function_ptr____Method::set_string 864 ns 864 ns 811446 -bm_std::function_calls__Function::set_string 917 ns 916 ns 791343 -bm_std::function_calls____Method::set_string 895 ns 894 ns 722973 +bm_std::function_calls__Function::set_string 869 ns 868 ns 804505 +bm_std::function_calls____Method::set_string 861 ns 861 ns 812636 -bm_rtl::function_calls__Function::set_string 901 ns 901 ns 809623 -bm_rtl::method_calls______Method::set_string 886 ns 886 ns 772267 +bm_rtl::function_calls__Function::set_string 865 ns 865 ns 807848 +bm_rtl::method_calls______Method::set_string 865 ns 865 ns 809801 -bm_rtl::function__ErasedReturnType::set_string 869 ns 869 ns 807341 -bm_rtl::method____ErasedReturnType::set_string 869 ns 869 ns 806497 -bm_rtl::method____ErasedTargetType::set_string 868 ns 868 ns 808556 -bm_rtl::method____ErasedTargetAndReturnType::set_string 869 ns 869 ns 807730 +bm_rtl::function__ErasedReturnType::set_string 859 ns 859 ns 814420 +bm_rtl::method____ErasedReturnType::set_string 855 ns 855 ns 820098 +bm_rtl::method____ErasedTargetType::set_string 866 ns 866 ns 808728 +bm_rtl::method____ErasedTargetAndReturnType::set_string 861 ns 861 ns 810431 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1570 ns 1570 ns 445252 +bm_call::direct__Function::get_string 1584 ns 1584 ns 441922 -bm_call::via_function_ptr__Function::get_string 1566 ns 1566 ns 446490 -bm_call::via_function_ptr____Method::get_string 1564 ns 1564 ns 447557 +bm_call::via_function_ptr__Function::get_string 1591 ns 1591 ns 439923 +bm_call::via_function_ptr____Method::get_string 1580 ns 1580 ns 442731 -bm_std::function_calls__Function::get_string 1565 ns 1565 ns 447484 -bm_std::function_calls____Method::get_string 1567 ns 1567 ns 447153 +bm_std::function_calls__Function::get_string 1578 ns 1578 ns 444219 +bm_std::function_calls____Method::get_string 1577 ns 1577 ns 443864 -bm_rtl::function_calls__Function::get_string 1560 ns 1560 ns 449067 -bm_rtl::method_calls______Method::get_string 1558 ns 1558 ns 449923 +bm_rtl::function_calls__Function::get_string 1589 ns 1589 ns 440690 +bm_rtl::method_calls______Method::get_string 1583 ns 1582 ns 442763 -bm_rtl::function__ErasedReturnType::get_string 2038 ns 2038 ns 342820 -bm_rtl::method____ErasedReturnType::get_string 2039 ns 2039 ns 343146 -bm_rtl::method____ErasedTargetType::get_string 1573 ns 1573 ns 445077 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2045 ns 2045 ns 342394 +bm_rtl::function__ErasedReturnType::get_string 1591 ns 1591 ns 439944 +bm_rtl::method____ErasedReturnType::get_string 1592 ns 1592 ns 439921 +bm_rtl::method____ErasedTargetType::get_string 1591 ns 1591 ns 439971 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1598 ns 1598 ns 435789 ----------------------------------- -[2025-11-04 12:27:48] >>> Run 3: workload scale = 45 +[2026-01-19 23:11:52] >>> Run 3: workload scale = 45 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 45 iterations ============================================= -2025-11-04T12:27:48+05:30 +2026-01-19T23:11:52+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1751,50 +1751,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.25, 1.21, 1.04 +Load Average: 1.00, 0.99, 0.80 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 861 ns 861 ns 814704 +bm_call::direct__Function::set_string 869 ns 868 ns 803084 -bm_call::via_function_ptr__Function::set_string 857 ns 857 ns 817829 -bm_call::via_function_ptr____Method::set_string 858 ns 858 ns 813922 +bm_call::via_function_ptr__Function::set_string 871 ns 871 ns 804343 +bm_call::via_function_ptr____Method::set_string 871 ns 871 ns 804572 -bm_std::function_calls__Function::set_string 863 ns 863 ns 813055 -bm_std::function_calls____Method::set_string 857 ns 857 ns 812189 +bm_std::function_calls__Function::set_string 870 ns 870 ns 804950 +bm_std::function_calls____Method::set_string 884 ns 884 ns 791010 -bm_rtl::function_calls__Function::set_string 860 ns 860 ns 815403 -bm_rtl::method_calls______Method::set_string 855 ns 855 ns 817960 +bm_rtl::function_calls__Function::set_string 886 ns 886 ns 793192 +bm_rtl::method_calls______Method::set_string 885 ns 885 ns 792897 -bm_rtl::function__ErasedReturnType::set_string 863 ns 863 ns 811827 -bm_rtl::method____ErasedReturnType::set_string 864 ns 864 ns 812329 -bm_rtl::method____ErasedTargetType::set_string 859 ns 859 ns 811367 -bm_rtl::method____ErasedTargetAndReturnType::set_string 872 ns 872 ns 806139 +bm_rtl::function__ErasedReturnType::set_string 879 ns 879 ns 799665 +bm_rtl::method____ErasedReturnType::set_string 868 ns 868 ns 807084 +bm_rtl::method____ErasedTargetType::set_string 876 ns 876 ns 797585 +bm_rtl::method____ErasedTargetAndReturnType::set_string 869 ns 869 ns 806557 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1579 ns 1579 ns 443558 +bm_call::direct__Function::get_string 1652 ns 1652 ns 423648 -bm_call::via_function_ptr__Function::get_string 1567 ns 1566 ns 447638 -bm_call::via_function_ptr____Method::get_string 1561 ns 1561 ns 448644 +bm_call::via_function_ptr__Function::get_string 1652 ns 1652 ns 423806 +bm_call::via_function_ptr____Method::get_string 1668 ns 1667 ns 419958 -bm_std::function_calls__Function::get_string 1578 ns 1578 ns 443746 -bm_std::function_calls____Method::get_string 1579 ns 1579 ns 442695 +bm_std::function_calls__Function::get_string 1649 ns 1649 ns 424602 +bm_std::function_calls____Method::get_string 1649 ns 1649 ns 424942 -bm_rtl::function_calls__Function::get_string 1560 ns 1560 ns 448822 -bm_rtl::method_calls______Method::get_string 1567 ns 1567 ns 447470 +bm_rtl::function_calls__Function::get_string 1661 ns 1661 ns 421345 +bm_rtl::method_calls______Method::get_string 1659 ns 1659 ns 417122 -bm_rtl::function__ErasedReturnType::get_string 2039 ns 2039 ns 343449 -bm_rtl::method____ErasedReturnType::get_string 2043 ns 2043 ns 343320 -bm_rtl::method____ErasedTargetType::get_string 1578 ns 1578 ns 443800 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2048 ns 2048 ns 342248 +bm_rtl::function__ErasedReturnType::get_string 1675 ns 1674 ns 418135 +bm_rtl::method____ErasedReturnType::get_string 1666 ns 1665 ns 421033 +bm_rtl::method____ErasedTargetType::get_string 1669 ns 1668 ns 419528 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1671 ns 1671 ns 419526 ----------------------------------- -[2025-11-04 12:28:06] >>> Run 1: workload scale = 50 +[2026-01-19 23:12:11] >>> Run 1: workload scale = 50 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 50 iterations ============================================= -2025-11-04T12:28:06+05:30 +2026-01-19T23:12:11+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1802,50 +1802,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.26, 1.21, 1.04 +Load Average: 1.00, 0.99, 0.80 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 926 ns 926 ns 751413 +bm_call::direct__Function::set_string 941 ns 941 ns 742656 -bm_call::via_function_ptr__Function::set_string 915 ns 915 ns 767518 -bm_call::via_function_ptr____Method::set_string 919 ns 919 ns 763863 +bm_call::via_function_ptr__Function::set_string 932 ns 932 ns 750908 +bm_call::via_function_ptr____Method::set_string 932 ns 932 ns 751864 -bm_std::function_calls__Function::set_string 937 ns 937 ns 751780 -bm_std::function_calls____Method::set_string 936 ns 936 ns 746176 +bm_std::function_calls__Function::set_string 940 ns 940 ns 744365 +bm_std::function_calls____Method::set_string 944 ns 944 ns 744594 -bm_rtl::function_calls__Function::set_string 920 ns 920 ns 758837 -bm_rtl::method_calls______Method::set_string 917 ns 917 ns 767318 +bm_rtl::function_calls__Function::set_string 931 ns 931 ns 752321 +bm_rtl::method_calls______Method::set_string 931 ns 930 ns 752576 -bm_rtl::function__ErasedReturnType::set_string 933 ns 933 ns 750999 -bm_rtl::method____ErasedReturnType::set_string 929 ns 929 ns 755410 -bm_rtl::method____ErasedTargetType::set_string 928 ns 928 ns 756971 -bm_rtl::method____ErasedTargetAndReturnType::set_string 936 ns 936 ns 747793 +bm_rtl::function__ErasedReturnType::set_string 933 ns 933 ns 751301 +bm_rtl::method____ErasedReturnType::set_string 933 ns 933 ns 749838 +bm_rtl::method____ErasedTargetType::set_string 947 ns 947 ns 743833 +bm_rtl::method____ErasedTargetAndReturnType::set_string 932 ns 932 ns 750030 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1788 ns 1788 ns 391424 +bm_call::direct__Function::get_string 1826 ns 1826 ns 383413 -bm_call::via_function_ptr__Function::get_string 1786 ns 1786 ns 389634 -bm_call::via_function_ptr____Method::get_string 1783 ns 1782 ns 392565 +bm_call::via_function_ptr__Function::get_string 1825 ns 1825 ns 381343 +bm_call::via_function_ptr____Method::get_string 1841 ns 1841 ns 380366 -bm_std::function_calls__Function::get_string 1790 ns 1790 ns 391537 -bm_std::function_calls____Method::get_string 1784 ns 1784 ns 392494 +bm_std::function_calls__Function::get_string 1829 ns 1829 ns 383133 +bm_std::function_calls____Method::get_string 1829 ns 1828 ns 382798 -bm_rtl::function_calls__Function::get_string 1702 ns 1702 ns 412018 -bm_rtl::method_calls______Method::get_string 1698 ns 1698 ns 412199 +bm_rtl::function_calls__Function::get_string 1826 ns 1826 ns 384168 +bm_rtl::method_calls______Method::get_string 1825 ns 1825 ns 383462 -bm_rtl::function__ErasedReturnType::get_string 2253 ns 2253 ns 311171 -bm_rtl::method____ErasedReturnType::get_string 2246 ns 2246 ns 311656 -bm_rtl::method____ErasedTargetType::get_string 1715 ns 1715 ns 408229 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2250 ns 2250 ns 310623 +bm_rtl::function__ErasedReturnType::get_string 1845 ns 1845 ns 380179 +bm_rtl::method____ErasedReturnType::get_string 1844 ns 1844 ns 379553 +bm_rtl::method____ErasedTargetType::get_string 1846 ns 1846 ns 379999 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1844 ns 1844 ns 379675 ----------------------------------- -[2025-11-04 12:28:25] >>> Run 2: workload scale = 50 +[2026-01-19 23:12:30] >>> Run 2: workload scale = 50 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 50 iterations ============================================= -2025-11-04T12:28:25+05:30 +2026-01-19T23:12:30+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1853,50 +1853,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.19, 1.20, 1.04 +Load Average: 1.00, 1.00, 0.81 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 926 ns 926 ns 740549 +bm_call::direct__Function::set_string 933 ns 933 ns 747023 -bm_call::via_function_ptr__Function::set_string 916 ns 916 ns 770299 -bm_call::via_function_ptr____Method::set_string 916 ns 916 ns 762809 +bm_call::via_function_ptr__Function::set_string 926 ns 926 ns 756314 +bm_call::via_function_ptr____Method::set_string 926 ns 926 ns 755547 -bm_std::function_calls__Function::set_string 938 ns 938 ns 745627 -bm_std::function_calls____Method::set_string 935 ns 935 ns 750822 +bm_std::function_calls__Function::set_string 938 ns 938 ns 747825 +bm_std::function_calls____Method::set_string 940 ns 940 ns 745786 -bm_rtl::function_calls__Function::set_string 918 ns 918 ns 763866 -bm_rtl::method_calls______Method::set_string 917 ns 917 ns 765743 +bm_rtl::function_calls__Function::set_string 925 ns 925 ns 756240 +bm_rtl::method_calls______Method::set_string 927 ns 927 ns 756178 -bm_rtl::function__ErasedReturnType::set_string 932 ns 932 ns 751226 -bm_rtl::method____ErasedReturnType::set_string 935 ns 935 ns 746666 -bm_rtl::method____ErasedTargetType::set_string 931 ns 931 ns 751925 -bm_rtl::method____ErasedTargetAndReturnType::set_string 943 ns 943 ns 743274 +bm_rtl::function__ErasedReturnType::set_string 933 ns 933 ns 749774 +bm_rtl::method____ErasedReturnType::set_string 935 ns 935 ns 749882 +bm_rtl::method____ErasedTargetType::set_string 941 ns 941 ns 745341 +bm_rtl::method____ErasedTargetAndReturnType::set_string 937 ns 937 ns 746139 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1704 ns 1704 ns 411061 +bm_call::direct__Function::get_string 1726 ns 1726 ns 405922 -bm_call::via_function_ptr__Function::get_string 1701 ns 1701 ns 411864 -bm_call::via_function_ptr____Method::get_string 1696 ns 1696 ns 412619 +bm_call::via_function_ptr__Function::get_string 1726 ns 1726 ns 405314 +bm_call::via_function_ptr____Method::get_string 1728 ns 1728 ns 405268 -bm_std::function_calls__Function::get_string 1699 ns 1699 ns 411971 -bm_std::function_calls____Method::get_string 1698 ns 1698 ns 412360 +bm_std::function_calls__Function::get_string 1727 ns 1727 ns 405436 +bm_std::function_calls____Method::get_string 1735 ns 1735 ns 403964 -bm_rtl::function_calls__Function::get_string 1695 ns 1694 ns 413307 -bm_rtl::method_calls______Method::get_string 1694 ns 1694 ns 413337 +bm_rtl::function_calls__Function::get_string 1723 ns 1722 ns 406561 +bm_rtl::method_calls______Method::get_string 1727 ns 1726 ns 405472 -bm_rtl::function__ErasedReturnType::get_string 2245 ns 2245 ns 311139 -bm_rtl::method____ErasedReturnType::get_string 2240 ns 2240 ns 312685 -bm_rtl::method____ErasedTargetType::get_string 1709 ns 1709 ns 409763 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2243 ns 2243 ns 311738 +bm_rtl::function__ErasedReturnType::get_string 1756 ns 1756 ns 396426 +bm_rtl::method____ErasedReturnType::get_string 1757 ns 1756 ns 398483 +bm_rtl::method____ErasedTargetType::get_string 1756 ns 1756 ns 399103 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1759 ns 1758 ns 397872 ----------------------------------- -[2025-11-04 12:28:44] >>> Run 3: workload scale = 50 +[2026-01-19 23:12:48] >>> Run 3: workload scale = 50 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 50 iterations ============================================= -2025-11-04T12:28:44+05:30 +2026-01-19T23:12:48+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -1904,611 +1904,611 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.14, 1.19, 1.04 +Load Average: 1.00, 1.00, 0.81 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 917 ns 917 ns 757756 +bm_call::direct__Function::set_string 943 ns 943 ns 743159 -bm_call::via_function_ptr__Function::set_string 906 ns 906 ns 777002 -bm_call::via_function_ptr____Method::set_string 908 ns 907 ns 772247 +bm_call::via_function_ptr__Function::set_string 929 ns 929 ns 756283 +bm_call::via_function_ptr____Method::set_string 934 ns 934 ns 755878 -bm_std::function_calls__Function::set_string 931 ns 931 ns 745509 -bm_std::function_calls____Method::set_string 928 ns 928 ns 754015 +bm_std::function_calls__Function::set_string 949 ns 949 ns 738684 +bm_std::function_calls____Method::set_string 950 ns 950 ns 735773 -bm_rtl::function_calls__Function::set_string 916 ns 916 ns 766789 -bm_rtl::method_calls______Method::set_string 909 ns 909 ns 770952 +bm_rtl::function_calls__Function::set_string 936 ns 936 ns 749057 +bm_rtl::method_calls______Method::set_string 931 ns 931 ns 749496 -bm_rtl::function__ErasedReturnType::set_string 931 ns 931 ns 751400 -bm_rtl::method____ErasedReturnType::set_string 927 ns 927 ns 746782 -bm_rtl::method____ErasedTargetType::set_string 925 ns 925 ns 757055 -bm_rtl::method____ErasedTargetAndReturnType::set_string 930 ns 930 ns 753039 +bm_rtl::function__ErasedReturnType::set_string 931 ns 931 ns 751200 +bm_rtl::method____ErasedReturnType::set_string 942 ns 942 ns 750312 +bm_rtl::method____ErasedTargetType::set_string 946 ns 946 ns 734994 +bm_rtl::method____ErasedTargetAndReturnType::set_string 949 ns 949 ns 738347 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 1705 ns 1705 ns 410944 +bm_call::direct__Function::get_string 1729 ns 1729 ns 404989 -bm_call::via_function_ptr__Function::get_string 1705 ns 1705 ns 411331 -bm_call::via_function_ptr____Method::get_string 1699 ns 1698 ns 412291 +bm_call::via_function_ptr__Function::get_string 1731 ns 1731 ns 404924 +bm_call::via_function_ptr____Method::get_string 1731 ns 1730 ns 404859 -bm_std::function_calls__Function::get_string 1701 ns 1701 ns 411580 -bm_std::function_calls____Method::get_string 1695 ns 1694 ns 410757 +bm_std::function_calls__Function::get_string 1738 ns 1738 ns 404856 +bm_std::function_calls____Method::get_string 1744 ns 1744 ns 403238 -bm_rtl::function_calls__Function::get_string 1697 ns 1697 ns 412312 -bm_rtl::method_calls______Method::get_string 1699 ns 1699 ns 412540 +bm_rtl::function_calls__Function::get_string 1729 ns 1729 ns 405316 +bm_rtl::method_calls______Method::get_string 1728 ns 1727 ns 405900 -bm_rtl::function__ErasedReturnType::get_string 2241 ns 2241 ns 312288 -bm_rtl::method____ErasedReturnType::get_string 2246 ns 2246 ns 312211 -bm_rtl::method____ErasedTargetType::get_string 1710 ns 1709 ns 409508 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2248 ns 2248 ns 311951 +bm_rtl::function__ErasedReturnType::get_string 1740 ns 1740 ns 401698 +bm_rtl::method____ErasedReturnType::get_string 1744 ns 1744 ns 402000 +bm_rtl::method____ErasedTargetType::get_string 1743 ns 1743 ns 401434 +bm_rtl::method____ErasedTargetAndReturnType::get_string 1743 ns 1743 ns 401534 ----------------------------------- -[2025-11-04 12:29:03] >>> Run 1: workload scale = 58 +[2026-01-19 23:13:07] >>> Run 1: workload scale = 58 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 58 iterations ============================================= -2025-11-04T12:29:03+05:30 +2026-01-19T23:13:07+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 1208.8 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.10, 1.18, 1.04 +Load Average: 1.00, 1.00, 0.82 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1031 ns 1031 ns 675248 +bm_call::direct__Function::set_string 1036 ns 1036 ns 673890 -bm_call::via_function_ptr__Function::set_string 1026 ns 1026 ns 682545 -bm_call::via_function_ptr____Method::set_string 1027 ns 1027 ns 684770 +bm_call::via_function_ptr__Function::set_string 1034 ns 1034 ns 677703 +bm_call::via_function_ptr____Method::set_string 1035 ns 1035 ns 677912 -bm_std::function_calls__Function::set_string 1034 ns 1034 ns 676829 -bm_std::function_calls____Method::set_string 1035 ns 1035 ns 675698 +bm_std::function_calls__Function::set_string 1038 ns 1038 ns 673043 +bm_std::function_calls____Method::set_string 1049 ns 1049 ns 670179 -bm_rtl::function_calls__Function::set_string 1027 ns 1027 ns 682713 -bm_rtl::method_calls______Method::set_string 1043 ns 1043 ns 670770 +bm_rtl::function_calls__Function::set_string 1043 ns 1043 ns 671982 +bm_rtl::method_calls______Method::set_string 1044 ns 1044 ns 669684 -bm_rtl::function__ErasedReturnType::set_string 1033 ns 1033 ns 678708 -bm_rtl::method____ErasedReturnType::set_string 1030 ns 1030 ns 679008 -bm_rtl::method____ErasedTargetType::set_string 1030 ns 1030 ns 681699 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1032 ns 1031 ns 680008 +bm_rtl::function__ErasedReturnType::set_string 1052 ns 1052 ns 665822 +bm_rtl::method____ErasedReturnType::set_string 1052 ns 1052 ns 665002 +bm_rtl::method____ErasedTargetType::set_string 1054 ns 1054 ns 665921 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1051 ns 1050 ns 666979 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2019 ns 2019 ns 347188 +bm_call::direct__Function::get_string 2135 ns 2134 ns 328156 -bm_call::via_function_ptr__Function::get_string 2013 ns 2013 ns 347842 -bm_call::via_function_ptr____Method::get_string 2010 ns 2010 ns 348147 +bm_call::via_function_ptr__Function::get_string 2135 ns 2135 ns 326430 +bm_call::via_function_ptr____Method::get_string 2138 ns 2137 ns 327594 -bm_std::function_calls__Function::get_string 2017 ns 2017 ns 345495 -bm_std::function_calls____Method::get_string 2013 ns 2013 ns 347790 +bm_std::function_calls__Function::get_string 2134 ns 2134 ns 328582 +bm_std::function_calls____Method::get_string 2130 ns 2130 ns 328683 -bm_rtl::function_calls__Function::get_string 2012 ns 2012 ns 348405 -bm_rtl::method_calls______Method::get_string 2004 ns 2004 ns 349276 +bm_rtl::function_calls__Function::get_string 2137 ns 2137 ns 328106 +bm_rtl::method_calls______Method::get_string 2136 ns 2136 ns 327721 -bm_rtl::function__ErasedReturnType::get_string 2618 ns 2618 ns 267985 -bm_rtl::method____ErasedReturnType::get_string 2615 ns 2615 ns 267741 -bm_rtl::method____ErasedTargetType::get_string 2027 ns 2027 ns 345609 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2617 ns 2617 ns 266663 +bm_rtl::function__ErasedReturnType::get_string 2174 ns 2174 ns 322539 +bm_rtl::method____ErasedReturnType::get_string 2155 ns 2155 ns 324740 +bm_rtl::method____ErasedTargetType::get_string 2169 ns 2169 ns 322686 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2156 ns 2156 ns 324664 ----------------------------------- -[2025-11-04 12:29:22] >>> Run 2: workload scale = 58 +[2026-01-19 23:13:26] >>> Run 2: workload scale = 58 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 58 iterations ============================================= -2025-11-04T12:29:22+05:30 +2026-01-19T23:13:26+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 973.131 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.07, 1.16, 1.04 +Load Average: 1.00, 1.00, 0.82 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1028 ns 1028 ns 677855 +bm_call::direct__Function::set_string 1035 ns 1034 ns 674626 -bm_call::via_function_ptr__Function::set_string 1030 ns 1030 ns 679335 -bm_call::via_function_ptr____Method::set_string 1030 ns 1030 ns 680947 +bm_call::via_function_ptr__Function::set_string 1043 ns 1043 ns 669988 +bm_call::via_function_ptr____Method::set_string 1043 ns 1043 ns 672110 -bm_std::function_calls__Function::set_string 1027 ns 1027 ns 684721 -bm_std::function_calls____Method::set_string 1026 ns 1026 ns 681824 +bm_std::function_calls__Function::set_string 1037 ns 1037 ns 677404 +bm_std::function_calls____Method::set_string 1034 ns 1034 ns 679051 -bm_rtl::function_calls__Function::set_string 1029 ns 1029 ns 678759 -bm_rtl::method_calls______Method::set_string 1029 ns 1029 ns 681165 +bm_rtl::function_calls__Function::set_string 1042 ns 1042 ns 671296 +bm_rtl::method_calls______Method::set_string 1041 ns 1041 ns 672638 -bm_rtl::function__ErasedReturnType::set_string 1034 ns 1034 ns 677875 -bm_rtl::method____ErasedReturnType::set_string 1035 ns 1035 ns 676821 -bm_rtl::method____ErasedTargetType::set_string 1030 ns 1030 ns 680401 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1033 ns 1033 ns 678651 +bm_rtl::function__ErasedReturnType::set_string 1046 ns 1046 ns 669870 +bm_rtl::method____ErasedReturnType::set_string 1045 ns 1045 ns 669132 +bm_rtl::method____ErasedTargetType::set_string 1056 ns 1056 ns 663154 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1044 ns 1044 ns 669553 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2008 ns 2007 ns 348680 +bm_call::direct__Function::get_string 2044 ns 2044 ns 342513 -bm_call::via_function_ptr__Function::get_string 2012 ns 2012 ns 348322 -bm_call::via_function_ptr____Method::get_string 2007 ns 2007 ns 348814 +bm_call::via_function_ptr__Function::get_string 2042 ns 2042 ns 342924 +bm_call::via_function_ptr____Method::get_string 2046 ns 2045 ns 341909 -bm_std::function_calls__Function::get_string 2004 ns 2004 ns 349186 -bm_std::function_calls____Method::get_string 2002 ns 2002 ns 348243 +bm_std::function_calls__Function::get_string 2048 ns 2047 ns 341946 +bm_std::function_calls____Method::get_string 2050 ns 2050 ns 341378 -bm_rtl::function_calls__Function::get_string 2007 ns 2007 ns 348882 -bm_rtl::method_calls______Method::get_string 2004 ns 2004 ns 349758 +bm_rtl::function_calls__Function::get_string 2042 ns 2042 ns 342913 +bm_rtl::method_calls______Method::get_string 2044 ns 2044 ns 342229 -bm_rtl::function__ErasedReturnType::get_string 2604 ns 2604 ns 268928 -bm_rtl::method____ErasedReturnType::get_string 2612 ns 2612 ns 268364 -bm_rtl::method____ErasedTargetType::get_string 2016 ns 2016 ns 347257 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2614 ns 2614 ns 268179 +bm_rtl::function__ErasedReturnType::get_string 2072 ns 2072 ns 337809 +bm_rtl::method____ErasedReturnType::get_string 2073 ns 2073 ns 338112 +bm_rtl::method____ErasedTargetType::get_string 2070 ns 2070 ns 338166 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2074 ns 2074 ns 337414 ----------------------------------- -[2025-11-04 12:29:41] >>> Run 3: workload scale = 58 +[2026-01-19 23:13:46] >>> Run 3: workload scale = 58 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 58 iterations ============================================= -2025-11-04T12:29:41+05:30 +2026-01-19T23:13:46+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2968.51 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.05, 1.15, 1.04 +Load Average: 1.00, 1.00, 0.83 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1040 ns 1040 ns 671097 +bm_call::direct__Function::set_string 1044 ns 1044 ns 670022 -bm_call::via_function_ptr__Function::set_string 1033 ns 1033 ns 676942 -bm_call::via_function_ptr____Method::set_string 1030 ns 1030 ns 678677 +bm_call::via_function_ptr__Function::set_string 1052 ns 1052 ns 665303 +bm_call::via_function_ptr____Method::set_string 1053 ns 1053 ns 664751 -bm_std::function_calls__Function::set_string 1038 ns 1038 ns 674691 -bm_std::function_calls____Method::set_string 1037 ns 1037 ns 675090 +bm_std::function_calls__Function::set_string 1035 ns 1035 ns 677148 +bm_std::function_calls____Method::set_string 1035 ns 1035 ns 676481 -bm_rtl::function_calls__Function::set_string 1026 ns 1026 ns 678381 -bm_rtl::method_calls______Method::set_string 1032 ns 1032 ns 679923 +bm_rtl::function_calls__Function::set_string 1044 ns 1044 ns 670259 +bm_rtl::method_calls______Method::set_string 1045 ns 1045 ns 669178 -bm_rtl::function__ErasedReturnType::set_string 1033 ns 1033 ns 675492 -bm_rtl::method____ErasedReturnType::set_string 1037 ns 1037 ns 674332 -bm_rtl::method____ErasedTargetType::set_string 1033 ns 1033 ns 680263 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1035 ns 1035 ns 675409 +bm_rtl::function__ErasedReturnType::set_string 1045 ns 1045 ns 671882 +bm_rtl::method____ErasedReturnType::set_string 1050 ns 1050 ns 666690 +bm_rtl::method____ErasedTargetType::set_string 1050 ns 1050 ns 666725 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1052 ns 1052 ns 664907 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2011 ns 2011 ns 348434 +bm_call::direct__Function::get_string 2120 ns 2120 ns 330220 -bm_call::via_function_ptr__Function::get_string 2005 ns 2005 ns 349051 -bm_call::via_function_ptr____Method::get_string 2007 ns 2006 ns 349321 +bm_call::via_function_ptr__Function::get_string 2121 ns 2121 ns 330103 +bm_call::via_function_ptr____Method::get_string 2122 ns 2122 ns 329772 -bm_std::function_calls__Function::get_string 2007 ns 2007 ns 348916 -bm_std::function_calls____Method::get_string 2012 ns 2012 ns 348275 +bm_std::function_calls__Function::get_string 2121 ns 2121 ns 329881 +bm_std::function_calls____Method::get_string 2131 ns 2131 ns 328635 -bm_rtl::function_calls__Function::get_string 2002 ns 2002 ns 349353 -bm_rtl::method_calls______Method::get_string 1998 ns 1998 ns 350484 +bm_rtl::function_calls__Function::get_string 2120 ns 2120 ns 330342 +bm_rtl::method_calls______Method::get_string 2121 ns 2121 ns 329984 -bm_rtl::function__ErasedReturnType::get_string 2604 ns 2604 ns 267612 -bm_rtl::method____ErasedReturnType::get_string 2604 ns 2604 ns 268910 -bm_rtl::method____ErasedTargetType::get_string 2018 ns 2018 ns 345292 -bm_rtl::method____ErasedTargetAndReturnType::get_string 2607 ns 2607 ns 268415 +bm_rtl::function__ErasedReturnType::get_string 2148 ns 2147 ns 326030 +bm_rtl::method____ErasedReturnType::get_string 2138 ns 2138 ns 327419 +bm_rtl::method____ErasedTargetType::get_string 2140 ns 2140 ns 327116 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2143 ns 2143 ns 326651 ----------------------------------- -[2025-11-04 12:30:00] >>> Run 1: workload scale = 66 +[2026-01-19 23:14:05] >>> Run 1: workload scale = 66 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 66 iterations ============================================= -2025-11-04T12:30:00+05:30 +2026-01-19T23:14:05+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 2220.56 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.14, 1.03 +Load Average: 1.00, 1.00, 0.83 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1634 ns 1633 ns 428902 +bm_call::direct__Function::set_string 1644 ns 1644 ns 425244 -bm_call::via_function_ptr__Function::set_string 1630 ns 1629 ns 429772 -bm_call::via_function_ptr____Method::set_string 1631 ns 1631 ns 430681 +bm_call::via_function_ptr__Function::set_string 1646 ns 1645 ns 425948 +bm_call::via_function_ptr____Method::set_string 1644 ns 1644 ns 425773 -bm_std::function_calls__Function::set_string 1631 ns 1631 ns 428808 -bm_std::function_calls____Method::set_string 1635 ns 1635 ns 428582 +bm_std::function_calls__Function::set_string 1643 ns 1643 ns 425435 +bm_std::function_calls____Method::set_string 1645 ns 1644 ns 425697 -bm_rtl::function_calls__Function::set_string 1630 ns 1630 ns 429178 -bm_rtl::method_calls______Method::set_string 1633 ns 1632 ns 428391 +bm_rtl::function_calls__Function::set_string 1646 ns 1646 ns 425217 +bm_rtl::method_calls______Method::set_string 1646 ns 1645 ns 424786 -bm_rtl::function__ErasedReturnType::set_string 1636 ns 1636 ns 424931 -bm_rtl::method____ErasedReturnType::set_string 1639 ns 1639 ns 426912 -bm_rtl::method____ErasedTargetType::set_string 1637 ns 1637 ns 427969 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1637 ns 1637 ns 427833 +bm_rtl::function__ErasedReturnType::set_string 1650 ns 1650 ns 424522 +bm_rtl::method____ErasedReturnType::set_string 1649 ns 1648 ns 424894 +bm_rtl::method____ErasedTargetType::set_string 1656 ns 1656 ns 422916 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1647 ns 1647 ns 425320 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2782 ns 2782 ns 251867 +bm_call::direct__Function::get_string 2773 ns 2773 ns 252410 -bm_call::via_function_ptr__Function::get_string 2777 ns 2777 ns 252122 -bm_call::via_function_ptr____Method::get_string 2783 ns 2783 ns 251687 +bm_call::via_function_ptr__Function::get_string 2773 ns 2773 ns 251796 +bm_call::via_function_ptr____Method::get_string 2777 ns 2777 ns 252131 -bm_std::function_calls__Function::get_string 2790 ns 2790 ns 250927 -bm_std::function_calls____Method::get_string 2781 ns 2781 ns 252071 +bm_std::function_calls__Function::get_string 2772 ns 2772 ns 252502 +bm_std::function_calls____Method::get_string 2772 ns 2771 ns 252584 -bm_rtl::function_calls__Function::get_string 2783 ns 2782 ns 251500 -bm_rtl::method_calls______Method::get_string 2781 ns 2781 ns 252113 +bm_rtl::function_calls__Function::get_string 2773 ns 2773 ns 252563 +bm_rtl::method_calls______Method::get_string 2774 ns 2773 ns 252472 -bm_rtl::function__ErasedReturnType::get_string 3385 ns 3384 ns 206887 -bm_rtl::method____ErasedReturnType::get_string 3389 ns 3389 ns 206881 -bm_rtl::method____ErasedTargetType::get_string 2796 ns 2796 ns 250294 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3391 ns 3391 ns 206588 +bm_rtl::function__ErasedReturnType::get_string 2792 ns 2791 ns 250676 +bm_rtl::method____ErasedReturnType::get_string 2792 ns 2791 ns 250735 +bm_rtl::method____ErasedTargetType::get_string 2785 ns 2785 ns 251378 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2794 ns 2794 ns 250478 ----------------------------------- -[2025-11-04 12:30:22] >>> Run 2: workload scale = 66 +[2026-01-19 23:14:26] >>> Run 2: workload scale = 66 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 66 iterations ============================================= -2025-11-04T12:30:22+05:30 +2026-01-19T23:14:26+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3530.37 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 1.13, 1.03 +Load Average: 1.00, 1.00, 0.83 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1622 ns 1622 ns 430852 +bm_call::direct__Function::set_string 1668 ns 1667 ns 419315 -bm_call::via_function_ptr__Function::set_string 1623 ns 1623 ns 431449 -bm_call::via_function_ptr____Method::set_string 1621 ns 1621 ns 431436 +bm_call::via_function_ptr__Function::set_string 1664 ns 1664 ns 420753 +bm_call::via_function_ptr____Method::set_string 1664 ns 1664 ns 420532 -bm_std::function_calls__Function::set_string 1625 ns 1625 ns 430362 -bm_std::function_calls____Method::set_string 1625 ns 1625 ns 431010 +bm_std::function_calls__Function::set_string 1680 ns 1680 ns 416510 +bm_std::function_calls____Method::set_string 1680 ns 1680 ns 416744 -bm_rtl::function_calls__Function::set_string 1624 ns 1624 ns 430846 -bm_rtl::method_calls______Method::set_string 1624 ns 1624 ns 431257 +bm_rtl::function_calls__Function::set_string 1688 ns 1687 ns 415205 +bm_rtl::method_calls______Method::set_string 1687 ns 1687 ns 414846 -bm_rtl::function__ErasedReturnType::set_string 1630 ns 1630 ns 428687 -bm_rtl::method____ErasedReturnType::set_string 1629 ns 1629 ns 429973 -bm_rtl::method____ErasedTargetType::set_string 1626 ns 1625 ns 430676 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1629 ns 1629 ns 430277 +bm_rtl::function__ErasedReturnType::set_string 1664 ns 1664 ns 420397 +bm_rtl::method____ErasedReturnType::set_string 1668 ns 1668 ns 419490 +bm_rtl::method____ErasedTargetType::set_string 1664 ns 1664 ns 420688 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1676 ns 1676 ns 417822 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2765 ns 2765 ns 253039 +bm_call::direct__Function::get_string 2882 ns 2882 ns 242896 -bm_call::via_function_ptr__Function::get_string 2763 ns 2763 ns 253401 -bm_call::via_function_ptr____Method::get_string 2763 ns 2763 ns 253536 +bm_call::via_function_ptr__Function::get_string 2884 ns 2883 ns 242700 +bm_call::via_function_ptr____Method::get_string 2880 ns 2879 ns 243154 -bm_std::function_calls__Function::get_string 2765 ns 2765 ns 253255 -bm_std::function_calls____Method::get_string 2761 ns 2761 ns 253706 +bm_std::function_calls__Function::get_string 2874 ns 2873 ns 243477 +bm_std::function_calls____Method::get_string 2857 ns 2856 ns 244960 -bm_rtl::function_calls__Function::get_string 2763 ns 2763 ns 253459 -bm_rtl::method_calls______Method::get_string 2758 ns 2758 ns 253800 +bm_rtl::function_calls__Function::get_string 2877 ns 2876 ns 243281 +bm_rtl::method_calls______Method::get_string 2877 ns 2877 ns 243243 -bm_rtl::function__ErasedReturnType::get_string 3375 ns 3375 ns 207380 -bm_rtl::method____ErasedReturnType::get_string 3368 ns 3368 ns 207775 -bm_rtl::method____ErasedTargetType::get_string 2782 ns 2782 ns 251728 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3368 ns 3368 ns 207848 +bm_rtl::function__ErasedReturnType::get_string 2876 ns 2876 ns 243445 +bm_rtl::method____ErasedReturnType::get_string 2862 ns 2862 ns 244590 +bm_rtl::method____ErasedTargetType::get_string 2855 ns 2855 ns 245189 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2858 ns 2858 ns 244872 ----------------------------------- -[2025-11-04 12:30:42] >>> Run 3: workload scale = 66 +[2026-01-19 23:14:47] >>> Run 3: workload scale = 66 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 66 iterations ============================================= -2025-11-04T12:30:42+05:30 +2026-01-19T23:14:47+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3341.01 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 1.12, 1.03 +Load Average: 1.00, 1.00, 0.84 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1625 ns 1625 ns 430251 +bm_call::direct__Function::set_string 1664 ns 1664 ns 419877 -bm_call::via_function_ptr__Function::set_string 1626 ns 1626 ns 431687 -bm_call::via_function_ptr____Method::set_string 1626 ns 1625 ns 430629 +bm_call::via_function_ptr__Function::set_string 1661 ns 1661 ns 421577 +bm_call::via_function_ptr____Method::set_string 1659 ns 1659 ns 420994 -bm_std::function_calls__Function::set_string 1626 ns 1626 ns 430290 -bm_std::function_calls____Method::set_string 1629 ns 1629 ns 429636 +bm_std::function_calls__Function::set_string 1655 ns 1655 ns 422552 +bm_std::function_calls____Method::set_string 1657 ns 1656 ns 423207 -bm_rtl::function_calls__Function::set_string 1626 ns 1626 ns 430275 -bm_rtl::method_calls______Method::set_string 1627 ns 1627 ns 429935 +bm_rtl::function_calls__Function::set_string 1655 ns 1655 ns 422801 +bm_rtl::method_calls______Method::set_string 1656 ns 1655 ns 422724 -bm_rtl::function__ErasedReturnType::set_string 1640 ns 1640 ns 426127 -bm_rtl::method____ErasedReturnType::set_string 1643 ns 1643 ns 426224 -bm_rtl::method____ErasedTargetType::set_string 1640 ns 1640 ns 427764 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1643 ns 1643 ns 426215 +bm_rtl::function__ErasedReturnType::set_string 1656 ns 1656 ns 422506 +bm_rtl::method____ErasedReturnType::set_string 1655 ns 1655 ns 423293 +bm_rtl::method____ErasedTargetType::set_string 1660 ns 1659 ns 421827 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1664 ns 1664 ns 420188 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 2773 ns 2773 ns 252463 +bm_call::direct__Function::get_string 2781 ns 2781 ns 251706 -bm_call::via_function_ptr__Function::get_string 2767 ns 2767 ns 252937 -bm_call::via_function_ptr____Method::get_string 2768 ns 2768 ns 252976 +bm_call::via_function_ptr__Function::get_string 2782 ns 2782 ns 251750 +bm_call::via_function_ptr____Method::get_string 2785 ns 2785 ns 251488 -bm_std::function_calls__Function::get_string 2772 ns 2772 ns 252487 -bm_std::function_calls____Method::get_string 2770 ns 2770 ns 252793 +bm_std::function_calls__Function::get_string 2782 ns 2782 ns 251453 +bm_std::function_calls____Method::get_string 2788 ns 2788 ns 250872 -bm_rtl::function_calls__Function::get_string 2767 ns 2767 ns 253164 -bm_rtl::method_calls______Method::get_string 2770 ns 2770 ns 252709 +bm_rtl::function_calls__Function::get_string 2780 ns 2780 ns 251731 +bm_rtl::method_calls______Method::get_string 2784 ns 2784 ns 251526 -bm_rtl::function__ErasedReturnType::get_string 3376 ns 3375 ns 207460 -bm_rtl::method____ErasedReturnType::get_string 3382 ns 3382 ns 207067 -bm_rtl::method____ErasedTargetType::get_string 2803 ns 2802 ns 249785 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3384 ns 3384 ns 207041 +bm_rtl::function__ErasedReturnType::get_string 2790 ns 2790 ns 250718 +bm_rtl::method____ErasedReturnType::get_string 2795 ns 2795 ns 250540 +bm_rtl::method____ErasedTargetType::get_string 2788 ns 2787 ns 251050 +bm_rtl::method____ErasedTargetAndReturnType::get_string 2793 ns 2793 ns 250457 ----------------------------------- -[2025-11-04 12:31:03] >>> Run 1: workload scale = 74 +[2026-01-19 23:15:07] >>> Run 1: workload scale = 74 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 74 iterations ============================================= -2025-11-04T12:31:03+05:30 +2026-01-19T23:15:07+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 4041.98 MHz CPU s) +Run on (16 X 2068.8 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 1.11, 1.03 +Load Average: 1.00, 1.00, 0.84 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1716 ns 1715 ns 408274 +bm_call::direct__Function::set_string 1728 ns 1728 ns 403699 -bm_call::via_function_ptr__Function::set_string 1712 ns 1712 ns 409361 -bm_call::via_function_ptr____Method::set_string 1713 ns 1713 ns 405493 +bm_call::via_function_ptr__Function::set_string 1728 ns 1728 ns 405095 +bm_call::via_function_ptr____Method::set_string 1730 ns 1730 ns 404936 -bm_std::function_calls__Function::set_string 1718 ns 1717 ns 407832 -bm_std::function_calls____Method::set_string 1715 ns 1715 ns 408119 +bm_std::function_calls__Function::set_string 1717 ns 1717 ns 407293 +bm_std::function_calls____Method::set_string 1719 ns 1719 ns 407683 -bm_rtl::function_calls__Function::set_string 1713 ns 1713 ns 408560 -bm_rtl::method_calls______Method::set_string 1709 ns 1709 ns 409044 +bm_rtl::function_calls__Function::set_string 1715 ns 1715 ns 408399 +bm_rtl::method_calls______Method::set_string 1716 ns 1716 ns 408228 -bm_rtl::function__ErasedReturnType::set_string 1711 ns 1710 ns 408836 -bm_rtl::method____ErasedReturnType::set_string 1713 ns 1713 ns 408499 -bm_rtl::method____ErasedTargetType::set_string 1707 ns 1707 ns 409755 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1708 ns 1708 ns 409164 +bm_rtl::function__ErasedReturnType::set_string 1728 ns 1727 ns 405282 +bm_rtl::method____ErasedReturnType::set_string 1732 ns 1732 ns 404288 +bm_rtl::method____ErasedTargetType::set_string 1728 ns 1728 ns 405001 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1744 ns 1744 ns 401021 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3084 ns 3084 ns 226877 +bm_call::direct__Function::get_string 3057 ns 3057 ns 229029 -bm_call::via_function_ptr__Function::get_string 3082 ns 3082 ns 227143 -bm_call::via_function_ptr____Method::get_string 3083 ns 3083 ns 227251 +bm_call::via_function_ptr__Function::get_string 3059 ns 3059 ns 228889 +bm_call::via_function_ptr____Method::get_string 3059 ns 3059 ns 228980 -bm_std::function_calls__Function::get_string 3085 ns 3085 ns 226897 -bm_std::function_calls____Method::get_string 3086 ns 3085 ns 226916 +bm_std::function_calls__Function::get_string 3064 ns 3064 ns 228677 +bm_std::function_calls____Method::get_string 3067 ns 3066 ns 228268 -bm_rtl::function_calls__Function::get_string 3085 ns 3085 ns 226921 -bm_rtl::method_calls______Method::get_string 3073 ns 3073 ns 227717 +bm_rtl::function_calls__Function::get_string 3058 ns 3057 ns 228868 +bm_rtl::method_calls______Method::get_string 3058 ns 3058 ns 228956 -bm_rtl::function__ErasedReturnType::get_string 3715 ns 3715 ns 188463 -bm_rtl::method____ErasedReturnType::get_string 3719 ns 3719 ns 188241 -bm_rtl::method____ErasedTargetType::get_string 3088 ns 3088 ns 226725 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3718 ns 3718 ns 188254 +bm_rtl::function__ErasedReturnType::get_string 3100 ns 3100 ns 226068 +bm_rtl::method____ErasedReturnType::get_string 3089 ns 3088 ns 226605 +bm_rtl::method____ErasedTargetType::get_string 3092 ns 3092 ns 226468 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3091 ns 3090 ns 226632 ----------------------------------- -[2025-11-04 12:31:25] >>> Run 2: workload scale = 74 +[2026-01-19 23:15:29] >>> Run 2: workload scale = 74 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 74 iterations ============================================= -2025-11-04T12:31:25+05:30 +2026-01-19T23:15:29+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 2971.96 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 1.11, 1.03 +Load Average: 1.00, 1.00, 0.85 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1704 ns 1704 ns 411933 +bm_call::direct__Function::set_string 1717 ns 1717 ns 407373 -bm_call::via_function_ptr__Function::set_string 1699 ns 1699 ns 412511 -bm_call::via_function_ptr____Method::set_string 1702 ns 1702 ns 411047 +bm_call::via_function_ptr__Function::set_string 1717 ns 1717 ns 407868 +bm_call::via_function_ptr____Method::set_string 1716 ns 1716 ns 407960 -bm_std::function_calls__Function::set_string 1702 ns 1702 ns 411998 -bm_std::function_calls____Method::set_string 1702 ns 1702 ns 411072 +bm_std::function_calls__Function::set_string 1728 ns 1728 ns 405438 +bm_std::function_calls____Method::set_string 1719 ns 1719 ns 407465 -bm_rtl::function_calls__Function::set_string 1698 ns 1698 ns 409485 -bm_rtl::method_calls______Method::set_string 1702 ns 1702 ns 411717 +bm_rtl::function_calls__Function::set_string 1717 ns 1717 ns 407801 +bm_rtl::method_calls______Method::set_string 1718 ns 1717 ns 407906 -bm_rtl::function__ErasedReturnType::set_string 1705 ns 1705 ns 409692 -bm_rtl::method____ErasedReturnType::set_string 1708 ns 1708 ns 408834 -bm_rtl::method____ErasedTargetType::set_string 1709 ns 1709 ns 410268 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1708 ns 1708 ns 409422 +bm_rtl::function__ErasedReturnType::set_string 1727 ns 1727 ns 405269 +bm_rtl::method____ErasedReturnType::set_string 1732 ns 1732 ns 403650 +bm_rtl::method____ErasedTargetType::set_string 1724 ns 1724 ns 406393 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1724 ns 1724 ns 405598 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3072 ns 3072 ns 228015 +bm_call::direct__Function::get_string 3054 ns 3054 ns 229183 -bm_call::via_function_ptr__Function::get_string 3069 ns 3068 ns 228059 -bm_call::via_function_ptr____Method::get_string 3074 ns 3074 ns 227965 +bm_call::via_function_ptr__Function::get_string 3059 ns 3058 ns 228889 +bm_call::via_function_ptr____Method::get_string 3057 ns 3057 ns 229051 -bm_std::function_calls__Function::get_string 3066 ns 3066 ns 228246 -bm_std::function_calls____Method::get_string 3070 ns 3070 ns 228340 +bm_std::function_calls__Function::get_string 3064 ns 3064 ns 228533 +bm_std::function_calls____Method::get_string 3057 ns 3057 ns 229042 -bm_rtl::function_calls__Function::get_string 3066 ns 3066 ns 228209 -bm_rtl::method_calls______Method::get_string 3073 ns 3073 ns 228131 +bm_rtl::function_calls__Function::get_string 3058 ns 3058 ns 229069 +bm_rtl::method_calls______Method::get_string 3058 ns 3058 ns 228955 -bm_rtl::function__ErasedReturnType::get_string 3716 ns 3715 ns 188572 -bm_rtl::method____ErasedReturnType::get_string 3720 ns 3720 ns 188419 -bm_rtl::method____ErasedTargetType::get_string 3085 ns 3085 ns 226900 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3717 ns 3717 ns 187844 +bm_rtl::function__ErasedReturnType::get_string 3090 ns 3090 ns 226512 +bm_rtl::method____ErasedReturnType::get_string 3100 ns 3099 ns 225959 +bm_rtl::method____ErasedTargetType::get_string 3090 ns 3090 ns 226608 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3113 ns 3113 ns 225676 ----------------------------------- -[2025-11-04 12:31:46] >>> Run 3: workload scale = 74 +[2026-01-19 23:15:50] >>> Run 3: workload scale = 74 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 74 iterations ============================================= -2025-11-04T12:31:46+05:30 +2026-01-19T23:15:50+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 1641.19 MHz CPU s) +Run on (16 X 1226.86 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 1.10, 1.02 +Load Average: 1.00, 1.00, 0.85 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1708 ns 1708 ns 409543 +bm_call::direct__Function::set_string 1747 ns 1747 ns 394391 -bm_call::via_function_ptr__Function::set_string 1707 ns 1707 ns 411072 -bm_call::via_function_ptr____Method::set_string 1705 ns 1704 ns 409726 +bm_call::via_function_ptr__Function::set_string 1736 ns 1735 ns 403290 +bm_call::via_function_ptr____Method::set_string 1732 ns 1732 ns 404263 -bm_std::function_calls__Function::set_string 1710 ns 1710 ns 409640 -bm_std::function_calls____Method::set_string 1706 ns 1706 ns 410029 +bm_std::function_calls__Function::set_string 1732 ns 1732 ns 404399 +bm_std::function_calls____Method::set_string 1742 ns 1742 ns 401864 -bm_rtl::function_calls__Function::set_string 1707 ns 1707 ns 409382 -bm_rtl::method_calls______Method::set_string 1704 ns 1704 ns 410793 +bm_rtl::function_calls__Function::set_string 1740 ns 1739 ns 402145 +bm_rtl::method_calls______Method::set_string 1741 ns 1741 ns 401844 -bm_rtl::function__ErasedReturnType::set_string 1712 ns 1712 ns 409380 -bm_rtl::method____ErasedReturnType::set_string 1714 ns 1714 ns 406447 -bm_rtl::method____ErasedTargetType::set_string 1706 ns 1706 ns 409968 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1712 ns 1712 ns 409490 +bm_rtl::function__ErasedReturnType::set_string 1747 ns 1746 ns 400854 +bm_rtl::method____ErasedReturnType::set_string 1736 ns 1736 ns 403429 +bm_rtl::method____ErasedTargetType::set_string 1737 ns 1737 ns 403093 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1739 ns 1738 ns 402717 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3068 ns 3068 ns 228115 +bm_call::direct__Function::get_string 3176 ns 3176 ns 220460 -bm_call::via_function_ptr__Function::get_string 3075 ns 3075 ns 228097 -bm_call::via_function_ptr____Method::get_string 3071 ns 3071 ns 228102 +bm_call::via_function_ptr__Function::get_string 3177 ns 3176 ns 220349 +bm_call::via_function_ptr____Method::get_string 3179 ns 3178 ns 220255 -bm_std::function_calls__Function::get_string 3073 ns 3072 ns 228116 -bm_std::function_calls____Method::get_string 3073 ns 3072 ns 227749 +bm_std::function_calls__Function::get_string 3176 ns 3176 ns 220394 +bm_std::function_calls____Method::get_string 3177 ns 3176 ns 220423 -bm_rtl::function_calls__Function::get_string 3074 ns 3074 ns 227707 -bm_rtl::method_calls______Method::get_string 3071 ns 3071 ns 228043 +bm_rtl::function_calls__Function::get_string 3177 ns 3177 ns 220295 +bm_rtl::method_calls______Method::get_string 3181 ns 3181 ns 220150 -bm_rtl::function__ErasedReturnType::get_string 3716 ns 3716 ns 187872 -bm_rtl::method____ErasedReturnType::get_string 3717 ns 3717 ns 188232 -bm_rtl::method____ErasedTargetType::get_string 3092 ns 3092 ns 225613 -bm_rtl::method____ErasedTargetAndReturnType::get_string 3722 ns 3722 ns 188133 +bm_rtl::function__ErasedReturnType::get_string 3210 ns 3210 ns 218065 +bm_rtl::method____ErasedReturnType::get_string 3205 ns 3205 ns 218381 +bm_rtl::method____ErasedTargetType::get_string 3196 ns 3196 ns 219058 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3204 ns 3204 ns 218448 ----------------------------------- -[2025-11-04 12:32:08] >>> Run 1: workload scale = 82 +[2026-01-19 23:16:11] >>> Run 1: workload scale = 82 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 82 iterations ============================================= -2025-11-04T12:32:08+05:30 +2026-01-19T23:16:11+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3729.3 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 1.09, 1.02 +Load Average: 1.00, 1.00, 0.85 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1767 ns 1766 ns 395242 +bm_call::direct__Function::set_string 1794 ns 1794 ns 389505 -bm_call::via_function_ptr__Function::set_string 1772 ns 1772 ns 394957 -bm_call::via_function_ptr____Method::set_string 1772 ns 1772 ns 394786 +bm_call::via_function_ptr__Function::set_string 1790 ns 1790 ns 390845 +bm_call::via_function_ptr____Method::set_string 1790 ns 1790 ns 390651 -bm_std::function_calls__Function::set_string 1771 ns 1771 ns 395414 -bm_std::function_calls____Method::set_string 1776 ns 1776 ns 395160 +bm_std::function_calls__Function::set_string 1809 ns 1808 ns 387130 +bm_std::function_calls____Method::set_string 1812 ns 1812 ns 386533 -bm_rtl::function_calls__Function::set_string 1774 ns 1774 ns 394773 -bm_rtl::method_calls______Method::set_string 1780 ns 1780 ns 393690 +bm_rtl::function_calls__Function::set_string 1784 ns 1784 ns 392616 +bm_rtl::method_calls______Method::set_string 1784 ns 1784 ns 392461 -bm_rtl::function__ErasedReturnType::set_string 1778 ns 1778 ns 393159 -bm_rtl::method____ErasedReturnType::set_string 1782 ns 1782 ns 393163 -bm_rtl::method____ErasedTargetType::set_string 1781 ns 1781 ns 392715 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1782 ns 1782 ns 392482 +bm_rtl::function__ErasedReturnType::set_string 1797 ns 1796 ns 389855 +bm_rtl::method____ErasedReturnType::set_string 1803 ns 1802 ns 388490 +bm_rtl::method____ErasedTargetType::set_string 1792 ns 1792 ns 390157 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1795 ns 1795 ns 390045 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3335 ns 3335 ns 209233 +bm_call::direct__Function::get_string 3375 ns 3375 ns 207424 -bm_call::via_function_ptr__Function::get_string 3338 ns 3338 ns 209626 -bm_call::via_function_ptr____Method::get_string 3337 ns 3337 ns 209562 +bm_call::via_function_ptr__Function::get_string 3374 ns 3374 ns 207361 +bm_call::via_function_ptr____Method::get_string 3377 ns 3376 ns 207215 -bm_std::function_calls__Function::get_string 3333 ns 3333 ns 210286 -bm_std::function_calls____Method::get_string 3337 ns 3337 ns 209884 +bm_std::function_calls__Function::get_string 3415 ns 3414 ns 204995 +bm_std::function_calls____Method::get_string 3412 ns 3412 ns 205212 -bm_rtl::function_calls__Function::get_string 3338 ns 3338 ns 209988 -bm_rtl::method_calls______Method::get_string 3336 ns 3336 ns 209984 +bm_rtl::function_calls__Function::get_string 3372 ns 3372 ns 207524 +bm_rtl::method_calls______Method::get_string 3376 ns 3375 ns 207464 -bm_rtl::function__ErasedReturnType::get_string 4070 ns 4069 ns 172155 -bm_rtl::method____ErasedReturnType::get_string 4068 ns 4067 ns 172083 -bm_rtl::method____ErasedTargetType::get_string 3352 ns 3351 ns 209120 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4069 ns 4068 ns 172041 +bm_rtl::function__ErasedReturnType::get_string 3383 ns 3383 ns 206960 +bm_rtl::method____ErasedReturnType::get_string 3390 ns 3389 ns 206533 +bm_rtl::method____ErasedTargetType::get_string 3388 ns 3388 ns 206603 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3394 ns 3394 ns 206249 ----------------------------------- -[2025-11-04 12:32:30] >>> Run 2: workload scale = 82 +[2026-01-19 23:16:33] >>> Run 2: workload scale = 82 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 82 iterations ============================================= -2025-11-04T12:32:30+05:30 +2026-01-19T23:16:33+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 3961.21 MHz CPU s) +Run on (16 X 800 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.07, 1.10, 1.02 +Load Average: 1.00, 1.00, 0.86 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1776 ns 1776 ns 393592 +bm_call::direct__Function::set_string 1789 ns 1788 ns 390994 -bm_call::via_function_ptr__Function::set_string 1777 ns 1777 ns 394043 -bm_call::via_function_ptr____Method::set_string 1779 ns 1779 ns 393918 +bm_call::via_function_ptr__Function::set_string 1785 ns 1784 ns 392122 +bm_call::via_function_ptr____Method::set_string 1785 ns 1785 ns 392243 -bm_std::function_calls__Function::set_string 1773 ns 1773 ns 395185 -bm_std::function_calls____Method::set_string 1773 ns 1773 ns 394879 +bm_std::function_calls__Function::set_string 1790 ns 1790 ns 390820 +bm_std::function_calls____Method::set_string 1790 ns 1790 ns 391136 -bm_rtl::function_calls__Function::set_string 1778 ns 1778 ns 393670 -bm_rtl::method_calls______Method::set_string 1778 ns 1778 ns 393972 +bm_rtl::function_calls__Function::set_string 1787 ns 1787 ns 392034 +bm_rtl::method_calls______Method::set_string 1788 ns 1787 ns 391689 -bm_rtl::function__ErasedReturnType::set_string 1787 ns 1787 ns 391688 -bm_rtl::method____ErasedReturnType::set_string 1787 ns 1787 ns 391402 -bm_rtl::method____ErasedTargetType::set_string 1783 ns 1783 ns 391780 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1785 ns 1785 ns 391770 +bm_rtl::function__ErasedReturnType::set_string 1798 ns 1798 ns 389411 +bm_rtl::method____ErasedReturnType::set_string 1796 ns 1796 ns 389638 +bm_rtl::method____ErasedTargetType::set_string 1813 ns 1813 ns 386506 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1794 ns 1794 ns 390498 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3332 ns 3332 ns 209745 +bm_call::direct__Function::get_string 3369 ns 3369 ns 207893 -bm_call::via_function_ptr__Function::get_string 3332 ns 3331 ns 210115 -bm_call::via_function_ptr____Method::get_string 3333 ns 3333 ns 209826 +bm_call::via_function_ptr__Function::get_string 3368 ns 3368 ns 207860 +bm_call::via_function_ptr____Method::get_string 3371 ns 3370 ns 207743 -bm_std::function_calls__Function::get_string 3326 ns 3326 ns 210463 -bm_std::function_calls____Method::get_string 3327 ns 3327 ns 210290 +bm_std::function_calls__Function::get_string 3368 ns 3368 ns 207977 +bm_std::function_calls____Method::get_string 3370 ns 3369 ns 207658 -bm_rtl::function_calls__Function::get_string 3326 ns 3325 ns 210512 -bm_rtl::method_calls______Method::get_string 3325 ns 3325 ns 210556 +bm_rtl::function_calls__Function::get_string 3366 ns 3366 ns 207915 +bm_rtl::method_calls______Method::get_string 3368 ns 3367 ns 207876 -bm_rtl::function__ErasedReturnType::get_string 4044 ns 4044 ns 173233 -bm_rtl::method____ErasedReturnType::get_string 4042 ns 4042 ns 173222 -bm_rtl::method____ErasedTargetType::get_string 3339 ns 3339 ns 209665 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4043 ns 4043 ns 173090 +bm_rtl::function__ErasedReturnType::get_string 3394 ns 3393 ns 206327 +bm_rtl::method____ErasedReturnType::get_string 3395 ns 3395 ns 206213 +bm_rtl::method____ErasedTargetType::get_string 3388 ns 3388 ns 206518 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3398 ns 3397 ns 206045 ----------------------------------- -[2025-11-04 12:32:52] >>> Run 3: workload scale = 82 +[2026-01-19 23:16:55] >>> Run 3: workload scale = 82 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 82 iterations ============================================= -2025-11-04T12:32:52+05:30 +2026-01-19T23:16:55+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2516,50 +2516,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.09, 1.02 +Load Average: 1.00, 1.00, 0.86 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1784 ns 1783 ns 392280 +bm_call::direct__Function::set_string 1811 ns 1810 ns 386087 -bm_call::via_function_ptr__Function::set_string 1786 ns 1786 ns 392452 -bm_call::via_function_ptr____Method::set_string 1789 ns 1789 ns 391699 +bm_call::via_function_ptr__Function::set_string 1809 ns 1809 ns 387440 +bm_call::via_function_ptr____Method::set_string 1812 ns 1811 ns 386622 -bm_std::function_calls__Function::set_string 1794 ns 1794 ns 390359 -bm_std::function_calls____Method::set_string 1804 ns 1804 ns 388507 +bm_std::function_calls__Function::set_string 1802 ns 1802 ns 388402 +bm_std::function_calls____Method::set_string 1799 ns 1799 ns 388973 -bm_rtl::function_calls__Function::set_string 1811 ns 1811 ns 387372 -bm_rtl::method_calls______Method::set_string 1808 ns 1808 ns 387531 +bm_rtl::function_calls__Function::set_string 1798 ns 1797 ns 389077 +bm_rtl::method_calls______Method::set_string 1799 ns 1798 ns 389305 -bm_rtl::function__ErasedReturnType::set_string 1782 ns 1782 ns 392864 -bm_rtl::method____ErasedReturnType::set_string 1785 ns 1785 ns 392227 -bm_rtl::method____ErasedTargetType::set_string 1780 ns 1780 ns 393273 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1780 ns 1780 ns 393240 +bm_rtl::function__ErasedReturnType::set_string 1805 ns 1805 ns 387952 +bm_rtl::method____ErasedReturnType::set_string 1805 ns 1805 ns 387977 +bm_rtl::method____ErasedTargetType::set_string 1807 ns 1807 ns 387510 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1814 ns 1813 ns 386017 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3362 ns 3362 ns 208152 +bm_call::direct__Function::get_string 3502 ns 3501 ns 199872 -bm_call::via_function_ptr__Function::get_string 3366 ns 3366 ns 207975 -bm_call::via_function_ptr____Method::get_string 3368 ns 3368 ns 207809 +bm_call::via_function_ptr__Function::get_string 3502 ns 3502 ns 199921 +bm_call::via_function_ptr____Method::get_string 3502 ns 3501 ns 199939 -bm_std::function_calls__Function::get_string 3362 ns 3361 ns 208229 -bm_std::function_calls____Method::get_string 3347 ns 3347 ns 209205 +bm_std::function_calls__Function::get_string 3501 ns 3501 ns 199951 +bm_std::function_calls____Method::get_string 3508 ns 3508 ns 199587 -bm_rtl::function_calls__Function::get_string 3361 ns 3361 ns 208356 -bm_rtl::method_calls______Method::get_string 3349 ns 3349 ns 208934 +bm_rtl::function_calls__Function::get_string 3501 ns 3501 ns 199876 +bm_rtl::method_calls______Method::get_string 3503 ns 3502 ns 199842 -bm_rtl::function__ErasedReturnType::get_string 4051 ns 4051 ns 172849 -bm_rtl::method____ErasedReturnType::get_string 4051 ns 4051 ns 172829 -bm_rtl::method____ErasedTargetType::get_string 3368 ns 3367 ns 207905 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4048 ns 4048 ns 172912 +bm_rtl::function__ErasedReturnType::get_string 3519 ns 3519 ns 199068 +bm_rtl::method____ErasedReturnType::get_string 3516 ns 3516 ns 199083 +bm_rtl::method____ErasedTargetType::get_string 3517 ns 3517 ns 199293 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3519 ns 3518 ns 199016 ----------------------------------- -[2025-11-04 12:33:14] >>> Run 1: workload scale = 90 +[2026-01-19 23:17:17] >>> Run 1: workload scale = 90 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 90 iterations ============================================= -2025-11-04T12:33:14+05:30 +2026-01-19T23:17:17+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2567,50 +2567,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.03, 1.08, 1.02 +Load Average: 1.00, 1.00, 0.87 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1850 ns 1850 ns 379224 +bm_call::direct__Function::set_string 1863 ns 1863 ns 375638 -bm_call::via_function_ptr__Function::set_string 1850 ns 1850 ns 378200 -bm_call::via_function_ptr____Method::set_string 1852 ns 1852 ns 378223 +bm_call::via_function_ptr__Function::set_string 1857 ns 1857 ns 376944 +bm_call::via_function_ptr____Method::set_string 1859 ns 1859 ns 376768 -bm_std::function_calls__Function::set_string 1853 ns 1853 ns 377629 -bm_std::function_calls____Method::set_string 1853 ns 1852 ns 377833 +bm_std::function_calls__Function::set_string 1879 ns 1879 ns 371755 +bm_std::function_calls____Method::set_string 1867 ns 1866 ns 374396 -bm_rtl::function_calls__Function::set_string 1853 ns 1852 ns 378253 -bm_rtl::method_calls______Method::set_string 1855 ns 1855 ns 377285 +bm_rtl::function_calls__Function::set_string 1858 ns 1858 ns 376844 +bm_rtl::method_calls______Method::set_string 1858 ns 1858 ns 376799 -bm_rtl::function__ErasedReturnType::set_string 1866 ns 1865 ns 375269 -bm_rtl::method____ErasedReturnType::set_string 1872 ns 1872 ns 374394 -bm_rtl::method____ErasedTargetType::set_string 1865 ns 1864 ns 375297 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1870 ns 1869 ns 375229 +bm_rtl::function__ErasedReturnType::set_string 1876 ns 1876 ns 373607 +bm_rtl::method____ErasedReturnType::set_string 1886 ns 1886 ns 370976 +bm_rtl::method____ErasedTargetType::set_string 1873 ns 1872 ns 373713 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1873 ns 1873 ns 374113 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3621 ns 3621 ns 193229 +bm_call::direct__Function::get_string 3659 ns 3658 ns 191514 -bm_call::via_function_ptr__Function::get_string 3620 ns 3620 ns 193390 -bm_call::via_function_ptr____Method::get_string 3619 ns 3619 ns 193491 +bm_call::via_function_ptr__Function::get_string 3651 ns 3650 ns 191687 +bm_call::via_function_ptr____Method::get_string 3651 ns 3650 ns 191718 -bm_std::function_calls__Function::get_string 3627 ns 3627 ns 193051 -bm_std::function_calls____Method::get_string 3629 ns 3629 ns 192921 +bm_std::function_calls__Function::get_string 3662 ns 3661 ns 191309 +bm_std::function_calls____Method::get_string 3655 ns 3655 ns 191385 -bm_rtl::function_calls__Function::get_string 3626 ns 3626 ns 193080 -bm_rtl::method_calls______Method::get_string 3630 ns 3630 ns 192853 +bm_rtl::function_calls__Function::get_string 3648 ns 3648 ns 191878 +bm_rtl::method_calls______Method::get_string 3651 ns 3651 ns 191753 -bm_rtl::function__ErasedReturnType::get_string 4345 ns 4345 ns 161148 -bm_rtl::method____ErasedReturnType::get_string 4348 ns 4348 ns 160982 -bm_rtl::method____ErasedTargetType::get_string 3658 ns 3658 ns 191325 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4350 ns 4350 ns 160848 +bm_rtl::function__ErasedReturnType::get_string 3688 ns 3688 ns 189767 +bm_rtl::method____ErasedReturnType::get_string 3685 ns 3685 ns 190062 +bm_rtl::method____ErasedTargetType::get_string 3685 ns 3685 ns 189945 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3693 ns 3692 ns 189633 ----------------------------------- -[2025-11-04 12:33:36] >>> Run 2: workload scale = 90 +[2026-01-19 23:17:39] >>> Run 2: workload scale = 90 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 90 iterations ============================================= -2025-11-04T12:33:36+05:30 +2026-01-19T23:17:39+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2618,50 +2618,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.02, 1.07, 1.02 +Load Average: 1.00, 1.00, 0.87 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1850 ns 1850 ns 378250 +bm_call::direct__Function::set_string 1901 ns 1901 ns 368162 -bm_call::via_function_ptr__Function::set_string 1851 ns 1851 ns 378198 -bm_call::via_function_ptr____Method::set_string 1853 ns 1852 ns 377792 +bm_call::via_function_ptr__Function::set_string 1900 ns 1900 ns 368222 +bm_call::via_function_ptr____Method::set_string 1903 ns 1903 ns 368462 -bm_std::function_calls__Function::set_string 1862 ns 1862 ns 376203 -bm_std::function_calls____Method::set_string 1859 ns 1859 ns 376918 +bm_std::function_calls__Function::set_string 1933 ns 1933 ns 362276 +bm_std::function_calls____Method::set_string 1932 ns 1932 ns 362124 -bm_rtl::function_calls__Function::set_string 1864 ns 1864 ns 375389 -bm_rtl::method_calls______Method::set_string 1864 ns 1864 ns 375592 +bm_rtl::function_calls__Function::set_string 1882 ns 1882 ns 371779 +bm_rtl::method_calls______Method::set_string 1881 ns 1881 ns 372490 -bm_rtl::function__ErasedReturnType::set_string 1877 ns 1877 ns 373174 -bm_rtl::method____ErasedReturnType::set_string 1877 ns 1877 ns 373198 -bm_rtl::method____ErasedTargetType::set_string 1871 ns 1870 ns 374468 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1876 ns 1876 ns 373838 +bm_rtl::function__ErasedReturnType::set_string 1884 ns 1884 ns 371491 +bm_rtl::method____ErasedReturnType::set_string 1884 ns 1884 ns 371247 +bm_rtl::method____ErasedTargetType::set_string 1886 ns 1886 ns 371278 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1902 ns 1901 ns 368129 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3626 ns 3625 ns 193072 +bm_call::direct__Function::get_string 3778 ns 3777 ns 185389 -bm_call::via_function_ptr__Function::get_string 3623 ns 3623 ns 193302 -bm_call::via_function_ptr____Method::get_string 3622 ns 3622 ns 193279 +bm_call::via_function_ptr__Function::get_string 3756 ns 3756 ns 186385 +bm_call::via_function_ptr____Method::get_string 3781 ns 3780 ns 185102 -bm_std::function_calls__Function::get_string 3630 ns 3630 ns 192894 -bm_std::function_calls____Method::get_string 3637 ns 3637 ns 192511 +bm_std::function_calls__Function::get_string 3739 ns 3739 ns 187219 +bm_std::function_calls____Method::get_string 3732 ns 3731 ns 187576 -bm_rtl::function_calls__Function::get_string 3632 ns 3632 ns 192793 -bm_rtl::method_calls______Method::get_string 3629 ns 3629 ns 192875 +bm_rtl::function_calls__Function::get_string 3755 ns 3754 ns 186509 +bm_rtl::method_calls______Method::get_string 3779 ns 3778 ns 185306 -bm_rtl::function__ErasedReturnType::get_string 4396 ns 4395 ns 159101 -bm_rtl::method____ErasedReturnType::get_string 4380 ns 4380 ns 159765 -bm_rtl::method____ErasedTargetType::get_string 3663 ns 3663 ns 191171 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4382 ns 4382 ns 159762 +bm_rtl::function__ErasedReturnType::get_string 3763 ns 3763 ns 186150 +bm_rtl::method____ErasedReturnType::get_string 3754 ns 3754 ns 186567 +bm_rtl::method____ErasedTargetType::get_string 3752 ns 3752 ns 186761 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3757 ns 3757 ns 186314 ----------------------------------- -[2025-11-04 12:33:58] >>> Run 3: workload scale = 90 +[2026-01-19 23:18:01] >>> Run 3: workload scale = 90 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 90 iterations ============================================= -2025-11-04T12:33:58+05:30 +2026-01-19T23:18:01+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2669,101 +2669,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 1.07, 1.02 +Load Average: 1.00, 1.00, 0.88 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1867 ns 1867 ns 374901 +bm_call::direct__Function::set_string 1920 ns 1919 ns 364839 -bm_call::via_function_ptr__Function::set_string 1869 ns 1869 ns 374808 -bm_call::via_function_ptr____Method::set_string 1868 ns 1868 ns 374856 +bm_call::via_function_ptr__Function::set_string 1916 ns 1916 ns 365320 +bm_call::via_function_ptr____Method::set_string 1916 ns 1915 ns 365777 -bm_std::function_calls__Function::set_string 1871 ns 1871 ns 374208 -bm_std::function_calls____Method::set_string 1860 ns 1860 ns 375819 +bm_std::function_calls__Function::set_string 1902 ns 1902 ns 368265 +bm_std::function_calls____Method::set_string 1899 ns 1899 ns 368618 -bm_rtl::function_calls__Function::set_string 1873 ns 1873 ns 374232 -bm_rtl::method_calls______Method::set_string 1866 ns 1866 ns 375267 +bm_rtl::function_calls__Function::set_string 1903 ns 1902 ns 368541 +bm_rtl::method_calls______Method::set_string 1910 ns 1910 ns 367711 -bm_rtl::function__ErasedReturnType::set_string 1885 ns 1885 ns 371538 -bm_rtl::method____ErasedReturnType::set_string 1899 ns 1899 ns 368497 -bm_rtl::method____ErasedTargetType::set_string 1882 ns 1882 ns 372145 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1896 ns 1896 ns 369384 +bm_rtl::function__ErasedReturnType::set_string 1877 ns 1877 ns 372914 +bm_rtl::method____ErasedReturnType::set_string 1886 ns 1885 ns 371486 +bm_rtl::method____ErasedTargetType::set_string 1888 ns 1887 ns 370679 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1897 ns 1897 ns 368599 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3811 ns 3811 ns 183639 +bm_call::direct__Function::get_string 3692 ns 3692 ns 189447 -bm_call::via_function_ptr__Function::get_string 3811 ns 3811 ns 183675 -bm_call::via_function_ptr____Method::get_string 3809 ns 3808 ns 183773 +bm_call::via_function_ptr__Function::get_string 3689 ns 3688 ns 189708 +bm_call::via_function_ptr____Method::get_string 3689 ns 3689 ns 189672 -bm_std::function_calls__Function::get_string 3821 ns 3821 ns 183176 -bm_std::function_calls____Method::get_string 3822 ns 3821 ns 183277 +bm_std::function_calls__Function::get_string 3695 ns 3694 ns 189731 +bm_std::function_calls____Method::get_string 3694 ns 3694 ns 189470 -bm_rtl::function_calls__Function::get_string 3817 ns 3816 ns 183495 -bm_rtl::method_calls______Method::get_string 3820 ns 3820 ns 183226 +bm_rtl::function_calls__Function::get_string 3689 ns 3689 ns 189854 +bm_rtl::method_calls______Method::get_string 3692 ns 3692 ns 189660 -bm_rtl::function__ErasedReturnType::get_string 4565 ns 4565 ns 153385 -bm_rtl::method____ErasedReturnType::get_string 4539 ns 4539 ns 154235 -bm_rtl::method____ErasedTargetType::get_string 3844 ns 3843 ns 182098 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4541 ns 4540 ns 154162 +bm_rtl::function__ErasedReturnType::get_string 3685 ns 3685 ns 190024 +bm_rtl::method____ErasedReturnType::get_string 3686 ns 3686 ns 189881 +bm_rtl::method____ErasedTargetType::get_string 3686 ns 3685 ns 189939 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3678 ns 3678 ns 190331 ----------------------------------- -[2025-11-04 12:34:21] >>> Run 1: workload scale = 100 +[2026-01-19 23:18:24] >>> Run 1: workload scale = 100 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 100 iterations ============================================= -2025-11-04T12:34:21+05:30 +2026-01-19T23:18:24+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 954.973 MHz CPU s) +Run on (16 X 953.464 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.01, 1.06, 1.01 +Load Average: 1.00, 1.00, 0.88 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1961 ns 1961 ns 357857 +bm_call::direct__Function::set_string 1983 ns 1983 ns 352153 -bm_call::via_function_ptr__Function::set_string 1962 ns 1962 ns 356890 -bm_call::via_function_ptr____Method::set_string 1964 ns 1964 ns 356347 +bm_call::via_function_ptr__Function::set_string 1982 ns 1982 ns 353132 +bm_call::via_function_ptr____Method::set_string 1982 ns 1982 ns 352949 -bm_std::function_calls__Function::set_string 1981 ns 1980 ns 353093 -bm_std::function_calls____Method::set_string 1980 ns 1980 ns 353920 +bm_std::function_calls__Function::set_string 2006 ns 2006 ns 349040 +bm_std::function_calls____Method::set_string 1988 ns 1988 ns 351879 -bm_rtl::function_calls__Function::set_string 1986 ns 1985 ns 352760 -bm_rtl::method_calls______Method::set_string 1960 ns 1960 ns 357367 +bm_rtl::function_calls__Function::set_string 1983 ns 1982 ns 353365 +bm_rtl::method_calls______Method::set_string 1983 ns 1982 ns 353211 -bm_rtl::function__ErasedReturnType::set_string 1966 ns 1966 ns 355968 -bm_rtl::method____ErasedReturnType::set_string 1966 ns 1966 ns 356507 -bm_rtl::method____ErasedTargetType::set_string 1965 ns 1965 ns 356382 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1969 ns 1969 ns 355503 +bm_rtl::function__ErasedReturnType::set_string 1999 ns 1999 ns 350179 +bm_rtl::method____ErasedReturnType::set_string 2021 ns 2021 ns 344890 +bm_rtl::method____ErasedTargetType::set_string 1999 ns 1999 ns 350645 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2003 ns 2002 ns 349382 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4122 ns 4122 ns 169805 +bm_call::direct__Function::get_string 3946 ns 3945 ns 177472 -bm_call::via_function_ptr__Function::get_string 4123 ns 4122 ns 169776 -bm_call::via_function_ptr____Method::get_string 3985 ns 3985 ns 171499 +bm_call::via_function_ptr__Function::get_string 3949 ns 3948 ns 177365 +bm_call::via_function_ptr____Method::get_string 3954 ns 3954 ns 177081 -bm_std::function_calls__Function::get_string 3952 ns 3951 ns 176989 -bm_std::function_calls____Method::get_string 3953 ns 3952 ns 177118 +bm_std::function_calls__Function::get_string 3948 ns 3948 ns 177318 +bm_std::function_calls____Method::get_string 3946 ns 3945 ns 177368 -bm_rtl::function_calls__Function::get_string 3957 ns 3957 ns 176932 -bm_rtl::method_calls______Method::get_string 3957 ns 3957 ns 176974 +bm_rtl::function_calls__Function::get_string 3949 ns 3949 ns 177379 +bm_rtl::method_calls______Method::get_string 3951 ns 3951 ns 177153 -bm_rtl::function__ErasedReturnType::get_string 4745 ns 4744 ns 147638 -bm_rtl::method____ErasedReturnType::get_string 4746 ns 4746 ns 147454 -bm_rtl::method____ErasedTargetType::get_string 3978 ns 3978 ns 175930 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4745 ns 4745 ns 147401 +bm_rtl::function__ErasedReturnType::get_string 3963 ns 3963 ns 176629 +bm_rtl::method____ErasedReturnType::get_string 3974 ns 3974 ns 176103 +bm_rtl::method____ErasedTargetType::get_string 3959 ns 3959 ns 176758 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3972 ns 3972 ns 176227 ----------------------------------- -[2025-11-04 12:34:44] >>> Run 2: workload scale = 100 +[2026-01-19 23:18:46] >>> Run 2: workload scale = 100 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 100 iterations ============================================= -2025-11-04T12:34:44+05:30 +2026-01-19T23:18:46+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2771,50 +2771,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 1.06, 1.01 +Load Average: 1.00, 1.00, 0.88 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1934 ns 1934 ns 361337 +bm_call::direct__Function::set_string 1963 ns 1962 ns 356872 -bm_call::via_function_ptr__Function::set_string 1940 ns 1940 ns 360781 -bm_call::via_function_ptr____Method::set_string 1936 ns 1936 ns 361609 +bm_call::via_function_ptr__Function::set_string 1965 ns 1965 ns 356959 +bm_call::via_function_ptr____Method::set_string 1961 ns 1961 ns 356856 -bm_std::function_calls__Function::set_string 1937 ns 1936 ns 360705 -bm_std::function_calls____Method::set_string 1942 ns 1942 ns 361593 +bm_std::function_calls__Function::set_string 1965 ns 1965 ns 356972 +bm_std::function_calls____Method::set_string 1985 ns 1985 ns 353072 -bm_rtl::function_calls__Function::set_string 1944 ns 1944 ns 360392 -bm_rtl::method_calls______Method::set_string 1945 ns 1945 ns 359927 +bm_rtl::function_calls__Function::set_string 1977 ns 1977 ns 353606 +bm_rtl::method_calls______Method::set_string 1979 ns 1979 ns 352091 -bm_rtl::function__ErasedReturnType::set_string 1952 ns 1952 ns 358537 -bm_rtl::method____ErasedReturnType::set_string 1958 ns 1958 ns 357397 -bm_rtl::method____ErasedTargetType::set_string 1963 ns 1963 ns 357730 -bm_rtl::method____ErasedTargetAndReturnType::set_string 1972 ns 1972 ns 354598 +bm_rtl::function__ErasedReturnType::set_string 1999 ns 1999 ns 349499 +bm_rtl::method____ErasedReturnType::set_string 1979 ns 1979 ns 354224 +bm_rtl::method____ErasedTargetType::set_string 1980 ns 1980 ns 353401 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1982 ns 1982 ns 353521 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4096 ns 4096 ns 170858 +bm_call::direct__Function::get_string 3952 ns 3951 ns 177102 -bm_call::via_function_ptr__Function::get_string 4094 ns 4093 ns 170965 -bm_call::via_function_ptr____Method::get_string 4092 ns 4092 ns 171123 +bm_call::via_function_ptr__Function::get_string 3953 ns 3952 ns 176786 +bm_call::via_function_ptr____Method::get_string 3958 ns 3958 ns 176907 -bm_std::function_calls__Function::get_string 4098 ns 4098 ns 170793 -bm_std::function_calls____Method::get_string 4103 ns 4103 ns 170634 +bm_std::function_calls__Function::get_string 3942 ns 3941 ns 177129 +bm_std::function_calls____Method::get_string 3954 ns 3953 ns 177506 -bm_rtl::function_calls__Function::get_string 4102 ns 4102 ns 170611 -bm_rtl::method_calls______Method::get_string 4102 ns 4102 ns 170566 +bm_rtl::function_calls__Function::get_string 3951 ns 3951 ns 177178 +bm_rtl::method_calls______Method::get_string 3958 ns 3958 ns 177075 -bm_rtl::function__ErasedReturnType::get_string 4891 ns 4891 ns 143266 -bm_rtl::method____ErasedReturnType::get_string 4896 ns 4895 ns 142971 -bm_rtl::method____ErasedTargetType::get_string 4128 ns 4128 ns 169566 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4896 ns 4896 ns 142983 +bm_rtl::function__ErasedReturnType::get_string 3973 ns 3972 ns 176053 +bm_rtl::method____ErasedReturnType::get_string 3968 ns 3967 ns 176677 +bm_rtl::method____ErasedTargetType::get_string 3960 ns 3959 ns 177029 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3963 ns 3963 ns 176044 ----------------------------------- -[2025-11-04 12:35:07] >>> Run 3: workload scale = 100 +[2026-01-19 23:19:09] >>> Run 3: workload scale = 100 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 100 iterations ============================================= -2025-11-04T12:35:07+05:30 +2026-01-19T23:19:09+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2822,101 +2822,101 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 1.05, 1.01 +Load Average: 1.00, 1.00, 0.89 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 1977 ns 1977 ns 353596 +bm_call::direct__Function::set_string 1968 ns 1968 ns 355257 -bm_call::via_function_ptr__Function::set_string 1985 ns 1984 ns 353779 -bm_call::via_function_ptr____Method::set_string 1989 ns 1989 ns 352715 +bm_call::via_function_ptr__Function::set_string 1966 ns 1965 ns 355344 +bm_call::via_function_ptr____Method::set_string 1966 ns 1966 ns 356102 -bm_std::function_calls__Function::set_string 2003 ns 2003 ns 350400 -bm_std::function_calls____Method::set_string 2008 ns 2008 ns 349132 +bm_std::function_calls__Function::set_string 1975 ns 1975 ns 354670 +bm_std::function_calls____Method::set_string 1975 ns 1975 ns 354660 -bm_rtl::function_calls__Function::set_string 2006 ns 2006 ns 349311 -bm_rtl::method_calls______Method::set_string 2011 ns 2011 ns 349247 +bm_rtl::function_calls__Function::set_string 1968 ns 1968 ns 356032 +bm_rtl::method_calls______Method::set_string 1968 ns 1968 ns 355469 -bm_rtl::function__ErasedReturnType::set_string 2000 ns 1999 ns 350105 -bm_rtl::method____ErasedReturnType::set_string 2000 ns 2000 ns 350108 -bm_rtl::method____ErasedTargetType::set_string 2002 ns 2002 ns 349732 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2002 ns 2002 ns 349713 +bm_rtl::function__ErasedReturnType::set_string 1985 ns 1985 ns 352756 +bm_rtl::method____ErasedReturnType::set_string 1986 ns 1986 ns 352599 +bm_rtl::method____ErasedTargetType::set_string 2008 ns 2008 ns 348721 +bm_rtl::method____ErasedTargetAndReturnType::set_string 1985 ns 1984 ns 353073 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 3976 ns 3976 ns 175636 +bm_call::direct__Function::get_string 3957 ns 3957 ns 176887 -bm_call::via_function_ptr__Function::get_string 3977 ns 3977 ns 176258 -bm_call::via_function_ptr____Method::get_string 3969 ns 3968 ns 176389 +bm_call::via_function_ptr__Function::get_string 3961 ns 3960 ns 176806 +bm_call::via_function_ptr____Method::get_string 3961 ns 3961 ns 176756 -bm_std::function_calls__Function::get_string 4001 ns 4001 ns 175249 -bm_std::function_calls____Method::get_string 3993 ns 3993 ns 175269 +bm_std::function_calls__Function::get_string 3953 ns 3953 ns 176961 +bm_std::function_calls____Method::get_string 3954 ns 3953 ns 177120 -bm_rtl::function_calls__Function::get_string 4006 ns 4006 ns 174915 -bm_rtl::method_calls______Method::get_string 3975 ns 3975 ns 176077 +bm_rtl::function_calls__Function::get_string 3958 ns 3958 ns 176943 +bm_rtl::method_calls______Method::get_string 3960 ns 3959 ns 176821 -bm_rtl::function__ErasedReturnType::get_string 4735 ns 4735 ns 147503 -bm_rtl::method____ErasedReturnType::get_string 4744 ns 4744 ns 147790 -bm_rtl::method____ErasedTargetType::get_string 3979 ns 3979 ns 175845 -bm_rtl::method____ErasedTargetAndReturnType::get_string 4745 ns 4745 ns 147593 +bm_rtl::function__ErasedReturnType::get_string 3978 ns 3978 ns 176017 +bm_rtl::method____ErasedReturnType::get_string 3982 ns 3982 ns 175814 +bm_rtl::method____ErasedTargetType::get_string 3973 ns 3972 ns 176287 +bm_rtl::method____ErasedTargetAndReturnType::get_string 3982 ns 3981 ns 175813 ----------------------------------- -[2025-11-04 12:35:30] >>> Run 1: workload scale = 120 +[2026-01-19 23:19:32] >>> Run 1: workload scale = 120 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 120 iterations ============================================= -2025-11-04T12:35:30+05:30 +2026-01-19T23:19:32+05:30 Running ./bin/RTLBenchmarkApp -Run on (16 X 800 MHz CPU s) +Run on (16 X 2306.47 MHz CPU s) CPU Caches: L1 Data 48 KiB (x8) L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.00, 1.05, 1.01 +Load Average: 1.00, 1.00, 0.89 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 2145 ns 2145 ns 326478 +bm_call::direct__Function::set_string 2159 ns 2159 ns 324744 -bm_call::via_function_ptr__Function::set_string 2145 ns 2145 ns 326264 -bm_call::via_function_ptr____Method::set_string 2148 ns 2148 ns 325609 +bm_call::via_function_ptr__Function::set_string 2155 ns 2154 ns 324974 +bm_call::via_function_ptr____Method::set_string 2157 ns 2157 ns 324813 -bm_std::function_calls__Function::set_string 2150 ns 2149 ns 325379 -bm_std::function_calls____Method::set_string 2146 ns 2146 ns 326018 +bm_std::function_calls__Function::set_string 2160 ns 2160 ns 324000 +bm_std::function_calls____Method::set_string 2165 ns 2165 ns 323682 -bm_rtl::function_calls__Function::set_string 2151 ns 2151 ns 325875 -bm_rtl::method_calls______Method::set_string 2152 ns 2152 ns 325215 +bm_rtl::function_calls__Function::set_string 2155 ns 2155 ns 324669 +bm_rtl::method_calls______Method::set_string 2156 ns 2155 ns 324478 -bm_rtl::function__ErasedReturnType::set_string 2161 ns 2161 ns 324202 -bm_rtl::method____ErasedReturnType::set_string 2162 ns 2162 ns 324182 -bm_rtl::method____ErasedTargetType::set_string 2157 ns 2157 ns 324788 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2162 ns 2161 ns 324038 +bm_rtl::function__ErasedReturnType::set_string 2176 ns 2175 ns 320756 +bm_rtl::method____ErasedReturnType::set_string 2174 ns 2174 ns 321889 +bm_rtl::method____ErasedTargetType::set_string 2200 ns 2200 ns 317433 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2176 ns 2176 ns 321629 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4617 ns 4617 ns 151631 +bm_call::direct__Function::get_string 4621 ns 4621 ns 151211 -bm_call::via_function_ptr__Function::get_string 4617 ns 4617 ns 151639 -bm_call::via_function_ptr____Method::get_string 4617 ns 4616 ns 151716 +bm_call::via_function_ptr__Function::get_string 4626 ns 4626 ns 151508 +bm_call::via_function_ptr____Method::get_string 4622 ns 4622 ns 151424 -bm_std::function_calls__Function::get_string 4627 ns 4626 ns 151346 -bm_std::function_calls____Method::get_string 4619 ns 4619 ns 151470 +bm_std::function_calls__Function::get_string 4632 ns 4632 ns 151238 +bm_std::function_calls____Method::get_string 4626 ns 4625 ns 151353 -bm_rtl::function_calls__Function::get_string 4620 ns 4620 ns 151567 -bm_rtl::method_calls______Method::get_string 4620 ns 4620 ns 151462 +bm_rtl::function_calls__Function::get_string 4619 ns 4618 ns 151221 +bm_rtl::method_calls______Method::get_string 4625 ns 4625 ns 151564 -bm_rtl::function__ErasedReturnType::get_string 5616 ns 5616 ns 124617 -bm_rtl::method____ErasedReturnType::get_string 5608 ns 5608 ns 124657 -bm_rtl::method____ErasedTargetType::get_string 4645 ns 4644 ns 150774 -bm_rtl::method____ErasedTargetAndReturnType::get_string 5612 ns 5612 ns 124546 +bm_rtl::function__ErasedReturnType::get_string 4645 ns 4644 ns 150711 +bm_rtl::method____ErasedReturnType::get_string 4655 ns 4655 ns 150667 +bm_rtl::method____ErasedTargetType::get_string 4641 ns 4640 ns 150806 +bm_rtl::method____ErasedTargetAndReturnType::get_string 4651 ns 4651 ns 150168 ----------------------------------- -[2025-11-04 12:35:52] >>> Run 2: workload scale = 120 +[2026-01-19 23:19:55] >>> Run 2: workload scale = 120 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 120 iterations ============================================= -2025-11-04T12:35:52+05:30 +2026-01-19T23:19:55+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2924,50 +2924,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 1.06, 1.01 +Load Average: 1.00, 1.00, 0.90 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 2145 ns 2145 ns 326686 +bm_call::direct__Function::set_string 2246 ns 2245 ns 311778 -bm_call::via_function_ptr__Function::set_string 2143 ns 2143 ns 327072 -bm_call::via_function_ptr____Method::set_string 2142 ns 2142 ns 326938 +bm_call::via_function_ptr__Function::set_string 2244 ns 2244 ns 312238 +bm_call::via_function_ptr____Method::set_string 2243 ns 2243 ns 312122 -bm_std::function_calls__Function::set_string 2152 ns 2152 ns 325170 -bm_std::function_calls____Method::set_string 2149 ns 2149 ns 326018 +bm_std::function_calls__Function::set_string 2162 ns 2162 ns 323973 +bm_std::function_calls____Method::set_string 2164 ns 2164 ns 323396 -bm_rtl::function_calls__Function::set_string 2153 ns 2153 ns 325215 -bm_rtl::method_calls______Method::set_string 2150 ns 2150 ns 325278 +bm_rtl::function_calls__Function::set_string 2220 ns 2219 ns 315305 +bm_rtl::method_calls______Method::set_string 2221 ns 2220 ns 315210 -bm_rtl::function__ErasedReturnType::set_string 2165 ns 2164 ns 323427 -bm_rtl::method____ErasedReturnType::set_string 2189 ns 2189 ns 319619 -bm_rtl::method____ErasedTargetType::set_string 2171 ns 2170 ns 322824 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2181 ns 2181 ns 320945 +bm_rtl::function__ErasedReturnType::set_string 2188 ns 2188 ns 320033 +bm_rtl::method____ErasedReturnType::set_string 2191 ns 2190 ns 319572 +bm_rtl::method____ErasedTargetType::set_string 2176 ns 2175 ns 321473 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2208 ns 2207 ns 316933 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4793 ns 4792 ns 146051 +bm_call::direct__Function::get_string 4619 ns 4619 ns 151620 -bm_call::via_function_ptr__Function::get_string 4795 ns 4794 ns 146001 -bm_call::via_function_ptr____Method::get_string 4792 ns 4792 ns 146108 +bm_call::via_function_ptr__Function::get_string 4637 ns 4636 ns 150938 +bm_call::via_function_ptr____Method::get_string 4622 ns 4622 ns 151513 -bm_std::function_calls__Function::get_string 4649 ns 4649 ns 145872 -bm_std::function_calls____Method::get_string 4627 ns 4627 ns 150967 +bm_std::function_calls__Function::get_string 4621 ns 4621 ns 151473 +bm_std::function_calls____Method::get_string 4630 ns 4630 ns 151236 -bm_rtl::function_calls__Function::get_string 4631 ns 4631 ns 151175 -bm_rtl::method_calls______Method::get_string 4632 ns 4632 ns 151161 +bm_rtl::function_calls__Function::get_string 4637 ns 4636 ns 151049 +bm_rtl::method_calls______Method::get_string 4620 ns 4619 ns 151561 -bm_rtl::function__ErasedReturnType::get_string 5685 ns 5684 ns 123111 -bm_rtl::method____ErasedReturnType::get_string 5630 ns 5629 ns 124248 -bm_rtl::method____ErasedTargetType::get_string 4674 ns 4674 ns 149772 -bm_rtl::method____ErasedTargetAndReturnType::get_string 5637 ns 5637 ns 124261 +bm_rtl::function__ErasedReturnType::get_string 4650 ns 4650 ns 150571 +bm_rtl::method____ErasedReturnType::get_string 4648 ns 4647 ns 150593 +bm_rtl::method____ErasedTargetType::get_string 4641 ns 4640 ns 150876 +bm_rtl::method____ErasedTargetAndReturnType::get_string 4650 ns 4650 ns 150607 ----------------------------------- -[2025-11-04 12:36:15] >>> Run 3: workload scale = 120 +[2026-01-19 23:20:19] >>> Run 3: workload scale = 120 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 120 iterations ============================================= -2025-11-04T12:36:15+05:30 +2026-01-19T23:20:19+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -2975,50 +2975,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.05, 1.01 +Load Average: 1.00, 1.00, 0.90 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 2157 ns 2157 ns 324031 +bm_call::direct__Function::set_string 2156 ns 2156 ns 324715 -bm_call::via_function_ptr__Function::set_string 2157 ns 2157 ns 323762 -bm_call::via_function_ptr____Method::set_string 2158 ns 2158 ns 324457 +bm_call::via_function_ptr__Function::set_string 2156 ns 2155 ns 324995 +bm_call::via_function_ptr____Method::set_string 2155 ns 2154 ns 325332 -bm_std::function_calls__Function::set_string 2168 ns 2168 ns 323051 -bm_std::function_calls____Method::set_string 2169 ns 2169 ns 322789 +bm_std::function_calls__Function::set_string 2184 ns 2184 ns 320585 +bm_std::function_calls____Method::set_string 2162 ns 2161 ns 324033 -bm_rtl::function_calls__Function::set_string 2164 ns 2164 ns 324068 -bm_rtl::method_calls______Method::set_string 2162 ns 2162 ns 323716 +bm_rtl::function_calls__Function::set_string 2154 ns 2153 ns 325083 +bm_rtl::method_calls______Method::set_string 2154 ns 2154 ns 324786 -bm_rtl::function__ErasedReturnType::set_string 2178 ns 2177 ns 322027 -bm_rtl::method____ErasedReturnType::set_string 2179 ns 2179 ns 321347 -bm_rtl::method____ErasedTargetType::set_string 2180 ns 2180 ns 321745 -bm_rtl::method____ErasedTargetAndReturnType::set_string 2180 ns 2180 ns 321062 +bm_rtl::function__ErasedReturnType::set_string 2176 ns 2176 ns 321714 +bm_rtl::method____ErasedReturnType::set_string 2204 ns 2204 ns 317451 +bm_rtl::method____ErasedTargetType::set_string 2176 ns 2176 ns 321731 +bm_rtl::method____ErasedTargetAndReturnType::set_string 2179 ns 2179 ns 321077 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 4636 ns 4636 ns 151263 +bm_call::direct__Function::get_string 4620 ns 4620 ns 151475 -bm_call::via_function_ptr__Function::get_string 4632 ns 4631 ns 151234 -bm_call::via_function_ptr____Method::get_string 4627 ns 4627 ns 150946 +bm_call::via_function_ptr__Function::get_string 4620 ns 4619 ns 151555 +bm_call::via_function_ptr____Method::get_string 4626 ns 4625 ns 151381 -bm_std::function_calls__Function::get_string 4643 ns 4642 ns 151075 -bm_std::function_calls____Method::get_string 4633 ns 4633 ns 151103 +bm_std::function_calls__Function::get_string 4628 ns 4628 ns 151209 +bm_std::function_calls____Method::get_string 4618 ns 4619 ns 151486 -bm_rtl::function_calls__Function::get_string 4647 ns 4647 ns 150930 -bm_rtl::method_calls______Method::get_string 4634 ns 4634 ns 151052 +bm_rtl::function_calls__Function::get_string 4621 ns 4621 ns 151490 +bm_rtl::method_calls______Method::get_string 4619 ns 4619 ns 151593 -bm_rtl::function__ErasedReturnType::get_string 5627 ns 5626 ns 124604 -bm_rtl::method____ErasedReturnType::get_string 5618 ns 5618 ns 124566 -bm_rtl::method____ErasedTargetType::get_string 4667 ns 4667 ns 150194 -bm_rtl::method____ErasedTargetAndReturnType::get_string 5622 ns 5622 ns 124669 +bm_rtl::function__ErasedReturnType::get_string 4647 ns 4647 ns 150680 +bm_rtl::method____ErasedReturnType::get_string 4654 ns 4655 ns 150375 +bm_rtl::method____ErasedTargetType::get_string 4648 ns 4647 ns 150602 +bm_rtl::method____ErasedTargetAndReturnType::get_string 4657 ns 4657 ns 150364 ----------------------------------- -[2025-11-04 12:36:37] >>> Run 1: workload scale = 150 +[2026-01-19 23:20:43] >>> Run 1: workload scale = 150 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 150 iterations ============================================= -2025-11-04T12:36:37+05:30 +2026-01-19T23:20:43+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -3026,50 +3026,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.08, 1.06, 1.01 +Load Average: 1.00, 1.00, 0.91 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 3511 ns 3511 ns 199591 +bm_call::direct__Function::set_string 3535 ns 3535 ns 197933 -bm_call::via_function_ptr__Function::set_string 3504 ns 3504 ns 199578 -bm_call::via_function_ptr____Method::set_string 3513 ns 3512 ns 199781 +bm_call::via_function_ptr__Function::set_string 3532 ns 3532 ns 198392 +bm_call::via_function_ptr____Method::set_string 3533 ns 3533 ns 198165 -bm_std::function_calls__Function::set_string 3518 ns 3518 ns 199107 -bm_std::function_calls____Method::set_string 3521 ns 3521 ns 199095 +bm_std::function_calls__Function::set_string 3543 ns 3543 ns 197567 +bm_std::function_calls____Method::set_string 3578 ns 3578 ns 195738 -bm_rtl::function_calls__Function::set_string 3519 ns 3518 ns 199087 -bm_rtl::method_calls______Method::set_string 3525 ns 3525 ns 198202 +bm_rtl::function_calls__Function::set_string 3562 ns 3562 ns 196466 +bm_rtl::method_calls______Method::set_string 3562 ns 3563 ns 196443 -bm_rtl::function__ErasedReturnType::set_string 3531 ns 3530 ns 198334 -bm_rtl::method____ErasedReturnType::set_string 3544 ns 3543 ns 197580 -bm_rtl::method____ErasedTargetType::set_string 3538 ns 3537 ns 198133 -bm_rtl::method____ErasedTargetAndReturnType::set_string 3545 ns 3544 ns 197480 +bm_rtl::function__ErasedReturnType::set_string 3619 ns 3620 ns 193386 +bm_rtl::method____ErasedReturnType::set_string 3642 ns 3642 ns 192226 +bm_rtl::method____ErasedTargetType::set_string 3564 ns 3564 ns 196370 +bm_rtl::method____ErasedTargetAndReturnType::set_string 3646 ns 3646 ns 192007 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 6774 ns 6772 ns 103350 +bm_call::direct__Function::get_string 6783 ns 6783 ns 103274 -bm_call::via_function_ptr__Function::get_string 6773 ns 6772 ns 103343 -bm_call::via_function_ptr____Method::get_string 6772 ns 6772 ns 103373 +bm_call::via_function_ptr__Function::get_string 6798 ns 6799 ns 102812 +bm_call::via_function_ptr____Method::get_string 6800 ns 6800 ns 102962 -bm_std::function_calls__Function::get_string 6784 ns 6783 ns 103220 -bm_std::function_calls____Method::get_string 6780 ns 6780 ns 103259 +bm_std::function_calls__Function::get_string 6784 ns 6784 ns 103177 +bm_std::function_calls____Method::get_string 6783 ns 6783 ns 103199 -bm_rtl::function_calls__Function::get_string 6779 ns 6778 ns 103272 -bm_rtl::method_calls______Method::get_string 6782 ns 6781 ns 103246 +bm_rtl::function_calls__Function::get_string 6796 ns 6797 ns 103001 +bm_rtl::method_calls______Method::get_string 6798 ns 6798 ns 102869 -bm_rtl::function__ErasedReturnType::get_string 7997 ns 7997 ns 87528 -bm_rtl::method____ErasedReturnType::get_string 7989 ns 7986 ns 87655 -bm_rtl::method____ErasedTargetType::get_string 6792 ns 6791 ns 103053 -bm_rtl::method____ErasedTargetAndReturnType::get_string 7992 ns 7989 ns 87557 +bm_rtl::function__ErasedReturnType::get_string 6878 ns 6878 ns 101790 +bm_rtl::method____ErasedReturnType::get_string 6825 ns 6825 ns 102576 +bm_rtl::method____ErasedTargetType::get_string 6800 ns 6800 ns 102981 +bm_rtl::method____ErasedTargetAndReturnType::get_string 6892 ns 6893 ns 101517 ----------------------------------- -[2025-11-04 12:36:58] >>> Run 2: workload scale = 150 +[2026-01-19 23:21:03] >>> Run 2: workload scale = 150 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 150 iterations ============================================= -2025-11-04T12:36:58+05:30 +2026-01-19T23:21:03+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -3077,50 +3077,50 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.06, 1.06, 1.01 +Load Average: 1.00, 1.00, 0.91 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 3549 ns 3548 ns 197190 +bm_call::direct__Function::set_string 3596 ns 3596 ns 194415 -bm_call::via_function_ptr__Function::set_string 3550 ns 3550 ns 197298 -bm_call::via_function_ptr____Method::set_string 3545 ns 3545 ns 197213 +bm_call::via_function_ptr__Function::set_string 3595 ns 3595 ns 194577 +bm_call::via_function_ptr____Method::set_string 3595 ns 3595 ns 194709 -bm_std::function_calls__Function::set_string 3557 ns 3556 ns 197059 -bm_std::function_calls____Method::set_string 3547 ns 3547 ns 197291 +bm_std::function_calls__Function::set_string 3570 ns 3570 ns 195823 +bm_std::function_calls____Method::set_string 3567 ns 3567 ns 196258 -bm_rtl::function_calls__Function::set_string 3550 ns 3550 ns 197117 -bm_rtl::method_calls______Method::set_string 3555 ns 3554 ns 197038 +bm_rtl::function_calls__Function::set_string 3558 ns 3558 ns 196659 +bm_rtl::method_calls______Method::set_string 3560 ns 3560 ns 196795 -bm_rtl::function__ErasedReturnType::set_string 3568 ns 3567 ns 196518 -bm_rtl::method____ErasedReturnType::set_string 3571 ns 3570 ns 195914 -bm_rtl::method____ErasedTargetType::set_string 3563 ns 3563 ns 196195 -bm_rtl::method____ErasedTargetAndReturnType::set_string 3567 ns 3566 ns 196254 +bm_rtl::function__ErasedReturnType::set_string 3577 ns 3577 ns 195584 +bm_rtl::method____ErasedReturnType::set_string 3581 ns 3580 ns 195594 +bm_rtl::method____ErasedTargetType::set_string 3582 ns 3583 ns 195321 +bm_rtl::method____ErasedTargetAndReturnType::set_string 3621 ns 3622 ns 193209 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 6601 ns 6600 ns 106086 +bm_call::direct__Function::get_string 6610 ns 6611 ns 105907 -bm_call::via_function_ptr__Function::get_string 6598 ns 6597 ns 106016 -bm_call::via_function_ptr____Method::get_string 6598 ns 6597 ns 106208 +bm_call::via_function_ptr__Function::get_string 6624 ns 6624 ns 105696 +bm_call::via_function_ptr____Method::get_string 6622 ns 6622 ns 105724 -bm_std::function_calls__Function::get_string 6607 ns 6606 ns 105997 -bm_std::function_calls____Method::get_string 6609 ns 6608 ns 105976 +bm_std::function_calls__Function::get_string 6615 ns 6616 ns 105759 +bm_std::function_calls____Method::get_string 6628 ns 6627 ns 105578 -bm_rtl::function_calls__Function::get_string 6606 ns 6605 ns 105996 -bm_rtl::method_calls______Method::get_string 6601 ns 6600 ns 106125 +bm_rtl::function_calls__Function::get_string 6618 ns 6619 ns 105749 +bm_rtl::method_calls______Method::get_string 6619 ns 6619 ns 105730 -bm_rtl::function__ErasedReturnType::get_string 7820 ns 7818 ns 89497 -bm_rtl::method____ErasedReturnType::get_string 7813 ns 7812 ns 89600 -bm_rtl::method____ErasedTargetType::get_string 6614 ns 6613 ns 105770 -bm_rtl::method____ErasedTargetAndReturnType::get_string 7815 ns 7814 ns 89559 +bm_rtl::function__ErasedReturnType::get_string 6639 ns 6639 ns 105406 +bm_rtl::method____ErasedReturnType::get_string 6631 ns 6632 ns 105574 +bm_rtl::method____ErasedTargetType::get_string 6627 ns 6628 ns 105646 +bm_rtl::method____ErasedTargetAndReturnType::get_string 6630 ns 6630 ns 105509 ----------------------------------- -[2025-11-04 12:37:18] >>> Run 3: workload scale = 150 +[2026-01-19 23:21:24] >>> Run 3: workload scale = 150 ======== RTL Benchmark Configuration ======== Workload: concatenate string of length 500 Scale : 150 iterations ============================================= -2025-11-04T12:37:18+05:30 +2026-01-19T23:21:24+05:30 Running ./bin/RTLBenchmarkApp Run on (16 X 800 MHz CPU s) CPU Caches: @@ -3128,40 +3128,40 @@ CPU Caches: L1 Instruction 32 KiB (x8) L2 Unified 1280 KiB (x8) L3 Unified 20480 KiB (x1) -Load Average: 1.04, 1.05, 1.01 +Load Average: 1.00, 1.00, 0.91 -------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::set_string 3521 ns 3520 ns 198831 +bm_call::direct__Function::set_string 3514 ns 3514 ns 199066 -bm_call::via_function_ptr__Function::set_string 3519 ns 3519 ns 199065 -bm_call::via_function_ptr____Method::set_string 3520 ns 3519 ns 198988 +bm_call::via_function_ptr__Function::set_string 3515 ns 3514 ns 199130 +bm_call::via_function_ptr____Method::set_string 3514 ns 3514 ns 199175 -bm_std::function_calls__Function::set_string 3529 ns 3528 ns 198384 -bm_std::function_calls____Method::set_string 3535 ns 3534 ns 198140 +bm_std::function_calls__Function::set_string 3526 ns 3526 ns 198508 +bm_std::function_calls____Method::set_string 3524 ns 3524 ns 198536 -bm_rtl::function_calls__Function::set_string 3529 ns 3529 ns 198462 -bm_rtl::method_calls______Method::set_string 3528 ns 3528 ns 198319 +bm_rtl::function_calls__Function::set_string 3516 ns 3516 ns 199092 +bm_rtl::method_calls______Method::set_string 3518 ns 3518 ns 198918 -bm_rtl::function__ErasedReturnType::set_string 3537 ns 3536 ns 197784 -bm_rtl::method____ErasedReturnType::set_string 3544 ns 3543 ns 197602 -bm_rtl::method____ErasedTargetType::set_string 3544 ns 3543 ns 197518 -bm_rtl::method____ErasedTargetAndReturnType::set_string 3547 ns 3546 ns 197510 +bm_rtl::function__ErasedReturnType::set_string 3539 ns 3539 ns 197865 +bm_rtl::method____ErasedReturnType::set_string 3540 ns 3540 ns 197836 +bm_rtl::method____ErasedTargetType::set_string 3579 ns 3579 ns 195608 +bm_rtl::method____ErasedTargetAndReturnType::set_string 3537 ns 3538 ns 198024 -------------------------------------------------------------------------------------------------- -bm_call::direct__Function::get_string 6791 ns 6789 ns 103143 +bm_call::direct__Function::get_string 6601 ns 6600 ns 106079 -bm_call::via_function_ptr__Function::get_string 6789 ns 6788 ns 103109 -bm_call::via_function_ptr____Method::get_string 6789 ns 6787 ns 103031 +bm_call::via_function_ptr__Function::get_string 6610 ns 6611 ns 105837 +bm_call::via_function_ptr____Method::get_string 6611 ns 6612 ns 105817 -bm_std::function_calls__Function::get_string 6785 ns 6783 ns 103175 -bm_std::function_calls____Method::get_string 6783 ns 6782 ns 103233 +bm_std::function_calls__Function::get_string 6605 ns 6603 ns 106033 +bm_std::function_calls____Method::get_string 6604 ns 6603 ns 105956 -bm_rtl::function_calls__Function::get_string 6792 ns 6791 ns 103075 -bm_rtl::method_calls______Method::get_string 6796 ns 6795 ns 103017 +bm_rtl::function_calls__Function::get_string 6609 ns 6609 ns 106000 +bm_rtl::method_calls______Method::get_string 6610 ns 6609 ns 105922 -bm_rtl::function__ErasedReturnType::get_string 7988 ns 7987 ns 87673 -bm_rtl::method____ErasedReturnType::get_string 7989 ns 7985 ns 87691 -bm_rtl::method____ErasedTargetType::get_string 6797 ns 6796 ns 103050 -bm_rtl::method____ErasedTargetAndReturnType::get_string 7990 ns 7988 ns 87626 +bm_rtl::function__ErasedReturnType::get_string 6632 ns 6632 ns 105525 +bm_rtl::method____ErasedReturnType::get_string 6634 ns 6633 ns 105489 +bm_rtl::method____ErasedTargetType::get_string 6622 ns 6622 ns 105723 +bm_rtl::method____ErasedTargetAndReturnType::get_string 6631 ns 6631 ns 105505 ----------------------------------- All benchmarks completed. From 9e84b274f86c053f35c9d1c67f8f64cd160bc694 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 12:09:27 +0530 Subject: [PATCH 012/102] added benchmark summary. --- README.md | 2 +- docs/benchmark_summary.md | 108 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 docs/benchmark_summary.md diff --git a/README.md b/README.md index 32afacb2..71e8e871 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Instances can be created on the `Heap` or `Stack` with automatic lifetime manage auto [err, robj] = personCtor(rtl::alloc::Stack, "John", 42); if (err != rtl::error::None) { std::cerr << rtl::to_string(err); } // Construction failed. ``` -The constructed object is returned wrapped in `rtl::RObject`. Heap-allocated objects are internally managed via `std::unique_ptr`, while stack-allocated objects are stored directly in `std::any`. +The constructed object is returned wrapped in `rtl::RObject`, which hides the concrete type of the underlying object. Heap-allocated objects are internally managed via `std::unique_ptr`, while stack-allocated objects are stored directly in `std::any`. Now, Lookup a member-function by name – ```c++ diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md new file mode 100644 index 00000000..f9dd920a --- /dev/null +++ b/docs/benchmark_summary.md @@ -0,0 +1,108 @@ +# RTL Performance Summary + +This document provides a concise, evidence-backed overview of the runtime performance characteristics of **RTL**, derived from systematic microbenchmarking across multiple workload scales, CPU frequencies, and representative API designs. + +## Benchmark Overview + +The benchmark measures the cost of invoking functions that perform simple but realistic string work. Two variants are evaluated using the types `std::string_view` and `std::string`. + +### Lightweight Workflow + +* The input string of length 500 is passed by value as `std::string_view`. + +* The function `set(std::string_view)` copies the argument. This copy is very lightweight, as it only contains a pointer and a size. + +* The actual work performed is concatenating the passed string into a global `std::string` for a given number of iterations (the workload scale). + +* The getter, `std::string_view get(std::string_view)`, follows the same flow, including the argument copy, and returns a `std::string_view` pointing to the globally stored string, which is again a lightweight object. + +### Heavy Workflow + +The dispatch setup of the heavy workflow is the same, except it uses `std::string` instead of `std::string_view`, which means: + +* The input string is passed by value as `std::string` and is copied on every call. Both `set` and `get` perform this copy operation for a 500-character string, typically involving heap allocation. + +* Each workload iteration concatenates this 500-character string into the global storage. + +* The getter `std::string get(std::string)`, returns a full `std::string` copy of the stored value, which again requires heap allocation. + +In both cases, the real work is dominated by string concatenation, allocation, and copying. +The benchmarks therefore highlight how different call paths—direct calls, `std::function`, `rtl::function`, and reflected calls—behave when meaningful work is present, rather than measuring dispatch overhead in isolation. + +Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* +> *All benchmarks were compiled with clang 21.1 using the compiler’s default optimization flags in release configuration.* + +## Results with `std::string_view` workflow + +#### Dispatch Overhead (Scale = 0) + +| Call Path | Typical Cost | +| ---------------- | ------------ | +| Direct call | ~9–13 ns | +| Function pointer | ~10–13 ns | +| `std::function` | ~10–13 ns | +| `rtl::function` | ~10–12 ns | +| RTL (erased) | ~14–32 ns | + +#### Moderate Workload (Scale = 5) + +| Call Path | Setter | Getter | +| ---------------- | ----------- | ----------- | +| Direct | ~114 ns | ~185–217 ns | +| Function pointer | ~114–115 ns | ~185–214 ns | +| `std::function` | ~115 ns | ~186–216 ns | +| `rtl::function` | ~113–114 ns | ~185–215 ns | +| RTL (erased) | ~117–123 ns | ~200–225 ns | + +#### Key Observations + +* `rtl::function` matches or outperforms `std::function`. +* Non-erased RTL calls are effectively zero-overhead. +* Erased return types introduce measurable but bounded overhead. +* Dispatch cost is quickly amortized once real work is present. + +## Results with `std::string` workflow + +#### Dispatch Overhead (Scale = 0) + +| Call Path | Typical Cost | +| ---------------- | ------------ | +| Direct call | ~9–13 ns | +| Function pointer | ~10–13 ns | +| `std::function` | ~10–13 ns | +| `rtl::function` | ~10–12 ns | +| RTL (erased) | ~14–32 ns | + +#### Heavy Workload (Scale = 25) + +| Call Path | Setter | Getter | +| ---------------- | ----------- | ----------- | +| Direct | ~348–362 ns | ~741–761 ns | +| Function pointer | ~354–355 ns | ~744–749 ns | +| `std::function` | ~348–362 ns | ~752–761 ns | +| `rtl::function` | ~356 ns | ~745 ns | +| RTL (erased) | ~355–363 ns | ~765–781 ns | + +#### Key Observations + +* Getter cost is significantly higher due to return-by-value. +* Memory allocation and copying dominate runtime. +* Reflection overhead becomes negligible in comparison. +* Even fully erased RTL calls remain within ~3–5% of direct calls. + +## Key Insights + +* `rtl::function` consistently matches or outperforms `std::function` across all workloads. +* Non-erased RTL calls behave like **near-zero-overhead abstractions**, comparable to raw function pointers. +* Type erasure introduces overhead, but the cost is **bounded and predictable**. +* Return-type erasure is more expensive than target-type erasure, especially for `std::string` return values. +* As workload size increases, **real work dominates dispatch overhead**. +* Memory allocation and string copying become the primary performance costs. +* Reflection does not distort scaling behavior or introduce nonlinear slowdowns. +* API design (value vs view semantics) has a larger performance impact than reflection itself. + +## Raw benchmark logs + +[benchmark_runs_string.log](docs/benchmark_runs_string.log) + +[benchmark_runs_string_view.log](docs/benchmark_runs_string_view.log) \ No newline at end of file From 1d126642b39a5cc1410a2c6189bde29c0276bb8b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 13:30:24 +0530 Subject: [PATCH 013/102] bm-summary corrections. --- docs/benchmark_summary.md | 118 ++++++++++++++++++++++---------------- 1 file changed, 67 insertions(+), 51 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index f9dd920a..ad64698d 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -1,79 +1,93 @@ -# RTL Performance Summary +# ⚡ RTL Performance Summary -This document provides a concise, evidence-backed overview of the runtime performance characteristics of **RTL**, derived from systematic microbenchmarking across multiple workload scales, CPU frequencies, and representative API designs. +This document provides a concise, evidence-backed overview of the runtime performance characteristics of **RTL**, derived from systematic microbenchmarking across multiple workload scales, CPU frequencies, and representative workload designs. -## Benchmark Overview +## 🧪 Benchmark Overview The benchmark measures the cost of invoking functions that perform simple but realistic string work. Two variants are evaluated using the types `std::string_view` and `std::string`. -### Lightweight Workflow +### Lightweight Workflow (`std::string_view`) * The input string of length 500 is passed by value as `std::string_view`. +* The function `set(std::string_view)` copies the argument (pointer + size only). +* The actual work is concatenating the passed string into a global `std::string` for a given number of iterations. +* The getter `std::string_view get(std::string_view)` returns a lightweight view of the stored string. -* The function `set(std::string_view)` copies the argument. This copy is very lightweight, as it only contains a pointer and a size. +### Heavy Workflow (`std::string`) -* The actual work performed is concatenating the passed string into a global `std::string` for a given number of iterations (the workload scale). +The dispatch setup is the same, except it uses `std::string` instead of `std::string_view`, which means: -* The getter, `std::string_view get(std::string_view)`, follows the same flow, including the argument copy, and returns a `std::string_view` pointing to the globally stored string, which is again a lightweight object. +* The input string is passed by value as `std::string` and copied on every call (heap allocation). +* Each workload iteration concatenates a 500-character string into the global storage. +* The getter `std::string get(std::string)` returns a full string copy (heap allocation). -### Heavy Workflow +In both cases, the real work is dominated by string concatenation, allocation, and copying. The benchmarks therefore highlight how different call paths behave when meaningful work is present, rather than measuring dispatch overhead in isolation. -The dispatch setup of the heavy workflow is the same, except it uses `std::string` instead of `std::string_view`, which means: +Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* -* The input string is passed by value as `std::string` and is copied on every call. Both `set` and `get` perform this copy operation for a 500-character string, typically involving heap allocation. +## 🖥️ Test Platform -* Each workload iteration concatenates this 500-character string into the global storage. +The benchmarks were executed on a modern multi-core x86_64 system with dynamic CPU frequency scaling. -* The getter `std::string get(std::string)`, returns a full `std::string` copy of the stored value, which again requires heap allocation. +**Hardware characteristics observed across runs:** -In both cases, the real work is dominated by string concatenation, allocation, and copying. -The benchmarks therefore highlight how different call paths—direct calls, `std::function`, `rtl::function`, and reflected calls—behave when meaningful work is present, rather than measuring dispatch overhead in isolation. +* **CPU:** 16 logical cores +* **Frequency:** ~800 MHz to ~4.8 GHz (dynamic scaling) +* **Cache hierarchy:** -Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* -> *All benchmarks were compiled with clang 21.1 using the compiler’s default optimization flags in release configuration.* + * L1 Data: 48 KiB × 8 + * L1 Instruction: 32 KiB × 8 + * L2 Unified: 1280 KiB × 8 + * L3 Unified: 20 MiB × 1 +* **Load average:** Typically below 1.0 +* All benchmarks were compiled with **clang 21.1** using default release optimizations. + +Multiple runs at different frequencies confirm that the relative performance trends are stable and not tied to a specific clock rate. -## Results with `std::string_view` workflow +## 🚀 Results with `std::string_view` Workflow -#### Dispatch Overhead (Scale = 0) +### Dispatch Overhead (Scale = 0) -| Call Path | Typical Cost | -| ---------------- | ------------ | -| Direct call | ~9–13 ns | -| Function pointer | ~10–13 ns | -| `std::function` | ~10–13 ns | -| `rtl::function` | ~10–12 ns | -| RTL (erased) | ~14–32 ns | +| Call Path | Setter | Getter | +| ---------------- | ----------- | ------------ | +| Direct | ~0.6–1.4 ns | ~1.4 ns | +| Function pointer | ~1.0–2.6 ns | ~2.4–2.6 ns | +| `std::function` | ~1.2–3.2 ns | ~2.4–3.2 ns | +| `rtl::function` | ~1.0–2.7 ns | ~2.2–2.7 ns | +| RTL (erased) | ~3.0–8.6 ns | ~6.7–15.5 ns | -#### Moderate Workload (Scale = 5) +> **RTL (erased)** refers to fully type-erased calls where the target and/or return type are erased at runtime. + +### Moderate Workload (Scale = 20–25) | Call Path | Setter | Getter | | ---------------- | ----------- | ----------- | -| Direct | ~114 ns | ~185–217 ns | -| Function pointer | ~114–115 ns | ~185–214 ns | -| `std::function` | ~115 ns | ~186–216 ns | -| `rtl::function` | ~113–114 ns | ~185–215 ns | -| RTL (erased) | ~117–123 ns | ~200–225 ns | +| Direct | ~266–290 ns | ~365–366 ns | +| Function pointer | ~266–268 ns | ~365–366 ns | +| `std::function` | ~264–268 ns | ~365–368 ns | +| `rtl::function` | ~264 ns | ~366 ns | +| RTL (erased) | ~270–275 ns | ~375–378 ns | -#### Key Observations +### Key Observations * `rtl::function` matches or outperforms `std::function`. * Non-erased RTL calls are effectively zero-overhead. * Erased return types introduce measurable but bounded overhead. * Dispatch cost is quickly amortized once real work is present. -## Results with `std::string` workflow +## 🧱 Results with `std::string` Workflow -#### Dispatch Overhead (Scale = 0) +### Dispatch Overhead (Scale = 0) -| Call Path | Typical Cost | -| ---------------- | ------------ | -| Direct call | ~9–13 ns | -| Function pointer | ~10–13 ns | -| `std::function` | ~10–13 ns | -| `rtl::function` | ~10–12 ns | -| RTL (erased) | ~14–32 ns | +| Call Path | Setter | Getter | +| ---------------- | ------------- | ------------- | +| Direct | ~9.7–9.8 ns | ~12.7–12.8 ns | +| Function pointer | ~10.5–10.7 ns | ~12.5–12.7 ns | +| `std::function` | ~10.6–10.7 ns | ~12.5–13.2 ns | +| `rtl::function` | ~10.1–10.5 ns | ~12.1–12.5 ns | +| RTL (erased) | ~13.5–15.3 ns | ~24.9–32.2 ns | -#### Heavy Workload (Scale = 25) +### Heavy Workload (Scale = 25) | Call Path | Setter | Getter | | ---------------- | ----------- | ----------- | @@ -83,26 +97,28 @@ Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* | `rtl::function` | ~356 ns | ~745 ns | | RTL (erased) | ~355–363 ns | ~765–781 ns | -#### Key Observations +### Key Observations * Getter cost is significantly higher due to return-by-value. * Memory allocation and copying dominate runtime. * Reflection overhead becomes negligible in comparison. * Even fully erased RTL calls remain within ~3–5% of direct calls. -## Key Insights +## 📌 Key Insights * `rtl::function` consistently matches or outperforms `std::function` across all workloads. -* Non-erased RTL calls behave like **near-zero-overhead abstractions**, comparable to raw function pointers. -* Type erasure introduces overhead, but the cost is **bounded and predictable**. +* Non-erased RTL calls behave like near-zero-overhead abstractions, comparable to raw function pointers. +* Type erasure introduces overhead, but the cost is bounded and predictable. * Return-type erasure is more expensive than target-type erasure, especially for `std::string` return values. -* As workload size increases, **real work dominates dispatch overhead**. +* As workload size increases, real work dominates dispatch overhead. * Memory allocation and string copying become the primary performance costs. * Reflection does not distort scaling behavior or introduce nonlinear slowdowns. -* API design (value vs view semantics) has a larger performance impact than reflection itself. +* The value vs view semantics have a larger performance impact than reflection itself. + +## 📂 Raw Benchmark Logs -## Raw benchmark logs +[benchmark_runs_string.log](benchmark_runs_string.log) -[benchmark_runs_string.log](docs/benchmark_runs_string.log) +[benchmark_runs_string_view.log](benchmark_runs_string_view.log) -[benchmark_runs_string_view.log](docs/benchmark_runs_string_view.log) \ No newline at end of file +These logs contain the full per-scale measurements for all dispatch paths, including multiple runs at different CPU frequencies to validate consistency. \ No newline at end of file From 1997f6590f96777120a767315bfa2365018ecb0e Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 13:38:38 +0530 Subject: [PATCH 014/102] corrections. --- docs/benchmark_summary.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index ad64698d..a47d0af4 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -1,27 +1,28 @@ # ⚡ RTL Performance Summary -This document provides a concise, evidence-backed overview of the runtime performance characteristics of **RTL**, derived from systematic microbenchmarking across multiple workload scales, CPU frequencies, and representative workload designs. +This document provides a concise, evidence-backed overview of the runtime performance characteristics of **RTL**, derived from systematic microbenchmarking across multiple workload scales, CPU frequencies, and typical real-world C++ usage patterns. ## 🧪 Benchmark Overview The benchmark measures the cost of invoking functions that perform simple but realistic string work. Two variants are evaluated using the types `std::string_view` and `std::string`. -### Lightweight Workflow (`std::string_view`) +### Lightweight Workflow * The input string of length 500 is passed by value as `std::string_view`. -* The function `set(std::string_view)` copies the argument (pointer + size only). -* The actual work is concatenating the passed string into a global `std::string` for a given number of iterations. -* The getter `std::string_view get(std::string_view)` returns a lightweight view of the stored string. +* The function `set(std::string_view)` copies the argument. This copy is very lightweight, as it only contains a pointer and a size. +* The actual work performed is concatenating the passed string into a global `std::string` for a given number of iterations (the workload scale). +* The getter, `std::string_view get(std::string_view)`, follows the same flow, including the argument copy, and returns a `std::string_view` pointing to the globally stored string, which is again a lightweight object. -### Heavy Workflow (`std::string`) +### Heavy Workflow -The dispatch setup is the same, except it uses `std::string` instead of `std::string_view`, which means: +The dispatch setup of the heavy workflow is the same, except it uses `std::string` instead of `std::string_view`, which means: -* The input string is passed by value as `std::string` and copied on every call (heap allocation). -* Each workload iteration concatenates a 500-character string into the global storage. -* The getter `std::string get(std::string)` returns a full string copy (heap allocation). +* The input string is passed by value as `std::string` and is copied on every call. Both `set` and `get` perform this copy operation for a 500-character string, typically involving heap allocation. +* Each workload iteration concatenates this 500-character string into the global storage. +* The getter `std::string get(std::string)`, returns a full `std::string` copy of the stored value, which again requires heap allocation. -In both cases, the real work is dominated by string concatenation, allocation, and copying. The benchmarks therefore highlight how different call paths behave when meaningful work is present, rather than measuring dispatch overhead in isolation. +In both cases, the real work is dominated by string concatenation, allocation, and copying. +The benchmarks therefore highlight how different call paths – direct calls, `std::function`, and reflected(`rtl::function`/`rtl::method`) calls—behave when meaningful work is present, rather than measuring dispatch overhead in isolation. Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* From 7f39473893156a60dac97b425a609d8792e61e75 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 13:58:14 +0530 Subject: [PATCH 015/102] Readme update. --- README.md | 2 +- docs/benchmark_summary.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 71e8e871..e2b01d1a 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Zero-Overhead by Design*** – Metadata can be registered and resolved lazily. Reflection introduces no runtime cost beyond the features explicitly exercised by the user. -* ***Cross-Compiler Consistency*** – Implemented entirely in standard C++20, with no compiler extensions or compiler-specific conditional behavior. +* ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. [Benchmark Summary](docs/benchmark_summary.md) * ***Tooling-Friendly Architecture*** – Reflection metadata is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index a47d0af4..edf888b5 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -4,7 +4,7 @@ This document provides a concise, evidence-backed overview of the runtime perfor ## 🧪 Benchmark Overview -The benchmark measures the cost of invoking functions that perform simple but realistic string work. Two variants are evaluated using the types `std::string_view` and `std::string`. +The benchmark measures the cost of invoking functions that perform simple but realistic `string` work. Two variants are evaluated using the types `std::string_view` and `std::string`. ### Lightweight Workflow @@ -22,11 +22,11 @@ The dispatch setup of the heavy workflow is the same, except it uses `std::strin * The getter `std::string get(std::string)`, returns a full `std::string` copy of the stored value, which again requires heap allocation. In both cases, the real work is dominated by string concatenation, allocation, and copying. -The benchmarks therefore highlight how different call paths – direct calls, `std::function`, and reflected(`rtl::function`/`rtl::method`) calls—behave when meaningful work is present, rather than measuring dispatch overhead in isolation. +The benchmarks therefore highlight how different call paths – direct calls, `std::function`, and reflected(`rtl::function`/`rtl::method`) calls behave when meaningful work is present, rather than measuring dispatch overhead in isolation. Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* -## 🖥️ Test Platform +## 🖥️ Test Platform (Linux) The benchmarks were executed on a modern multi-core x86_64 system with dynamic CPU frequency scaling. @@ -41,7 +41,7 @@ The benchmarks were executed on a modern multi-core x86_64 system with dynamic C * L2 Unified: 1280 KiB × 8 * L3 Unified: 20 MiB × 1 * **Load average:** Typically below 1.0 -* All benchmarks were compiled with **clang 21.1** using default release optimizations. +* All benchmarks were compiled with `clang 21` using default release optimizations. Multiple runs at different frequencies confirm that the relative performance trends are stable and not tied to a specific clock rate. From 8e292ac22d2f6a284a830b265ebfd43c24c40844 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 14:00:40 +0530 Subject: [PATCH 016/102] Readme update. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e2b01d1a..6ab951c2 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,9 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Zero-Overhead by Design*** – Metadata can be registered and resolved lazily. Reflection introduces no runtime cost beyond the features explicitly exercised by the user. -* ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. [Benchmark Summary](docs/benchmark_summary.md) +* ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. + +[Benchmark Summary](docs/benchmark_summary.md) * ***Tooling-Friendly Architecture*** – Reflection metadata is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. From f70895e5f89c9352f9efc961d117f338da5fafd7 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 14:01:53 +0530 Subject: [PATCH 017/102] Readme update. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6ab951c2..40c1ac5f 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. -[Benchmark Summary](docs/benchmark_summary.md) + [Benchmark Summary](docs/benchmark_summary.md) * ***Tooling-Friendly Architecture*** – Reflection metadata is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. From a941ff32e64ecf9516ca56b6fa9672c382619562 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 14:03:30 +0530 Subject: [PATCH 018/102] Readme update. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 40c1ac5f..ac195bf3 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,7 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Zero-Overhead by Design*** – Metadata can be registered and resolved lazily. Reflection introduces no runtime cost beyond the features explicitly exercised by the user. -* ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. - - [Benchmark Summary](docs/benchmark_summary.md) +* ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. *([Benchmark Summary](docs/benchmark_summary.md))* * ***Tooling-Friendly Architecture*** – Reflection metadata is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. From d31b0c124ba4622275c0cb54ac3c8a533cf2b74c Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 16:18:25 +0530 Subject: [PATCH 019/102] adding benchmark images. --- docs/images/1768905617178.jpg | Bin 0 -> 27191 bytes docs/images/1768905625451.jpg | Bin 0 -> 33551 bytes docs/images/1768905631690.jpg | Bin 0 -> 35098 bytes docs/images/1768905639254.jpg | Bin 0 -> 27433 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/1768905617178.jpg create mode 100644 docs/images/1768905625451.jpg create mode 100644 docs/images/1768905631690.jpg create mode 100644 docs/images/1768905639254.jpg diff --git a/docs/images/1768905617178.jpg b/docs/images/1768905617178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cf03f9f5f97e6dfa4c53be446a36386bd5fd046 GIT binary patch literal 27191 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 literal 0 HcmV?d00001 diff --git a/docs/images/1768905625451.jpg b/docs/images/1768905625451.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1211f3c5922f5c45fae6b31da316548940cc47b0 GIT binary patch literal 33551 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 literal 0 HcmV?d00001 diff --git a/docs/images/1768905639254.jpg b/docs/images/1768905639254.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5c0090c87c0a1d04bc8a2166d7d77fd6468749e GIT binary patch literal 27433 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

JY{P;Psv57&Vh0ZlT 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 C-o}6c diff --git a/docs/images/string_micro_bm.png b/docs/images/string_micro_bm.png new file mode 100644 index 0000000000000000000000000000000000000000..cce074d1f0badcec74416797953d3d6c1bbaff8e GIT binary patch literal 100402 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 z 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

J5t{C3{k2>GJ{Vh-d`^oC0Md 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 Z^C32tv|YF8`~TAS^mUA>#e41l`5#>D@r(cf literal 0 HcmV?d00001 diff --git a/docs/images/string_view_micro_bm.png b/docs/images/string_view_micro_bm.png new file mode 100644 index 0000000000000000000000000000000000000000..dc74fbb96d6a4d632e49186260adae3aa7aadd04 GIT binary patch literal 98069 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 literal 0 HcmV?d00001 diff --git a/docs/images/string_view_workload_bm.png b/docs/images/string_view_workload_bm.png new file mode 100644 index 0000000000000000000000000000000000000000..c839aa1e4c39b297ee0cb93c7d1021b20106e48f GIT binary patch literal 162119 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

er=M59n>-K_fuua@?04xh-qB4weY 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≪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

Em2)WpAjROJ(96~*A*k=!W1cC4B&#> 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 Date: Tue, 20 Jan 2026 16:31:02 +0530 Subject: [PATCH 021/102] visual bms added. --- docs/benchmark_summary.md | 48 +++++++++++++-------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index edf888b5..1a3e2567 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -49,25 +49,17 @@ Multiple runs at different frequencies confirm that the relative performance tre ### Dispatch Overhead (Scale = 0) -| Call Path | Setter | Getter | -| ---------------- | ----------- | ------------ | -| Direct | ~0.6–1.4 ns | ~1.4 ns | -| Function pointer | ~1.0–2.6 ns | ~2.4–2.6 ns | -| `std::function` | ~1.2–3.2 ns | ~2.4–3.2 ns | -| `rtl::function` | ~1.0–2.7 ns | ~2.2–2.7 ns | -| RTL (erased) | ~3.0–8.6 ns | ~6.7–15.5 ns | +

+ +

> **RTL (erased)** refers to fully type-erased calls where the target and/or return type are erased at runtime. -### Moderate Workload (Scale = 20–25) +### Moderate Workload (Scale = 0–150) -| Call Path | Setter | Getter | -| ---------------- | ----------- | ----------- | -| Direct | ~266–290 ns | ~365–366 ns | -| Function pointer | ~266–268 ns | ~365–366 ns | -| `std::function` | ~264–268 ns | ~365–368 ns | -| `rtl::function` | ~264 ns | ~366 ns | -| RTL (erased) | ~270–275 ns | ~375–378 ns | +

+ +

### Key Observations @@ -80,23 +72,15 @@ Multiple runs at different frequencies confirm that the relative performance tre ### Dispatch Overhead (Scale = 0) -| Call Path | Setter | Getter | -| ---------------- | ------------- | ------------- | -| Direct | ~9.7–9.8 ns | ~12.7–12.8 ns | -| Function pointer | ~10.5–10.7 ns | ~12.5–12.7 ns | -| `std::function` | ~10.6–10.7 ns | ~12.5–13.2 ns | -| `rtl::function` | ~10.1–10.5 ns | ~12.1–12.5 ns | -| RTL (erased) | ~13.5–15.3 ns | ~24.9–32.2 ns | - -### Heavy Workload (Scale = 25) - -| Call Path | Setter | Getter | -| ---------------- | ----------- | ----------- | -| Direct | ~348–362 ns | ~741–761 ns | -| Function pointer | ~354–355 ns | ~744–749 ns | -| `std::function` | ~348–362 ns | ~752–761 ns | -| `rtl::function` | ~356 ns | ~745 ns | -| RTL (erased) | ~355–363 ns | ~765–781 ns | +

+ +

+ +### Heavy Workload (Scale = 0-150) + +

+ +

### Key Observations From 28a8bd8a6d2eb524cdc2655fbb9ff4b08279a2ee Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 16:35:48 +0530 Subject: [PATCH 022/102] image adjustment --- docs/benchmark_summary.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index 1a3e2567..9968277c 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -49,17 +49,13 @@ Multiple runs at different frequencies confirm that the relative performance tre ### Dispatch Overhead (Scale = 0) -

- -

+ > **RTL (erased)** refers to fully type-erased calls where the target and/or return type are erased at runtime. ### Moderate Workload (Scale = 0–150) -

- -

+ ### Key Observations @@ -72,15 +68,11 @@ Multiple runs at different frequencies confirm that the relative performance tre ### Dispatch Overhead (Scale = 0) -

- -

+ ### Heavy Workload (Scale = 0-150) -

- -

+ ### Key Observations From e14d8ce0bebf08272d619bfba97414c261faca70 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 20 Jan 2026 16:58:09 +0530 Subject: [PATCH 023/102] Update benchmark_summary.md --- docs/benchmark_summary.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index 9968277c..0024947c 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -19,7 +19,7 @@ The dispatch setup of the heavy workflow is the same, except it uses `std::strin * The input string is passed by value as `std::string` and is copied on every call. Both `set` and `get` perform this copy operation for a 500-character string, typically involving heap allocation. * Each workload iteration concatenates this 500-character string into the global storage. -* The getter `std::string get(std::string)`, returns a full `std::string` copy of the stored value, which again requires heap allocation. +* The getter `std::string get(std::string)`, returns a full `std::string` copy of the accumulated global string, which grows in size with the workload and requires heap allocation. In both cases, the real work is dominated by string concatenation, allocation, and copying. The benchmarks therefore highlight how different call paths – direct calls, `std::function`, and reflected(`rtl::function`/`rtl::method`) calls behave when meaningful work is present, rather than measuring dispatch overhead in isolation. @@ -98,4 +98,4 @@ Multiple runs at different frequencies confirm that the relative performance tre [benchmark_runs_string_view.log](benchmark_runs_string_view.log) -These logs contain the full per-scale measurements for all dispatch paths, including multiple runs at different CPU frequencies to validate consistency. \ No newline at end of file +These logs contain the full per-scale measurements for all dispatch paths, including multiple runs at different CPU frequencies to validate consistency. From 58bdf2a5af904fb572ae80775e3af1001fe99238 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 20 Jan 2026 17:06:58 +0530 Subject: [PATCH 024/102] Update benchmark_summary.md --- docs/benchmark_summary.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index 0024947c..8bc0d828 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -51,13 +51,13 @@ Multiple runs at different frequencies confirm that the relative performance tre -> **RTL (erased)** refers to fully type-erased calls where the target and/or return type are erased at runtime. +> **RTL (erased)** refers to fully type-erased calls where the target and return type are erased at runtime. ### Moderate Workload (Scale = 0–150) - + -### Key Observations +### Observations * `rtl::function` matches or outperforms `std::function`. * Non-erased RTL calls are effectively zero-overhead. @@ -72,9 +72,9 @@ Multiple runs at different frequencies confirm that the relative performance tre ### Heavy Workload (Scale = 0-150) - + -### Key Observations +### Observations * Getter cost is significantly higher due to return-by-value. * Memory allocation and copying dominate runtime. From 0f9cc724ccbdff99cd54ec9471d64a774689c1cb Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 17:53:12 +0530 Subject: [PATCH 025/102] docs correction, updates. --- README.md | 2 + docs/RTL_SYNTAX_AND_SEMANTICS.md | 68 ++++++------------------ docs/images/string_view_workload_bm.png | Bin 162119 -> 178990 bytes docs/images/string_workload_bm.png | Bin 167200 -> 180893 bytes 4 files changed, 19 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index ac195bf3..74eac01f 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,8 @@ if (err == rtl::error::None && ret.canViewAs()) { ``` ### How RTL Fits Together +[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) +  [![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index b1487991..a2acde7a 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -16,15 +16,14 @@ This guide walks you step by step through RTL’s reflection syntax. * [Binding an Object and Calling 🔗](#binding-an-object-and-calling) * [Binding Signatures and Perfect Forwarding 🎯](#binding-signatures-and-perfect-forwarding) * [Const vs Non-Const Method Binding ⚡](#const-vs-non-const-method-binding) -4. [Const-by-Default Discipline 🛡️](#const-by-default-discipline) -5. [Reflective Construction and Destruction 🏗️](#reflective-construction-and-destruction) -6. [Move Semantics in RTL 🔀](#move-semantics-in-rtl) +4. [Reflective Construction and Destruction 🏗️](#reflective-construction-and-destruction) +5. [Move Semantics in RTL 🔀](#move-semantics-in-rtl) --- ## Building the Mirror 🪞 -Before registering anything, you need a central place to hold all reflection metadata: the `rtl::CxxMirror`. You can create an instance, passing all type metadata through an initializer list — each type obtained via `rtl::type()`. +Before registering anything, you need a central place to hold all reflection metadata references: the `rtl::CxxMirror`. You can create an instance, passing all type metadata through an initializer list — each type obtained via `rtl::type()`. ```cpp auto cxx_mirror = rtl::CxxMirror({ @@ -32,25 +31,25 @@ Before registering anything, you need a central place to hold all reflection met }); ``` -Every registration statement you add here is collected into the `rtl::CxxMirror` as an `rtl::Function` object. The `CxxMirror` forms the backbone of RTL. Every type, function, or method you register ultimately gets encapsulated into this single object, serving as the gateway to query, introspect, and instantiate all registered types at runtime. +Every registration statement you add here is collected into the `rtl::CxxMirror` as an `rtl::Function` object. The `CxxMirror` is an access-interface of RTL. Every type, function, or method you register, the metadata references gets encapsulated into this single object, serving as the gateway to query, introspect, and instantiate all registered types at runtime. ### A few key points about managing this object * ***Dispensable by design*** → The `CxxMirror` itself carries no hidden global state. You can define one central mirror, create multiple mirrors in different scopes, or even rebuild mirrors on demand. RTL imposes no restriction on how you manage its lifetime. -* ***Duplicate registration is harmless*** → Identical registrations always materialize the same metadata. If a canonical function pointer is already registered, it is not added again to the lambda/functor table — the metadata simply refers back to the existing entry. +* ***Duplicate registration is harmless*** → Identical registrations always materialize the same metadata. If a canonical function pointer is already registered, it is not added again to the metadata cache — it simply refers back to the existing entry. * ***Thread-safety guaranteed by RTL*** → No matter how you choose to manage mirrors (singleton, multiple, or transient), RTL itself guarantees synchronized, race-free registration and access across threads. * ***Overhead is deliberate*** → Each registration carries a small cost in memory and initialization time. Concretely: - * Every registration statement acquires a lock on the functor table. - * It checks whether the function or lambda is already present. - * If not, it adds the new entry to the lambda table and updates the functor table. + * Every registration statement acquires a lock on the metadata cache. + * It checks whether the function-pointer is already present. + * If not, it adds the new entry to the metadata cache. -This ensures thread-safety and prevents redundant entries. While negligible for isolated registrations, this cost can accumulate when creating many mirrors or registering large numbers of types. +This ensures thread-safety and prevents redundant entries. While negligible for isolated registrations, this cost can accumulate when initializing many mirrors in hot loops or same again and again. 👉 Bottom Line -> *"Manage `CxxMirror` however your design requires — singleton, multiple, or transient. Each registration incurs a lock and table lookup, but the cost is negligible in normal use and only noticeable when scaling to very large numbers of types."* +> *"Manage `CxxMirror` however your design requires — singleton, multiple, or transient. Each registration incurs a lock and table lookup, but the cost is negligible in normal use and only exists at initialization time."* --- @@ -146,7 +145,6 @@ if (popMessage) // function exists, safe to invoke } ``` - ---
@@ -155,6 +153,7 @@ if (popMessage) Once you have a `rtl::Function`, a complete reflective call involves two steps: +[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] ```cpp auto [err, retObj] = popMessage->bind().call(); ``` @@ -235,6 +234,7 @@ if (classPerson) ### Binding an Object and Calling 🔗 +[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] ```cpp auto [err, retObj] = setProfile->bind(targetObj).call(std::string("Developer")); ``` @@ -257,6 +257,7 @@ Errors specific to member function calls: ### Binding Signatures and Perfect Forwarding 🎯 +[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] ```cpp setProfile->bind(targetObj).call(10); // 10 forwarded as int setProfile->bind(targetObj).call(10); // 10 forwarded as double (10.0) @@ -276,6 +277,7 @@ setProfile->bind(targetObj).call(10); // compile-time error ### Const vs Non-Const Method Binding ⚡ +[THIS SECTION NEEDS TO BE UPDATED AS PER THE NEW CALLABLES] When binding methods reflectively, RTL enforces const-correctness in a way that mirrors C++ itself, but with an extra layer of runtime safety. Let’s walk through how this works. #### Default Behavior @@ -292,6 +294,7 @@ auto [err, ret] = someMethod->bind(robj).call(); #### Choosing the Non-Const Path +[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] Sometimes you really do want the non-const overload. RTL requires you to be explicit in that case, by using `rtl::constCast()`: ```cpp @@ -346,45 +349,6 @@ bool safe = robj.isConstCastSafe(); --- - -## Const-by-Default Discipline 🛡️ - -C++ treats **const** as a contract: a `const` object can only invoke `const` methods, and any attempt to mutate it without an explicit `const_cast` leads to undefined behavior. A non-const object, by contrast, freely chooses non-const overloads but can fall back to const ones when needed. - -RTL mirrors this model but strengthens it with **provenance-aware constness**. In other words, RTL distinguishes between objects it created itself and objects provided externally, applying rules that match their origin. - -### Two Kinds of Constness in RTL - -* **Logically-Const (RTL-Created)** - - * Objects constructed reflectively—whether on the stack or heap—are treated as *const-first*. - * If a non-const overload is the only option, RTL may safely apply an internal `const_cast` because these objects were never originally declared `const`. - * Users can still opt into non-const explicitly via `rtl::constCast()` if both overloads exist. - -* **True-Const (Externally Provided)** - - * Objects passed into RTL with declared `const` remain **strictly const**. - * RTL will never cast them internally, ensuring you can’t accidentally mutate something the compiler itself forbids. - * Missing const overloads result in `rtl::error::ConstOverloadMissing`. Forcing a non-const call results in `rtl::error::IllegalConstCast`. - -### Quick Comparison - -| Case | Native C++ | RTL Behavior | -| -------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Const object** | Only const overload allowed; non-const requires cast; mutation is UB. | **True-const**: only const overload allowed; missing const → `ConstOverloadMissing`; forcing non-const → `IllegalConstCast`. | -| **Non-const object** | Prefers non-const overload, but may call const if that’s the only one. | **Logically-const**: defaults to const; missing const but non-const present → safe fallback; both present → explicit non-const via `rtl::constCast()`. | - -✅ Key Takeaway - -RTL codifies C++’s const rules at runtime: - -* **True-const** objects are strictly immutable. -* **Logically-const** objects default to immutability but can be safely relaxed when overload resolution requires it. - -This makes overload resolution **predictable, safe, and explicit**, giving you runtime reflection that behaves like C++—but with added clarity. - ---- - ## Reflective Construction and Destruction 🏗️ @@ -398,6 +362,7 @@ To construct a reflected object, first grab the `Record` that represents the typ std::optional classPerson = cxx::mirror().getRecord("Person"); // Default constructor — create on heap +[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] auto [err, person] = classPerson->create(); if (err == rtl::error::None) { @@ -405,6 +370,7 @@ if (err == rtl::error::None) } // Overloaded constructor — this time create on stack +[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] auto [err, person] = classPerson->create( std::string("John Doe"), 42 diff --git a/docs/images/string_view_workload_bm.png b/docs/images/string_view_workload_bm.png index c839aa1e4c39b297ee0cb93c7d1021b20106e48f..c522823dfae493e159385a53e347a350da721f4f 100644 GIT binary patch literal 178990 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%0AUU&Ixi3VK65HRaiFX}boXovU7q&ia)ly3 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 z zzdZIOKVNp^QoF$sL&``0(4_NTU{M?VW@W}Wfo~RSEGa2QC;(v%TME(t8@M$wVo~Ht zI6CM}MlFvN2X2`)DfEPKdHF2f_3AS#46CFY*++5uV4`-({+5J*%cGtv@g#r;8ypR< zAvYN|!|V9?V5oC%<sJ{W=n5Ii9B_n!nmJUzr~_RN5-M9$NbJ|+zFR-Y4{GKq2*vT!HN5v{ z_f?~pm(FvZJ)AS6c4Np-gt!l`UxY}(?UV!p2YGL#N-+_>@@a!>Rh=DfCqKyT(Ke5_%3Y%y}TKazxZWJtZ<^OvPRj&Wu-G7V5CIMPv*xx?lakb^G4y)~a&OD{^2hLBQ_faibRG-DWSh<_} z8}~8e^Qr%{zyAw8q+hb8pj4dw4VO%S`##>Z_hdPPsr!Oo&a#!r8x4(x>kOtC4JM~M zm#`_nROz-#RYSXRsDmykYK~5=&$5TCsx9bJ1&FGzdIaPAgd9xOS^?b;0t;USW!z_2 zW}_-m&Dcv19RNFF!4C0Ho91xw!Tx!>DfD-H2&K4WCb1a_$=5v!Ogt+?G`=GCbca`p zJ8{SFkzep#Lzn%bw-2T`-;E{Ll2-DxD9iHsnU#+n9vuN+d6QRF7H9E3+v0+n{XaXj z*=ah9d6B7_GPjQ$z(eONF)oq}jeM56?BoH&?jL8o@a%RCG5NFqQkHXYnm!aze4 z;&?$KPYX=+g5hihfdUmF8uaJj;Mnx6iMGE1`trU?2LNjza{?YAz!3(*UY!AIi4`Ls z9cn{Nu`r$r{vk25^`YjPbpmjWdig?D9OosUCJ1XldxysEKp+9FAnXGbFhZ4(pogCU zAY<|O&V2de#S4f4gu+U0Xb0pFc1Abi6BFHn&GropRckYDSqJW>YiuSfHF*@m! z+yJ(Tp~L4Z@L^9t`q(yp2zhXq20f?UR6b&|AXWaT-@uJ2N;K0A^4vg@ z441V4F&1Jck(OZK03jTao%0aBi1>kbO0nLDx#wik)mt457zpSJBtQxd-=&VG<_GI< zZ!>G$RY0;#jH}?|Bdt$Y0HZVzN2YUiUtX^G7vtrCm#JfzE1 zowwl2(buO>3RK*bgmyA33uEbE61V}pJUksP=XAWiPjZ!GO4Ft%$H!N<+~6nh)c|Sx zLt0=9>KG>dcIkoNMn){E#=R{*rJg&CV7SpG%ko?^)qLw!zmLblf@0C)Z zi;9YX=vNTLa>;ECVyK=1kq0PuQ;oMAjlppbL7-MZ$Z2R?RmMRn4bSR(@@M2LFv1Y| zYO@|{qzN3Wa~mP#&I%l?zAnez01sx+e|msX$ZPtku4b=P+J8a2FhHECmf4xeDSL5_ zWk5SJ{OSd5>SJMink(e^_~`0_;6?K>Dfu3N7@w1*PQIL-<}c;@%A1MV$^YrTeiJbH zjWMOR` zojy=`!;u4Yn7<41wu0uRQE(Fl(h$72^>ti?lA1bFjD??{0vVW?kb3l5ywe^WnzVi? z3_01_^7fRGhA8N3-5C<>JU%D9dhgyUUohw7++tC zvgoo;?VR5drc@kUaq=huL&d9M+rmILCT@K>2*-g(2+nhJj!B^?c#vD)&oHK_oB9^N zgekG1mUSngA`GfXN*;-RNSmY*{5?9G17cxOb*;0T-(S+!&eE1FyVSa;GutcLUcyFz zLxA{|WDVnEJzcgF;|SY!lLAg3Id)jK7s<`ea8t2t<(F3m)IJYXQ7{eJIc27O%o4I1 z7Clyws<SK`N{2P&UUW1D*{Z686Z1 z7$f@%R*Ui<>$UNHsaWqdKIR4~H{MQnI~ct*e3bA3@5d-f9(&`^is^lq-`>m0SlmDl z9rwV%xG<#@3GBo9y2iI?2!S^&d(S?Q{V#^%;IWn=O8?U4Om;yRku>cSZBp5_J)%)* zP%%j6>-!}fvw2g{uiZYi;{11zA>}o~+3gNT5uAc`AXZ`x?CtFZ_O9rp(-7n^k^*Wj z&C2?4#~pZL5M@wbxU|*K9-+qXEHU}Qc^>HBfIK0H965*$%F4@C+3wodysP+>m|Xye z3jRZ9=gNwOcouxX;vu2}=oHl9iXP(7W%PA-LoERmU87d;4+MsPe0)5Zdw)&4_KCPbF1c~r2xvo5C&RZJvzU&PY>Mqdqp}`6%}G> zYM;@L+Q5L*FZu{xDFUXn=5Rz_09V{d!HS5$xE1CbK>q@3jpk;#&o;n8)6?U4y0{?Bb@l4Q`yW4i(DVqW#%AT_ zehRM>3NfhdUV~m7rtH?>;CuIO%t$GSU)W-Vg@kT>u42K54+I<%AsP}!!mqP#=b=ql zd(GdKlOh){yy0+UL81_p-u;IFu*@ZEkzsgVbQ zXKP|&BFsnXjdcbftjtPqoMSwWK$NOG`gOCEyf#*G_o%lN|d5mWd$2oyvpDPM48SiunJ zzz-sikBhTsT(WWdg0HHg5}U0c@iMyrygH*g?>=|{UaY`~r;m7(muGe(@DMkd@<#&& zCw>d8m0bL|V9h#;UksL7mPbkjEchU|xmT#&&@0W)uNgJ~yta8o_+4;j1^Rf^ScaJV z)v!7DhBt4Ne&F_1{Q+Jn`;{y1mxdWE|2`ueg+CqK4Gq(FisvE*2K^TqvI1DZ4Yr(X zb^LN2g~Y{y-!7i;$0Mb=xq%O9jTLMI!CB$6Mv)G<6pV?=D{8{`4!3;lw4(~_68Ji+L(GQ4g8PAt7(j zFOST1jz&+}gV zNh)xXiKM9J(Tg&K!(YUFDF0~UFmk>(f{*8cP-|&K?GOEpYih5)aaTVsqn~~?5N!sh z>*`2JhK%p&7O8A0-uKE8qa)yEUjToJw&l1Dd1Ay*sEmi3+o05>8N5puFF0&(w-E7y z7`xST6EI07#)08s?8wRra)jlGmmK^kMGk-Zv{?$>_WU*<+OuG7Wd&@uD^u<~ZeJ%S zp|C=8%>J8G@(;NGB71aTfIM^KXF%(-Pa8^{79yqci^-&H^K;~k^}m*vS)8@;{hL;t zUJqj~4QE3<)DsajA_rfUzdr`l@ej+#?9{li&Vx%#^)dqxbw%KIsQS zatpuAYgYq2k8QXTuy)@)v9 ze;rY^*4DtN9TQRd(j)uD3XK*|1fnW9_+meqKbGXrR`k07&02$zG?(O@nv+$Il z?Oq><<<1RkC}2OKz{Xfozl0!wK%p48fJmXv&GonGj|K`cr^cK^4G>ak$rhdU=X(VU zv&EZmlfsG1-uv&78W}kljmB+R;AuTZnx!gnn;DzVDQW$EU3fT>O;^K5jbV7nFSbf1qAr5!rR}47PVK)M6ztYte^1>T0Ae&%z zuHIbQgc1?S)8}QF(&u8GD`z zX-=wUUD*>$JPn^b>lLqWkJSab-X_d*4ET$W|+4>~m*TfG)na0h{ zgGt}+Pgk1gvG4(-BLAW~0iJl!bYdf7tMALb&Q9CTt3LrZO(?nHDg}L8Pdqmf5s~M7 zgeZbE9&d;5l|q;>@SP+D1s%c53_M}eT&E!AFj%Ph_C;xFbRq(zt$IOXFlZ~PK*|RV z(23k{?xTNm0VZ9iuS2E#d|@uM33!q$>v(Qq#xI_iZ(#d*W8nuLWp_UQwCBN@gDJ-1 zsL33onR~0gc|&)LDDmtNXh*2yOR`!-FTE3*{#}}nX83ftPS25@5kLOw|3I5}a%9YI zq}~1d;#@729iwhj6JYBB;(k<2OzYfqi;A3>IG{td25~pMv+-Kj5*BPL0Dggg>4^&2%OZ~$}=G>&+VDa zUET>aersIXy9711)`}5kbK`&z_nLq|H-LcRl^~!LlhFrc>o4+ryF<@^`1FXUGh-vT z2Gz!T+ub;)RnRwve`)B>ZAW>Bj>FOBx)Utzd-w_wz*7RF6lQS;>`HPpWJ0bMnA7mR zwDbjM3Ojw~qe-5H9apNAc{jG>>R@eFDU4h~R`jDZnn`xZcy9&NIQm7z8@|`&5j(6Z zIs4%ma~zZ!SCB`cCeNY6+D4u~6pAvkk?M!57WPo~$g2HR+vF3GsDffYDwoq_(x z05D}o5xXNfds8OqRS2`e8ehb!(kktW?aOnmPiwzF_5;m!iyn^O^239w~afJ`?| z3(uHJqnZ34n&`f0C9SI%V`R+lIbOm~wWo-n1wy7uRXx1KIEnH--5I>tIy5GVbLTO# zWgMnCaS!-%egDwY*#y3RFqZQas^*VRCM0p8u(PZvZn8=(Xs@JZQMmld8uv;3H5ygPo0)AZ>?+CsLj2cqvA!Skvpy}1vds| zKbMSMQumDc{_}A4Ck7@epP4mte?2yg^)CbO)^r#e6LmdnTbthPiR!Cj3ZRI&A*eku z{EIqF#FhH&Pk^HU<$2Q&G6cTw)5zGw$YRdJ%{Hq-q1cL5)eK*X^5;J0*Jd|41#A_H zR(?h|M3IZ#S_L0w>;T^MbRN{&lBT#LaI%c@9uMI*>_2oK6@Gi?k$FzM(k8<`bt%kY zasPv#ojOeKM>U4FPVx!R1)_eBk-R;|-6jZ=ZKC_%7&_y|3j3$j!&=+G6+!=y>^r~T z9ysIqcv-JrJW_Xe#WpsbL2uk!RPv!L+N_j{6ibDDZQgLQQDK{!Od-c}4YfI{lDsLL zN$km4$B~BJNxWCfM-CK?GLuFdr3>ZVFatD#>>gDW#{fHO%p2W6JMJ~xuluc!bxult zRB$Ht%U+zF4*v8^e=T`;okaA_hnVOW#Ej=_F`_vGSuyCYw4o0e`vxo+vfet9aokgE zF5U8ZYlmwmH#VlvCTf)AoFJ2ngZ20PZLV{s_@BqJuSc~UuK7-kpJ5C0HxW|3OBPpO zPf-S=B=}0a4W*;A?~)BIkW=03p#*n!5s?_x1B$K zDyypCrY0^QGl0P-EL?24(OOsDew2m7xgqwmbM%}T+<2Vnh8iVbPB3J@8xvynf=iw% z+j(oMK!O*O&j3F})3hKV$nGD?94I+TM$mUZ@X}LzqG3b|z1cq_QmC^|^k&>91|b(S zo3N<1zPIkTL!#833XLz7`tCmlMy4muR|@SOC$1FSz$FcD*D^E&iumm=CLm$*`CEub z;(S>hnEfq@VKR;M4S1`&=AUdaJnS>jy!m+p#(FZm;T*dOA}!cW3l4C*gl5yi#mK-Q zd5Ao3=97{lW>ryFw-|d&=KZm%%2SF7m?Y`xK3}j>)ht|Ht2n|y3k>DTsnZNG5EN54 zkiLdH|DMyEwhgH}N$k8Ud1HPLp;7FwxN7l@`DEn-8THomqG7nkKdT8n75%q_!^*_% zSUOSqLiN={#_KV7v15DLI!@Nn4ZNAhaLW@0UF7BEm64I*;aP|H4kr61&O#>x# zLIQh2kMI6$2n8NwFQ_F6TmjuKJoM6~$DlBWX6#br!7-{IEbN@(p!tFN0DB;!v=6{;YEMD!#8!hln^*&E>il}`e+iVEIt@0aQt%mq_6IqvDTc&$8!gi z2Zx|M=rntk=c7w&3BzBYG+9%fkAY78?088A-glyYkvXk77=QLlp4E##;KFEW>e_cVahRFTA5?P}(3)2xx7i?AS{gZnZe*bE@j&&8f&!XF^%>aj z(I7LRw%xt{nM&7S_WBtC{!R~-GB>HQg?mQ&JQhBKoi%qG%Sa$o6UtM zTjV9oS^!4LCj6tHC#njvn zSnqBel+>Uy9yomqoIdP+Ru#q3BGxRnvTdgo#7A2_`K)#_^6&M)m(mOKn>LUwkM_EK z7<(vBS49rRZ$UZ zHU?(Hx2^pCVsCI8!Ls=a(&-naOE|v;x{$|C0UD%x35ND~q_@b(<;daWg77ZDw<`3x z10h+%Ln<9s5ZvXuy6kje*?{wO^L+u+vAhh~zerqlbv1~l)70>w=Hch!dIDe;TTEd? z!<3{#T}6d9TMSr-s2?73dZ939J>O`?e*R0lzlIXN3&MJgZM-WnVor;J1NV4WOVZTZ}0f#mA+j09**h z7P%;}Q_|4^85rO#;OfE=Ce;s7%{P>kM1+KZjr^I9jg3uG5?n07g~x;B&Ye3L2v}3Z zeK!3{g`VkCP=H?|TpU+gp~41`5$m(}MZRshYwaXx0=B18 z;Zp^G)6j4Y-P23~g{$;m%PMn)zl z*K9!W22mEjg<~)7fWtA|kD~HmC;ff3q{UD)Hyf-L(<(|65mBY27%NLh~O3p`j7fj30U91eY-7vK3A6E zLKYl;e*r>GO<+?yDW<7e2qfjo0-+7qIj*#5kYC3-_M9~4%3L9A!T;O)m!00c+ zzkeAf2yozx=R~X%=DBUHDd5O)0L0p}&~PD!68%n{g8=IsC%HiO0!8}5=)cuGzLu6< zfVf#*35ISHeC@!iZCF0qex}JErrb{w1_5&i^*B>`gCr@`d@$g7Lh~-AcM)d2Fs9Ff zDe6kl&D)Nh&xF0E)4ZIoWD03#-FIK3P_3cs?pVFJ0}e-U4uwjLO#TQC!yE; z2<-KW>$bZA7;=VD9AhUxF$&rZ!*~Ip zU~rQ9`l?efR>|FqMBPKNkUL_~&S~{e&g_eiKZOIyA>a#6M4;t>GQircPFC`%!q2Ta zJ25DU2nh+BeA#VYo`iM2Oc>&e)!(oR+)ZM*oum2H#CQgCEtc4O{3{(jQ~8)D_F#iW z!s9=f(c)w;n+O&XD$btijXO`qesia>lj6nPO4OD5CX3Ro+ZP>>Vv71^y|%oJ&dH+f zFs7hS9gvob!u4WGOn|6bu%TY;&yd-!+Wo<_!Hj>3gYuULC6w#GSf6%p*B|)q#~*DO zCQ6+jy|LSJY5TWv=f*Ns)9DBqsY4BXpS-}d1$7d9nSWr?57_`vu_~4Dox`35!{6Gy zDNhUpvI-DCxR5BY^uER_TUmos@$YFMfDGzRfRm3|f}zOayO*}jgjRE42D~?kO(HM$ z!+NKV8#ENEy5b*L6*VtC>9lnFp-Wrg@AJ(+JCtoh-Q~eVO3TiiKMplyGtaj-`h%Rj zr>tSp7+-05i&%XiCvE@u5{oBDlL`^&Xu%!B`i9R-2H@SNy6WEpK&vD(byHF`J@M|O zRosXbHv^CV=OKU=xF&nwOtp3}?O_d9vq(vKIa$kZ5@mC^I63W~ngJ1IrqKoq{KF3b zoqS0v`+I$ziIFi?(1H{}o0I{uZn}XY{{$K}1c9m>@gw4?2FG|lz8O!yo`oMDpN=ci z7&<+2|9W$yDZ&Ke^HAkD2wJXy;^~8%MU3VJNM`$lIhyTtUZ|U3CxjmzUTEmUuR+?-x;`Zs+KGsjq%_s-y#FDe@o zo`@_2ry;Uo)vLv|q{!x0C-YG<5E%#%77`PX-O8M-s8>z8q_{HEA+o-{XJCO1A;wQv zWR`kU@Q~3u_wo(pT=Dw}#*x)u&MR{}I68t}3c4xy5#om-qaqMqGIU3O^;7w=`YK@5 zn$2-?_W0x)S*(;&&H;?QYWJ?Bn+)$z06Pv|986i&@bW}wJf9@gMhxNMiyqJtu;+xbi-DNBYkaW@+tR^qm9h%s7fCg#9%gI7BpKH zhIGz1*BwcwVQ|Tj=hA=n(G}E$5s?^8?H@NOpu|9xoePTICH)alSb$3oIICr4u>zDb z3n!SQBwD4#5eB&7G?yLf;|7gPqSzf*c41fNhpVYBe*kXN~ZqB6^ z7`0IA*{QWdz4KRG1;FS{U0t*=h8#Pqu#g}GgKNrk_-w&_a?YTk5SNe8?u%(RR^few zldoF{t?w!n7RytefLj}UmweEH0lp`dZ{OZ#i-D8^h-W+oR!jTGhACRm{|fgz3IQEm z^ex!u;IsCvW1TyF>^QyOO~m3tKV#|fHX> zR6ksCR=eNvfo}%v2%%|K@E>y86>4*LR7MchAu;gN=%?N`mjjys)+YRbg%sZR>P1L0 zC8*1)Iaubil*mJ9S@!5^P_nW_+wDzj(N{Z9QvZCAZ}C;Z(gVx~7V=l<5%G{j`22r; zdk1_Jjxc!jHS>`m8h~*)q=F~`7GTmIX<5hC{DtPbSL_B(j^lDi{ z&M570_A%DVQDo@kGc>aa-Bh0}p_y`EF|SDpzKhImGyZr?ZV0joQRTdPr6yb!;i2N1 zHc*;sDL0?D`zn7;NVT)0BT`X?kF^Nx*TcpXsc_V*F2k}T+@c)hm!o*Wlt;J>B?-4s zNm-4tu*OwP{fN(#+2;2eN%V}^e7^fw$V}*ot+jP`fBzYb-@pmF`+P)*6)Y?Qqvh#2+TANT!Ruq=o`20z0Lx4r z8RgIoWlN?>xkCvd7?MT$g%g@)<(U~)_ zSj#n;s(Q384I2k^aKEJ!EoXW48_&KU9zVa>+5EevNfE=ywD`Ngl}SHb4Lf;6-)4RM zp!I#c{7B35vqS-3T_<^A#jTFni8tLSY25%}vU`~>tOe1-hd*D*Tlr9v zy*Hcjm_3$Rt=PTblzC7SJY(kO27c6ZfNDUw4s909p&X#EfyoqHae%QnOI$!>EU;Vt zk;qbq=Y9N04G+f;K-UWMai3_?NQZv8^Ere5VvLHrY^P@-Gy(Vi!_2~>qCbno*r60w z-v$PvtJJoDuLQ$BNafbQYHcb&Hx@tZHoCUk8bSsL`fGp#=A;_N&~6W`2mgZ8d(Bht z5~VMJp{Qs)W@lE^yVK>F2wgp<`?#?b8W(tzEj=Rd9mrl6tUoU=hg-xp*-|n+b$Dtw z_PbH7ektp~*5F6^!b||!Y28-qQpV|cR6?U3zta%bPEkjCc}!)s*N!s2&Aq8f8%g5*_5I%Kj_DygQn-{QBc7Wxa$h-beGTUc zM8K^g;nl0Hy~eW>NDhRS8|2wp^Vf9VZ@NjDm)9^;z9q&h@V-GEuox03ds0#&e}K7c zei$huL-y*D+(S*yk_*!&Uwodj1d$NOo*i1Wt^WD3wj09au?!VkyqP$7ry^iCc?xhX ztgJV=xzW^O1zBFsg~d2l1c6z{3>x|B`YkmVD}`#m7yq0-J|81UFoyaN{&4%o3GcQ0 zp4Z}qh3;cejDKh+6UVQgr`C16;zUN6c{BWYcvO>2$>7;T;@o_J z0S%w+kaSZM=S5&@q>0(jWh;gwGXMeOBKPAJ?o~jbIYkp{=Gjk$Kb5 z5Hb-t6-c=@`>MVRtCteVcs2i2$1(~hetG(ldOo6-E`=zUrPJeAn&Rp%CN3e|qmqQNZO`^~Otmci6+S2c*0!b@3M#eY;n#`DCnSNhZFR-(+3iK5y`Y z>eIfU(`~wJ4WC`fOHfd*!K9;LWEEou{*PuK7wKF>xE_4`ZR>l)@X-Ew`q0z9JnZg> zJI>t0HrK2OF4KJ)+Iu=a=e}(I9uc(W#K(8j5sVsnc@0agsVx5Sb*802<}+_p`hHi> zX}m6FimQ;iGF)E&WCV1JQc%812*S{jcGKu>bj9F8U_~KK;O}4W39(Mh5`fxfL`M&F zehsG3c^9`RK&@XS0%cAG;cHV1i=l~W7H~3NTp52NlDtv&Qt2^Jk*uiNWZ{i2rW;s( zKRBdk+`M>K==PlO`BjojMr;>t(F9jP+F`uhe8rLx*I0bW0%*_A@S#6+ef&5_U%SH7 z38;@0mu|gd0XjBmZ}?@-e1sx5dPJ3u$a_^C2u~Je{3@(^#&h#I@+soRqs*W3+EW4Xhg9_jbf^YQmD3v#VKD?a%qy3uQsWK(bN ztr@URyq0)xB-vr2tUM^>*CJ=%1DSr$64c(_0la=P|cjnCkk=s|fI z7%(CR-haO3ej~9CXwLkl|04UAJ`O)%Lm&=^wX{4@A1hyHWb5uO4!_c%%nP^SchfZ8 z>)1ZndZAs)e#=hGYc?nFf__(HA{31&%)`#2q=Fj1Xao;5%T#GB^MM;i`P z#xayPvUAuXn+IM(wprIN5w|{>syk@%$1*P$uNc$GAA0(uVg-n3xyJ-3I!(%;MMok8 zh6u@qL>c`z9esdcDip$dZ{*Rf8@5=IRkchFSe`!ystd^}n{9`UWBMY*!?s-Ygf1zW z>-C3XHIDBq4tC+a&PW$h#(F|FeV-gVdE@<6<1;&I;ZjJZ1uD73X*hYZjIU3|ZTfWL znuu;rZ~TQdHLLVmLXAd5LOp|*o8Wz26rDJU)U8^l5S}#>^ZjQ`#Bv8E(+U6uNu23= zbBro*7#qH|k<-U~$Z>`{yb=>XaN&`29;)3UcfleB5Skp<`4lhQO4)aBQfl-XKT*k3Y*$-SKS@4F(EmhTC z=r#fE8XVJ-V(JISRb4&3TN=C0m$cZ1$g{4=XWaIrBi&|V!u*K4Y0K8-& zt8>T%n0=lGx;z}_;>9CT zgux_?or4Bew5+D(WAbF(24`*xR)vb+-CmrlysJiA7Wqm?lw7Y!Cwb(IuJHYP;y+*Y z>)h6p8p@J-a4$RJo*PvtxxJO zZ@;?pIa!7kuJZ?`SP)1eCj~f(1Bc+iM)-=jeZ5|^`_W@nAM}%bB1hiq9j|I!6$GL_ z*XhVc7V9Bk${r2ZY?jI&QQ6W_ZrP^ibb7ztx<&J=CVQd=5)l`5aB2K8jv8q6Kk?8= z{7j*{vHMeQAy3Kj{$B2a#srq{52}^J2Itzht`;-DH#g=oNb&^o&y9O;-31?xwe>@| z_G@}Ol`Sn-VC_=P(`*JK32vD2o6A5(S>Pc*sK)|Y01vS)@TyYa#>0=EHMru|1m^%G zXabi6C!2(|om0}gaD}LW?kywddlCqzWIk&y=?ztfd#rZ8mJSa24Hz4@3rkDAL1;L- z`b(Qm_Jyu4C46VtEmibzh98Fh**~@1iji!v@#D0&vbxQf*7G&EaSUV2nT0BZ2}|nJ z-_%>FDVox6_Z|xD=~XN##wy_AV0sYPHedIbT_v8*e{`RDx8+l zS#4UpoccE3x2b!Skl#0!dBkxCGr4*s=8p8m1`At@L?S3pTIZB>zRfd1aqynLxCJD; zf3~5QC5FQmin;S9+#vSf%8eDI6A&2x-wC_~6|!H^w8H0B-tO0o$rFE^nadk}Q2#Ml zmd3gTt}*{Rdg$L`aDbpv!aXNx7l45N)> z)CcxBMovz&zgL)_k4QL{KRkI!{!R=Oq$SHptJp4#fk zVL)hFjb3tXc#SEM`r~Y6`zs4mz^UNy(0u6>G-H3i#B5c}#Yr}Mww^glSUj}D#>N5; zE7JM%Et^5r*3R5e;(Wt0wB7Wjm<`?re`Oyu`vQ!vj!GI~!mCc7trGck4u`|nO@-_> zYsxKG53+<0_ID^U2M_TGy zGpM5B`g|BYoL<#2!qbJiEb8(%so1^BxzIby_ zFEuBrLv78(le}#bTG+vZhot|T#_ilpvsuJ}pqVu*E-@NUEi;JwsjBF`qQ&ZBFL+n=ZiR|8o zi!sbuKB3?hLxx}gmiQs40Qm>kh@`db-_pv`wlI408i~)*6W)Dq>cgoev{Lzx2G9zV zKLX~m?r-1X#<*5NIi*qbYi0j-l=QF;(jBEXK*O?=8FRJd<;p2{C+gtdv_?N8S)j-T zZt_F)=nF745Z&r3x0m%5(xoZH&JsHQgr#zi+v?XtiFc>_E9}tS3!rxXoAwm$@@N{N z)OWw~{Ha0n1ykJTd}prkT*Jsh)-hksB(szS&*ZJg>9LGq%WHj=&s|EerBnVtAXzgyBV=7l%Ximv07YzGyo?99XGxjPZdAYe~y2Hva z-l>iIFS|sn>kQ57xOR%Bwzj@5I-fXq(xpz|y?Orf_k^vtWr@|%Z_&fP3qNu~G~7Op z$fmQN4qAe%&pSyS`&Go}y78VC3a4ixond9r+94qD298z>Tj3Ls%K&QGd^o1-m2Y=4 zG&$+H`I{5YBO+XMfO;%om#lQ()=!;shYE_sW&1LSE(K^3In6EXQayDItq#8uFaGT6 zbD-bn;5{SA)U`kV!fH^1B=g2giu8L`w{b${vy14hWM#4Xn@g2o3TFaaC9GY-3*+#@ zvoKP_Mrmmni1!5553v-s|6hhkCY(o9Pn7~SuT+(qfi4+Udh>xcdk;-Tl!e~vb?xM6|>F5GiD#iFCLbG%sF z#o1Li{sRaGkSO8B$u81g2$}fL#g~VC|9^vtcWX=Q-$Qb6pc)(1 zuMOhns{pwhij#^U1I0TStK3i2f&My&62n`>#AhmNgduycK7k;J>x0V60YfWU!@kEC z1~f815kww6gaf9}(TI%L#p8$tCI-!(Onj9a@)hKJcp^triEyMKM4-nKy7_ID5_?U* z9#*}rJZdxd9Xfs=h3~;72iomd&Rr09r*RnhcP~HC3?2rMLBrRmmvMYSx<%s6E{7UU1r;8a-pEw-gLQve`>tO0L7 zucn!pD@Ch9>AU%VeF0Lm^gPh(Bh?HYpq-g=^+mB_VcEbs3u3+Y=u+l!-!<6dCng|f zHn?72DkEQ-1A-n-F8Fg@c)JwDX7BqCj*KBj1oFOMN&uOTOwmW1Ib{n__gH1N^qc3M zKD6Pv0~VfVMXOAeENYtQZd>!MSCUt2LLB#VI0VAKW2B(ah_*dPA0*?S7|n~ki9i{S zH0|^$3rp<}ijhp^KnzI^?u0!#D{@k5_$Q(zyFsd4;(yqnV5pi#~GeJO*J3yFy#VZGvU9*9+Wia zd^gpLi=0ZlWv36gBGKCTL}4uX$^~j;6AG#BaaM( z%kMS0M=!7>jZ`mEni{I$CMDg7@F8rOWKOmhd?3}cNko6Ie*R<<>{uc%=CB62r86`q!Uuy>kce==>$+EcTbz_vNS}hV$pUI&HUp>?HTOKAG?ff7Q{h zONbN7?UFwJQ*ga|d%L%F>+ekytnJ%s<0AbVw4;czHdxvPX_P?7X+>{3@6l3O8NbX} z4CN=#&}1F(9{4HX@kWIo!e~k)#VMRQjEW+hRR#m291P~ zPIwCM?<}k~_4`*-B)|p=9^5=3{eo!dcmzUD)`L|3y{tEU@h>ooqOn&)h<{PHG zFF$wZYtjkbi*H_X1G%SU#6Sdo6oO!V!?yukDah# zw2xo@0Q(kxV;jsLPZP zYv<*V<$XXg@n*DY1Dk2*uJIx6Ej82acIwt$Y1ZbGxSu*R*+u@@vs(WF6!|bn^w-UL z7ERbfVI!!_(R}6E8WvA>7cR5yPLON=fQz{{-@}LD0Ej}7UPZM%9jY%Z&DI+}D8B86 z*$oIN8G;lmij%=_2qb!zCQ{~caExct-%&!IGkEp=8JAp2Fb^l;5aLn!i2IuToOS)1 zrnTVRPZ5t(@_%XFqv9|XE(l8<*8KS>P#Lne`rAR#j%jUka6s5PcReIQa676Cq^)8~#SP|KabXVeA_A%ub>b{v~lW#wEl7UqcOU!k za-&@Wa5Io5%-GXHH6A$dKqPm&(Glc`(G;8=+sBl+!B<327U7W1ul>P@u&hD$%OM|o zE@cLY?Ajj7P=GLoiJw8u6?&yl5ZaC7-MovftVM;55`kK7r|*&9&{I^!j71UC;VH%D zZksB6r1d02lC53Z5x>iy2cB*G4I;ergY_uc4lK^bBh>#yfjKINHJetK>>+tj%t+Si#5DbrfCL$^Jr}sDk9j(b4drYJDNZ1 z&CA(Sr9|bxA1b{Aa9fIyUu{g?j?lI|yXWYNk1CoDpLTJ&db|DblZevhi_cAIl zQU6K!>EWfDaSWRQvUh9pg0zW@CK@Cm4(8PB#RMfX7OkQF-!Oguf;}6` zT{xZ*)55SlxIZfVD3u_Z|MW4ii#Kb2b>n?8zt5d#m>4KGFMq7wdLFHsfS0-`(-6AP zGp6#4o6v$W(#gfe1(MlnWVHY-xtAadz&sh(v(wG0!Pl9`p3V0X9zYC0^@Dj3mt2ED z0#*?Rp_BQ54>$4k8D*WHX7Hs&RTCP69c(0h?w=z+pf<_6Se`qc&EdHPfM3y@t~S`v z3ry;jT{4}Fcc&DGG3OAD+pn0jgn3>{D7>g7F5cbJW_}|gm5xtOL%$v86){=ko^jp7 zUt(YWhDA6_DW1`~NMeOB!d8{i2z1>Z&E!R8|WR$+eTx;MEIJQuC4*I`s{ zf%2VCpFU9nJ`SegM_@JSx$?T$?aq4rHw=gU3kN;@A6TkD3kp;_2%8tEffJP=aE9_6 z9Y}$J>M&?Q`V`@C3~E7k{V)8mih)aUW2^+t7u3g*cX&T*x@;1_^@f1Z8Wa{45;#Dt z@D0_~)F7VMy7>ou79fw$8chp71mb()3x*t8s;VQjniFIbx+BV4g5`Y&{mB&qt`E}HWC zzIrMQnKiJ>^Hq~Ri~kV4fUMpEDnmhWoDjs$&={ABrUgI}a!AP3UEkRF=Z5?_Lptfh z8EQ(UWPXYci-UlyH|*B^#yP1_sh|71GA$xA*h!4{9I)++j5e)|%ItW_6wqSP?vG)= za;HNlv@q57(KXrnb2lbR-|>5WbxuVtXz~Cp=L5qPI<(ak>H#7xHLaxm<8NfMZ5HS$ zAz2w**?g`!Lfc>VK`qq^91QqjNf2YDdgmZF14lnODJe=Dh%H25rTqO{ONB(jLkk}I z4<1+nc>yI;xU6Gf^7)a<`$$OWGS#LO%j+u$C&=JEG3pFP8lT%9m3?uB-4Fa8@LqoV zdQiIS;WNavE>KV&vu!b$Ug4-tw6-k5sqA@#Gm* zFbBbJB1ukCTa`5PQ7yYMV})tl0WRzcMjWOB3z6P&pX1Qn*S)LybcES&mkw@Nn>?mx ze$3XJA48aXL6W1`n%0W$X77HzM*s1OIsALK7<=iQN#iwM-$hZZ^xda!7`@@;%=BYD z9Nw}!+vmHS8-bK;SDnfakHi~nN>Y8c?_EQE78JSX_KDR^UBV4VMndAs?Fg0-P<;P$ zIcIpOon#9jX2=IoSfxZG|9x`~asgY$}2;1M~Id?~&LgEmz zJNae((8_*LG<3vX)=t^uNR=T(%f>}uRYjCT&XIn9MOO9~ZDe;;ul7iGeXI3ElTqIp zdseez!?M5Z_zc${hb$&uu9wE2sK{6`v_CfBb<{c~+i{DeQC2MX7re14b~&bS*&f%* zkB!nVEEsRuYMA%OffRq5-sbgs`fiHrv+>rJ)!c|@MUb4x2oi|^E!yK?IGvut1vow-0q6v*5#9LO$0t7yGJt8gEVqKACbPB zy;*J#77!5SA_ZurrT7R*mEyv}21s8)nU9xeTl2PE;StGPao?IwNlwN%Rw&8L$!VV3}`GK+qSnE&>fxSWyu7|wtW36-b_R}vj0MnAHlF+yP zx5txON&mL_*_ND)Q}fGm*$}DuK4Yydv>$}7_8v!jU-h21ia2fuHB^;0?_90q+q1=V z@jc2|wIEmTvWKb8{c!TG(!^H{fcN^cCC92w5&=LkvGWi*U)( z={Ze-C=zvb(oT+eMj*3T^}kRcN}G=+g<}i2-l_-`sz#q}sN!^1MruS{J;spP^`I`& ztbMK+hrek$9PZdD+?7euu;w^=cd$H8r9Jg{X6mk4x7>${a;lS=7rS+3Y4^UoY5&I^ zN%mP)JA`5Vd#k%HCKv+xdV8Inosr%v#CvEELHtO6QUwWRnklw9sOoSHP~pRYjo@z( z9);(vL>74Zy?-8{>Uzvz*< zavJ@HyJ}+kvJD!8GglyG=Qc)azj?6HQy&OM7fAMNHw4GZ0GgTh(dpY2;UVJ+xv?bF9MNN?nv`}v8Al6)J2kfq}9rtys5w~w=SZw(q}w;K*w@>oz& zkdXy*9(gv;;4bn5W$mVaq=$ZwknKWl+^t3mt+8vM;Ko9CwU+LSs37{N(i$$nsH z$+3>G;Ni&{%xCUh!!0pjtzJQUV-M1xlV;&0BkmC{FPf~MrjkFdSvsQq;+Yu?DFPYM zsqS3ccZcPXPURh4aD1vi9X3%Y=EJ3YCHGn31;QV-x`A$!@bO*rm=+o{a;twP6ng&t z6dGmk%)YI-xF3vBi~b)iK-^?hkQ>W6P3qBvwk2Q*1Q>2DE$IV8p8Vzak5Cb492~s7 zq{t0Mf^1S(VuRzKaK%t2!Dd5HM*}p50SYJaiWFf8g2$W%0G$%uwV&Pv$38?EzzS{( zh6~_~7@-=v`bNBKLs?D~;DznV3$N!@E`%Wt5|vV4!QRF?I-K{Vd)iX+e%$Q*>4nL* zmrHw6Ut~tOp29Q3P7QDKR1aZ9=vJlZ8atHvm`ZH*2%t6&-c-qEh$Ih zB22Xhe*AzIUm$UE&Iu!(0KRc{uIyfbprkcH4z-W$2Vs>gF)&u!@{L2Ejs1O&E{I5h zkRu4EtgTHldOwsQv3g5@;0I(rr96ihr>E6ZNdyx~VBigK-9X=Xe;erg^L}apPt};O zPQnCZy0GxC5CQPW*hEXS{AnHG_FJwL`=2t<<_r9nK348;9 zZ8i>b{Bo2c0V$7)dc{u#f9LoCJNWpqCi1ocCle&6!;i4)t)!9&oefPhTaNsoh-tk2 zJ}ay2m$d)^sAprs!mJz|9PI7!@kZBNAuLC5(4B_gdGXnQ_95y@U=n#JTv=Pp@ zni^gn<+5?;GJ@BFhfuU%o^;e-{?h$6$mdS$AA?zEc9!PM44hX`zz!$DMHpn&<932> zFep-7B@r~rz%@YaZAd549f(ntiKKu|o2LX+LY_Qb_4{og^#wTyWG&^7+`a?-;b0fL z^!9;-E=!``NdK}fiBWad+S0dgryq3)G2PqrwbxM3ke);OA86Oj*lJ{MFa&uKR1=w;NlPvXzCP~ zKm*Uz%a<=LBm^eJNu^-l09XztV(Oy0PVpv+RF+j^|=&Wop6piGia6C2y<;c`&KaXYQ$Pgx=iz+n3(#JEb)Ux7K)=BmQ{B#ldPQ!Z$OK$>RNmY<>q)apw5bfPM>*YfO!RCBv0AfDXW$tdqm>TIEP5%WYikn)J1 z;?~_}Uz$Um+%fQJ=9{#&68cRVLkr(f2ie_f%u z_$h=C2RGl0!pB72C~E)vZiIz4L-3JieyI=kxR1rq_x22LGYB^XZ=26zoJ{81z3)SD zU=u$DEdKcXQjbj>Qk&|x8aGI!oElz&AR8HUigW?6Z3h#2{tdg2bU!G7B{NH8Zu{7M z&9&B~I~s_A_4RdSjLreq=T!97AlOW^Z+uWqSs?=Dc5V$X?@C9m<{#580@ep8-+$=V-6hP}GVNdwBhaZ0m~ih1X9BKFqn zdF0ZU$8m9}j)K4I$F((vzdSB{>)zg;8hH7oLR+O;N2<>d-Iu()=%ynRw|C>!Uyrj2 zRURx4+{Zj;3$DJLv+&J<&nb9S1@d|z0D^6bV9$bLYA-LLC8Yo*h;M>^6ydBv=zHis zKfk;J!BuL2mk5aWKoL{$iWQ$$*tTw}@D(fM-Z9F`$>&wOf?o~PN9!$DdyZ%epH5ed zS_xdQ-$=hRYs01sEONK>K76zB&)vmo7eQ!yLE!V3;RAxhJn0bqi?Zj=VAzU5ng$2e z)4E_9Ni%c&Ka7($e=jE96&DbU$j2kGs9W3@xr>wxhBiC;rk)W%-qF()1K2 zspBF+%m|y_%!b3ZTW8x{;UOdCJ&~a#G7487a|ab^*xup8S}iV{w2Mr1WS5{~z_yh{VLmv%60^V%vLlTZSz&$E`TOGB)Ed&~;FAZ(<=*)v zHAb`kHd1@0oP+*uL=3nOyAyyJvBaNUqCbLUgRCKtc#EZU;t&e2uDbJ z0(Yz%Rh<@##oI4mz>@(AoF@46gWPWY?OX7%B0!HV2y0|?fN<6}DBSg$J$VrvxK&Ub z0h)ef-jKwKX#)g7p^7q}QA}dBdh9Q=p%jBc(G#*IGCpR;8*S=CYH$HAhwhXc%f&jD zd8g|vy5Tp3R#&=%jq%mM`|z~oUDn_!A2;sv7bF={Kj~Eh+J2ZA+)|^(Xp*iwk?LG5 zJWHqgdMG~@9NwFq`{9Ervd;`!p)0|AjPJlmhzU~h+~HsZ&s-aPBjuYus|ZQctUaaQ z+rtKLio8cHapRA_dNwTc1*6SJvTQgwU<>FU);Wz|aZU5RG}e6huo=%#53Ywi02Qs? zUJfGWu)09{0g{-cdArlj<|8LBuUqf<2lN5kV3d(-Xx-_+K{!GRT*y@uz#7OaffOi0 zLbA9Fm{ZtVPX2=Z=P^A!3IgPrpfIp+IbEKpf~WHJ_!nfp6d0a^AGRkjRja=PBvd)m zkExHVUu<|t@f8yL{=%)Sh*h^jJLwah@bBdMDGCDujf_-b@6npC=-9VD6^cNF8}Hv` z&#hsD4Rig1EDqUZF5JgDFTD5ifm)M>CEuiO3XnW2HghMpf=tq-E)aDkHjPy)(4KpR zJ~=c)<-GH4W53B8KPhsF(U8XocY(~~`j3~=6t+V;?_)RLkN60X;MO9Z=ILK~{^LM8 zdsu|cI|8u~JIEGqux(PSH;)Vt1653oK&re#XuT=GyaG;6X=&+F{pK@}CSL*9{nV|t zySp2imj`~fpX~t{4)uS6A-WHw#=;B?e*yQ}J_&`r(+L<*m~3puioXvGTtOI#0c3eR zo_p(Zu=>-2zTN>Q2}s&S>WzwiEiWztP8$z-W~o^pq0M#Zr6nIwVxNnOF=MMw%c)8O z5?t<5DF46=q_cmD+lXm@#C!H6nF71ZF|M;V6swa1CZgOYBLa8t=E-{@-VJ~!tN3NZ zizxk!n>k~6NdAwVJ!aX)1_V<5nd(Rkc~>CeyK7emZzpF;v zcTl>WGPsGvGd_!7;}Z}-ViZ6+M;$>pDDw~mE$DsmI{DTJ(ln%_a|RrEe+oASVyw)d z6&CD)WVXN|uzdnNS`IfM*vk6YnrvZZ%xSyr1fKnVP3q@3{X9qH$j z!eL#IUhKKxES26|B0%Sl&inJ1fp@Iw`joHr$~&}IVi{AJF#WS3!4dc5<}J(=?SYL~ zJ@+5Z4V*2JJ_!p}{o-0L8e`)nH`-^g-AD)kE6gyYNN6fUO~RhJ3Z9Wn@=2R>t*u$J zti_%_}#k!lXT{0W>B{N58Ne`z%Jx62lELK$iKyI zt+{NQJfeM+8j&S9`_#yy=o1%iReq^LfUe^EET3_%%P%Nove=PM$jRTHtws+shE{|I zvU^@`^V|@Fyug*=pz?->3Hv&vPYoo-+H=--6@A?4anS={yyLlVL@oUGH4vhs_ly96 zgkuu&j{qwUhQdtkBv|uhap(iaH|%U}sk#(azfM{oi_9(>cu*}xic8}hJ&6mExas*a z2Te8q440xj;O7sU@j<~r4}Rx)_oRwrQ*x%bL}5CZLD2)+zka2kUR-$zd>Bmcde}Y$ z_s{BajO^{VkT(ewPa#&P8*6fN|3ckgj@_U32ZJ~M$lQYjji1M%blWa8Z<_3;J|}H!s$pdPo{Demf8_l18)5XshzPk8PkHSs zN}?=9WJUJ^a{KcW^<5Uc<^~J`86Ok!q7Q^u057b9CPC^OIJ%M1svT$OoS$uS8p$qa zMBj4U4bNo`N8Xi5O9OVgA-6hq?`}QTC%wAj>b>0`ndU!Ja?&HVfVP2ptGa6*ucP$k zZUA#JN9Z>#=}?vG@fyqfiBH#Y?)ckuvt;Ccyvwchp9nW(_iURUhylBa%B4?f_8=e~ zPJiO^)PNV_UY8n*EhPWFli;?l(;OyNJHy3w9M!$tuFbj{YWdfQ-rW(98RBg@_L@|C z5WNJQFrdB!yU+WcAocV6LKNiwKRz^cO$!otgo&M=<-a|%_)uJIJCOc_EW!-ba2ecx z(Ljeo`PCEk|Kau8cG83m+NUZp3U#t!U~!nM!6!z7EI2(UiN2yg3wE zHWpc&yq;Tb5ECiJmV@U?OxE_^bL7KM)n|i-^U8zXJW8~llx+}cKL&2b7SBWL-qxBb z-{pK$gs96$S>-oN%7Vv#B)!V*T+U}@ChKy>dPDk7hX4JmbtV|QE7cc%FLI{;w@0MV z^}T(6@~B()njU{yx*jQcZcfC(f-R}=ulQQ|E!GUU!8dP*LdM`#@p z8BCEYoP_&2KW{P1ZpvVHQ|m?FT&VqI-vYZnuXzl{ z>YY4JgV$lF7f*~O(8#35jLq#hCGUxo1riFCv?yWK@M^s287))=1({br?|3X3*8v=6 zqeop>&={$xgDMMt2yXE^EDRzJR&8}`;TSZyo$lcTUc~>m2U6^K4ej?&V=Th07 z`v$%1O*J-2ofS?rG55pAs%X3F3k$!4bRsSA7X<6@rCBK^u4W2s)q^tTBcxpRJ}P4@ zF$<*+2R~zE^rwOclH@Sr{|~hbN4GMTk9Ah`zTo!m>tIv-Pb}x&Cj1q1qFqmp0(~BYe^fnt*TIn) z{Hcj6KZb!n->-XRKP>l|9R(!B*G&mAj{DI5Y(k7d^e>dki`zMYkZj!PEpVK0>0r+B zdSw55{?K!3YN`;=Ff3O~U0uorQB+w8MNpAC>{S&NoG{SnutRX;o}kDHn$|DBWrxY5 z>D3dObcIKKXd>iw-L$(5WTrx$y1Z>B(~IKTAqV4n4(W&fY(@`7W5!&Dw#y1X=RWa; zEE7dwxF8_pe=}T=YeWHE1i#cZQQBamqgZaOV**A5ss6KoOc%A8Y*3XCQMG+8E(Tc; z&|J{S0P!?6rO@q1C>1w}0L-YksEAVM@y>gKvs&AumJ<%Q(cD!c=E=YfZ{zNP$0BFB z6_$4p_0!#G>OSL7GKW#IBM}A{9flmP4`?)$m9sS*S2OX;5*0_+ zRMUJ=MwPN`%Lv8d{JF}E_|e|1WBN-R*xHEfBp;O+G{wy7_CX}iyN2#UoSw?Kcl|7( zm`#kPLO=9Yxqj&93^s-H9(jrsTVDa%8tA+)0UTMgx14$j-eJvniSa2l(5^p zcVnqb>hyp}eEnNcbzr9drT5^t!HI#cpKehcD>aDJC;!?0sWDP28&i7E>^D4CF7??% zmi*-FS5)&?n7i4}yb0=0THjZ)DWxP8pI$$nNNM$~wLWI>S<;BL@l)XXq)542^ftOh z*RgkMr*L@=K0C++h@VpAhY5*)@Rs^fLBfkpQATwl|LYUR%#@fL+OWP&j|cy5_{%;Y z`7TVYtHR5nrhil8jmJOi{v=boUf2948tdqTn~Eb>1x>8&cfaCfSw_75`vU^I>F0qz zOf5cek*Jh;&2ZaK*Mt5pPJ>fTMKc*_D?{ns^DkLGn?7s$xGa_TvO^_bHfN+&@Na&5 z{OYdE*$tVEpNI8p_k_^#(ArW^JSx5lOs*JCd5t+qX>)#Jb13*JzMS~>eSE7|_f~EP zmgK#Ux#HFrAhi4iiTV0k> zhpSXnZrcL@4P#o-6OD%}{_8r*!0!;4lhpMA5qp)N?9YlO^?{B)n`)vo!v9hOAKYzhT}d*#?e~Ehd&!EQN21|0k9(l? zfA&vzSbaXL7tMmP<)eIZ=AIeERZ{R;7m&q5uJ;@$OOCd|CIDn&xE!tHYz{0#d3LJ8 z_6f!5KuNcqEsdFW*3_AA{`^b2bTuJBwbn!x9;bc~=}#Dn`Nr?NWBCHUm2?2xhMnH@ z$Iy?}j_<{V4~)YS~3@TM=B9Z1jWX5PVcHByL{gw!Q#f%h31mwzMJ0TyQ~ z!$J=j)nMMnLQaL^cG#3%TJawelJSH>b9jk1W4tB=!HIKylFFwR4i@J1`U z`F_DNJ0@yBF9RgUXea6Hi!i|q_xEeq_)8Z&1cyO?zDpYvyVlVv4 z3N!!Mye?FFaZH7CkF~>>2%U2kue^1HktIs@(P~M;vj!W^ozlZ>@#c$+(-6Sw3qOCx zzI@XQ{tSr7w~+0O9UB{i0txFT9(WJ}?$3>_7hgsGv2`!MqJKgn89O!9UVp z0Bqr+144_wc}sVrcksMiI#m9j^UFW68eIswRDMjlAtQ5F0Zru&rht2YnDnOKMbZ}z zetRvL37<2-#E(w}2(U<`0B9IQf_%;W%uq3*sQ9T?edqz8))2Oddnxc3`6szJlU|OF z5dJ+ixGAmZzd}OmHWJ~p+x39nf~FZ7Qc@}S(Lm(D1SsFeE8Ta0{D5NtsUkDQDlvxE zJkk_)vZb?h;{6qsdy8RY*lan1jda6Wkn*al^^#d~DGyASE2x@9e^SjR4PKHN-qHJY zY!l=|!QXa=6&0oLeX=O7&rJFo?YD`SEDS@HEZgv7LwMXMx+Ba`AWSqjzXt*r(7J#; znN|R7iu7OkT@Za6hqHj6C<&iJBIhCk^G>Pqc__<`r4h|HOW+x%C^$4&bC~}3aB5XZ zP3>ZVLf-%N=fSU-qNs^IE(ym@4~Qvw<mDi2}#qx)5vlg-7>sr23C;1N3=B@O-{859fWe3rJ;;)wx zNsO{!p!HtO2|*X_=Lk0ER#j11yH6EgH>!RWP_&40?ACTgb-$(go@4uw#`o8$E={P+ z@sFqLBdTW06zct|lvBw*a~Xm@K(!Lm+^6iDqN>B`V;UQg&k5Y_&&i455KG(hyLDtEdb2{G7g zAe0PtJx>k^at;dfPbl+Iv=<|mb2^wau4v7xZ*mxp;r_;n|7#*GKAm9noqVF&D`j2r zbb?(?FBN!$g5=gr^l}KUgc3UQ5=h3gKK_#x2b#YKvw3@R49ce&(R+7jfuQ0^)_Ja= z@UdaY5G;aO{1YYq8?hT-Ee4v|Pvpg%mG(Q{y}Ae|w&2c}@1DWo~jeX+xpKXX>pK`g;ZOH>*2og|&UwPn!w;AHOKt<1QA=G)R zL_^-?!rzFZDrLQ;9E`9a)23O^|MG^s+_eX!(E?G$^a6scFI?718I0FL^BaF_?}eSu z=ZiBvD=$#+-VS`c9XsOoHBY5H*McNEj)f`|^DROnh;^sp6#ruvgZFK}jw|R3_f<|; z60jF7T63Y2u}gbT2%yn-QwCO}*cWPQqn9|D-e*=do)VACS&EP@(pd2C0B-#qQBU@M z<KkgFEvZU1&dDXE*FVFpbgFvA~?Y;{#s zjB0d1L;VbgUIOwa=`bOhms%!#3SY6rle8Rxi=l-QWI!pjU7P4Z&0c_0OYKN~Iq+)7 zV{XuwX+A|n9b-%QuiVT^sO6&B-8{?N-@b+uqoOz>IKxl{X8S(vm->v#hMw9H}cm_>YjnH^q*J4<3B)?ak%GDTM!xiz|K-KOeH0 z;u)D38Dq)B(aXlChK7b{OM|r3i3IDjuGeICJIO`+{CRQKSeZ*OANVrem@cfGH8mWT zy5Wr>pqO^_vffLFXR7s&l#~k4Kj0cDROo=V4&-B7p9yGOJ3Cgmjza%~hX4GDb~f$J z57x%PeSmn-Og4|t;RFa9T*>n&a^s-*@Z_f^iIf=O)2pVBueOUnzk6Jp$|kfK?!IS_ zR`=-ch1-Et-uxE^^E19~KY{cqQ8&b}!T7@#^*@v~twLtWXq305x|#2Mm9Z3+{2fA= z&vEPWWm1H~)94O_eA{Xjugai{ifVm1RnDnEq=ikFq`X;0xN67&SK9LOuu}P$0FTND zy7O5j%ZTk2g$WqIVd(~CXTL?OJwNE;EWJxzw&38}Z@39ZjOV!cf1+~wK4&_@)hc%z zyXBZfboZ_Kxq4bt-%uXYaM3kY!XCOubj-wQi%OVPcaFcCkqxZ2s zfP{bPfV51;t-;r%p@;bc$fN`Q9)e%2y}9W$%Ha{|TmTmWaiG#9RIAK2rpk>Jk%bP9KSiM?LJEMQR(5UwJ(*% zh9vzyk93V_#mQ2><5zmH@tsnbpc*2q?z@Z?J(==&`C8amF{7|F>WPvG&a>#OcfM#& z=mV*pt0oxMxz}h*IKF#ps^0%L(0j?HvqV9_4i;kKXTvLa(IHfNpUO_Yl#Y+@Y?rmO zs{10$$WrW2o0s+sE(ZxAiOTvE%o}rF54L9`^}5?q10w%0S6~_ueP<}YBXZ|YEz|Dz zJ9eK(lIq#VE?E0|DA1Uti{o(J6L;r6_6R8a{)QT$5?S0_peIl<+82;Aaw}cf?thzI z8GX%aboAKBmp*n35W%7UkIf5VsGYQTnGa!-qZ(}}h@xL|E;TB7KMTe$$4i{XH2Y7= zrOVw*HXhid>}bqR{xBg6GsnY3F!(B%cc0YbV%$=VIzS*IjWX|fa*{uZ*){qy3&Ulp}Vk)LLKQ66EIqsV(Jiy}li z5#3>D@~_Q4k)12F8FnqAl%S%T|J5Wg<$U<72AVT?9%JTC*PtULJrL|)p=2?MMZ41H z+Iv_WW|m<3!%7>MjoEJ{BE{$CD_>%$<9B)LsIU#mjb+d$e(LkBG2hxXm`jZC)G z7PLZ-*X-m-`c5pA4)bY7X-kVRTWM>f0-heIXMb5Ap1w_Vk3bGo4wIR0l~3GmRk}8R z>=wRn!qxXtKsk|`rQ(^*jaVW~%!p7<^n?Ki!jUf;roC>Hn<7)Tl>GSRs1!CRkFuXp zpvAOP)~Zo@1%2nkilF&&U#}Adicz3s3ip}QIg#XZ(wflO*RbNvars_@Kb z%29T7fabRwmhV@gevV~?h^Bt~I;74VL{LzmYMn(|T~|j5L_@o%PLHT6dqeNTqhy*Z z##~qVBNfZ1jND{ikAFTQxkq_jPR--XWT@a$-y@Y;z%a&DeSW+vxb46q*YafuLy_xEMB)0{|cRE0CW<_8$P4;^Pc~-3t&tEhv~? zO~|!_1j20jC=or;eBPH;&)Y{641%9)6f-|}qlYb3>_heU+vGJ5Qxu-_D5`ecm46X$ zz!5^-iEW6R{hstE4n;WwKfj@|hV?b=n{8@3sdtAyS-R?a8TVHNpZogB-UyRWz9A;{ z&5W}cn@#xa%uold+_wUr z_A^p+vs$x1DIFiX&ADuh7V549{@}f#h-r4Ex-WLiIQ8wAvvKWD^{A!wTw*O$dpt!S zyU;34IZJr#Lt1%F%wsSSCw!N*v&54_wXp;&7>J|Md*wI8nAzF$pZGyY^z!z$k{zl% ze&vHOE~W_Wfs$O>Dcd{FN)PDc`)r~RB3T#=Uf+BxbV$tjjJfCMvtu)!Uo2T)bnkzyI9zyXxZf9w|!IQL?0tBL2&0^1NEuyBvMuNjzhQ zh)?EnJ|={Q&)Dbl`7Jp&fTOGsuS87N5briFcOrodfk5IP)i=?8aeQyi zZ_ie|T@)3zes=hKX>WAAv5&2O-#2FDq%!d%{lyH|@B_7-B+25w>WivC4s= zHud=9dbY1z61Wdc4DKYV5J@@tz+uc)Ic;EMn!``tKOl9wLnN*?=o4%bxwA58jU#=ggW0&918a5;nMU{1K;4eQH=?T&QL(8MmckX_k z!QdO~izWKhMf|W#$%|5Wa;DV*s~D6|U0u?1cXOHHrh4&)Hv2wvO&1ACu!w?z_mWog zd%QyoVT5FU$(Lxa`FG`SwoU4PnW%Fcz)Q@UOx81y7xSO`RZqbFm$6Z(C`x}OcYm7*q#w315 zjNp6bPs+ICJMuYP!YHOd!s2$MtkGsHAEBDE^6LF&dBZ0e1CSE>7MvCTt`i}=J|*Re z=w}iVX-c_tp$n@E<7CHUVm6a|*>l6{wwBnoK83X(nT-EQh^xPAs_*ey58U}B^0C*2 zd5GXZxSlBS zr;NR}_P5Vf`|d8r-?)s%RomiWuHBLLyRs#?TyjHORywxECuR!qJ-#xixb{Cm-y%fo zmcVD}TrHfsPR)XieK%$H6+QBo&4O432%`kG-|5zL0;83rNNA}my_#}1m8OaOLLwcX z7g_aO!e+Icna48>!)M}m?iRfAO_}4;Kox%&c6&p*f{*W0Dwe&GKY|f)BhvnfO^;F3 z?PAW%UreuyxcPN^Go*Hh5Sac2p3Mb0LSQGz z4)#IM!0&bDI(HwHQ5M2{U{t20`*=gSk?ub}9HycyT4^U2n=%Xd# zeI=D5-sG}!^Q`TWQ>U5F>)=hjM*qg=5PJn7Opkwg0fq{#<4IW5kbWm*jnrkM%lQH0H zAA$()Lgx)Pw`$&PyZk|#7f|?2Ow47QX7LJ5EyJ)w{kWKi$o zM$sWOdP5O4e0Q<<58$DH1qG_3ZrEUeiiX?1R$aNS{$(lTsso13;KWY_4vB>O?mAyQ zMibJ~(lRm>{z+{@a2QCd7KL3&UO?pk?rR{~WpQqk2-f_nMVosfGV?Iw0$ZFr)`w&- z2K}*HTGaB6rA6Z`N2$m26HOfjnk0k?9vN?&k+=7Qth^3IRt{oVF26k^>Bp6fYTSgT z18@P^qj+NO{69Ye*o2;4uck&Q|qMH=riuH=xrXtVNgYXAYj!HRVbq zFj#xXjT^$QmMDPZtS3TC*m6QyaKOxiccLgxMNlrQco@~)H=~SiB7Z8i&{-;vmq}6* zu_~*WTlL4qn!2Fyb)`AQ)tLlV&F;q^JFeG%Iw3`T4irK#4S|f2A?L02gPb6)x5E$7 zDZX1*&|ZDp-Ts%Uw=J%Q&2=NEp2`uemg`8_XU#ZR$xSl&ZHb1uF&2l0JPmLBOJXEYq)rWY)xgH{BTPBoGnw*joe*H+)y{ zQi=`pJj|Ksho=G7Z+n+a;Uz)Op2MG%FMd5Bi4Q&SW40#?#jQsHFGxVDZ_iD3*~eQ}T#iLDgI6sVX~Py9@$M0JQv5Hj{sSEA{r>~U zZzFq!WRD2RPWDzrWh65rvNzd#E2}b6WRuF?$&3)PH(80>CVTrm-{>}X+h(Cb8rWQ5HCWtOYuotiI!~vu8 z-Zhyo4}s~-rhHApH?yo+@Ac~My_Z{iRFqG#8%1*nP2*f-WyfBUQN4fZKI|FK(Q7Q3 ziPar&|4Pt8Vdbs7`InBn>w}4k8j&YRKeSV)(P6wX;Nm}_$kKL3+nqd!%beGhYGq#* zaC-3m$-Jb;-^RM|+h+XCv8yv*UFF)Ry};5z1CxJIMAN&8T)f}?iiXaoL}EvEu=4N9 zJ=4%8@g%Ea{mW6dQ(*T^`HIFRax8MJU<{L+Py4UytqzU5pGA7BZ3n;9@y;i#R+Y4t z5}0Ow2SzzfyUf^Oa?2guAYkPYi!(eqX>A`d0FG`0^ zQz&}#W%_4n=R?a_4H^RM58eT~qW;H^ADPAFoO(P(ahg2}GBx}DvAzDJZP;c+=4}gs zFPezQFn>`8JuH9zO#kqOieea@x+I&ht^GaGLIrOkA{?Swc_O~%RIih>3r}U^#L%#? ze&4r%?1!iXeUT88caZ5Ndw3&Aw7O%r`yh^gve`J(&>qE%htMjnS?6R7+uSJbOosWq zy$3Uj`j!Pz<@FC3%;1)C=kMlP^W9ctgcR3?9AACd8o(}L6Y59o`mF- z9k*DVH*?pY*;SYf@n))6U8bc~d2UrWxZD=Ya33CwclE9sf~(2tALp`F*ZBNc2$zPa zWogeF;T#|BROzob3GukoOW4iq)Qt5t9UfU*7-uz_VLUoJ2rFg7A5QFP_8mR&3EPyx z{!W7N>~&k9>GP(T60FzhKXSys{?it2&@;D^C3@$)by?_ug0coYDk6Is4SB-O z(YHYaJc^vGxt@*7)2+WkY3!d!KIeL>_xU4c>tY~b5QBQz{o93!4{h#<=Q{$5(@47sjHkf!d>04mSung*biiaPHEFk}Yf$hmItqpC7wy0$pTt zs#XM`fAe2yfPR%C@@m_9hzAM>kRN1W34(e_G_~hBx~IPmfAz;p3L!@Y(SUPbSy|bD z&f2Hnr*;qZ5Ap&mP0NE8*p$nB&w_57+AZN4mwaa#n{!H&UY6V~KS^OQ?Z==@4&43D zX}0E=Sh$ADWOOKsVR&Y$kRn!i>E+WFCu-hfOw(zzkRZ|k5vMl4p!owK#u)oJce7E| zj$^SqHl>0F7|BOOziei+jqz7~vh%_DLXHgTz2j37R@(eweM7^C>+IahaS$|+qImX3RwMK}w6_cf&|(t0@$~50#Z^PUVP{{`Osyl1iO;s0(UJpeiRU{1zVU zm|Yb@t`#xa6A#)0-fD01Z9)`y{D23`-w@zN4fSNE&HnTJpTK1kwFEs0tW#6yd`vH| zxQd?~eRAJ1PQL=Iy+_aMl+=HCI*HM48n(8vf2%G~GV$KJFRRZQfBMAyrqjJO(0}Ub zY!xb(D~x92C)Z^Y<<9YMW2?)hxsaFb**kxhz8giTaklTd>DhQEf9cS0$D?VQ$mJfh z*vB1{lXjUO@-qt9uiEF`Yfo;SUXEc?R?UkC0PonkJH%k{Ah0$%^KOQ-zK+Hyttq!OVC$TCO2x9)TYRv2QwCVSBp|Lg(-JgpWs$fiH!QtetG}v z;&GKAMm%?kwXpE`FU8x;BQ5tF6fxro2`;Z`&V*u8{n|_4vb^{qGAzfigzYJ4-s<+& z%ZDyj_-jhc2Yc1k+x)NEEp$KJu?cB&5_8iGD8P-#KoAERl`=@c9edU|?_ zz|;&8ka5ygI9huo4=p>qTc?c}2VvzIn`S3sIA)YuWA-j`H&z`eP{;#@~?nw96Y*2`Lr~31yD{#!s^X;|XxI-@%mWU~T+40E|gXzG+}DRA*Q> zDC4OVe>kt4d!8y8)ci;MoURLFG4T5@QH~Ugxj)HozQ^ivkl$qs?!ZDnzM4v^yK*%l zelh*HfHyj1Bk4rwnQyW{L$8fQ=%O)G!rY*g?|-LZy^jdO1OEObRzH9E{A@G8xY7R% z5hOrNF76BydvLx&PR8VRl9q<=rTK@U)@OvK8%C5P9h&~UIcY|xcYhv-zCL=7al`*X z@qsK6dX5yMbIbZ1M^T+(KrYJzzW|60zUZD*dyKR^yu!OXt}Qbhp-s2Eq> zx5R{mtbja2*yqqw1XJ>+bIK=)Yr;<@UfSJ})yQ%;XZa&V{fx|T79$C7@7pRp%jjxw z*{!{PF`~J1eD8Yy9LgsQM4oARHA+14oPda1q%()7DAar5Fb-KE2yOjtcs~K+6w=2_ ztk;8vFVVMaFzQ3-=%d%izI3U-u8Nu{eC`N4S6$26AAS2^KS^Vak}?_79UD(J@i*uru(Sx$ki>-W4L#B4K0=8qSKt^zmaZXIez`A4w^yHo0CWYD zN*27JeHYIl#iQ{sYSQ6g7L&VI0iUSOZ5m#qAJ^cJ{;b^bU{9>+5kmY8h2|sAP zu9-4XAREQ*qBj@{RE%x&+h^`*IW?$#H5Q`1mZNv#%I3&$m zyMof?ehZExh%Tl}4UFGm6TkOJV~V#nQ|QjyXP18 zXm3E@Nk<2nf&k7Y9L@M4Gqbex4M=xdlzSb9QjIML`W^OuE09HV(7k&phQcYq^e`{q zC^gvodTZiF>$i4QXC0wi@eFIObOD;F{`R~SrbUsyrM>A(E;WDv!*Rl6B^0a3IARB5 zb9-xRKnqhlRHrQV(R!yeeFNDFz*e7w;X=v-_M?0D_JyZ^XaBTD;Tla@eYYs@uj>KJ zBna@x^Y~wHtf67rqI_@sw@hazj|5?lyF{-2i`0P(m5Xfu)B7uZ@A0gUb6xuQ-#-vS z7aQ{GfVDL!ku^~pe{~94-3dm$$3{)nUdXwS>C#v@9V^su4tW1(YW7V8uo6}MEG z?Jh3!9FE6#(9ycyQe7(Q88%8QPF26gaw4%J!~NpP0Qwb}LkmSv#j(M@06)1-g;l^q zz+Da0D&ajdH6>vX7xFva1xpBjVD-A!o&m87<#c}Pm7IQO9iM2h)?kh^WD#9~5oki4 z+!%DePhf&|cw_cR13L(VXjYLK!yO~(nWnKu^mrIno~ydLey)1M@r{-|-*XQbDgO`4 zF%5llsNY0m5hXzsGaxy(39d@XIrAo`Mr}X8DgWZ|)C2N1|0De6H4RE>5;m%op!%Oh zM(Q0n!pw5w>p?pLOvZ1W?B6V}XJA<1P6Twp%#5K_svd}m-VF5r7PVA6x>~CcqY=A;KB> zrig;7DuX6?XGY7V^K|iM+NN;EJ8Mo~$*ODY!?{KVU3W*z7(EIJVIGP*Xnu7+Mg@f1jQXFtXra`6p~CmFJN(83!#fA2yDd-socz>0&D~t!@sRXR2xS(JeT04#nv8@Lbl3sr=q}3=+dWdo1IW z?){bgVrg)jL2c#1IhGm0Xp{YSZM^*CVADf96$1m~{#)+llIMe9_o$X8iH`!oSb!Ee zTm&yJE&?ZVz)W!2^&7~89+VuVc9;?1;Xwd|X$(iP4pgr__blSAS8-#NHWet!-?X7f zuKD0D-BZw;I92|LjAh^M!THkDA7VLPevwz#%g=c7m!Qxw+(%3WK(8*6@m5|kbg1fDtC(ao=aAs<3gn}J0>P^1A3cM(sK%nOu0HSl+1DH%ecarcwJp|t!DaKy# zIC5LgP4Wj3Y47^!lVm3ULldASppXp$_w5dPrHJSUsP2TH`xBli;`1c*Wyxf=-m~OX zAY5~Q;_h$f<9z8b#@ym>AYBl}^Q7vntBJSjF5!QDhwrF5A<5xA_d0bYp)Yv5PaePU zM*786dqO;i8p6-|AAzgJC3nifqXO*VfqY8ZF!4qOWOX3ZLI6L5%Rrq(5bpqE;Y|V~ z1Je&uK2DUjLa&#yN{Rk-+ zN|MHlb03r^C5UkG zM4mv`4xH_t)O%MRT!Qrv`Ym2S^$}>}19~3tV5LvDT7Y`?56o1t&I)&FBU&_o=L07w zj21vz8BQDsx&L?A0T>yCe?ra$;>;!+s~tLACy(3Jhg@^;F>ab#>Q<~q4vXc9wHdI^ zV!ffG$V)XA4TaV$yk}Uzw9TaSMxb?bdg!bi2Z$6!KR-V`JsS9U*ex8YADH3UN`1ow zH357Q5*$?QJm9WBvL>A58!D{x2-0*$6ju}*Nh*7~FNBv30v&h%LjX|37QN@5I^ zT%68c5@_MQzhH0ytZ-`^XmfRyF@$SD7&v<#X8(16!uH9NCugUpe=h`ycEA)DB=z;q zH$kl**-(I7?Yy{)Cj~nVwKZW|+@Tc9B+~#jE)c!je*E~UL{3ib4~==?J9|+m03US* zOo%wrw)~fXAB31afupo3b3^#K{Lv6(^_>wiV;oo8|7Gu0^WKtiA}*n&Bn#>0zSWcI zRr2_G>y5;!jzw~kW0@Y+&$W_X=KOgKkFPVx?-Y|lGx@8`6h($dh$XcJC?4CB06AZf zNK;>5-06!Vi%{+RVEOb?hA~o%8_dk^`j@WyOZ*Y%oXvv3VFw3`;d8hY$KPK|yX7<} zX~K_yRakr5QFCwwyr63lDVmI&9BkCa*LjkeM&O7!&$of3SchpTstIBX>M7tx8;ajc z`-!7`f!K(Gstuex5J^&DCU59uCMF~pe09pSwO800yjgxq}G>W`8V+;T4D0o-BRWgbOc&*w`ZNse_a&u=9_7>X+Enk z$x)JJO~`YkRFs-h-8AxGu`_m%m6qS3cr+C(@bTy}d9**(hsj`mnzApGDci1C~$121?X-?;kcWbp)jLf0`gDU9lefvp88eM4TF zHvtMnxGDCS8>H{iV3!^pU3Z16&JjL;=zcPM9!V6+v*B#yj$ zu#r_$fi&zsejI>?ogz38Lj#$fn%WcGQ-R42#8SsB3YLmz?Ifss%F4?}bjZK~@XvtP zOcQ&~j{50S;A>mj^)tu-z-1pMS4wb7wDYC>j)hP^FNMo1C`{JLHrS8Pm5nsyfTeMf zV)l3Ha&8IdKX>v5_0-jweL^`S;Uv{BtSTu{Z@`Zfhy@D!f4JcHNC;h`<7Us4TN&J5<8zP zE5_x7hK81ul2mW&Jt z8aV*3fM|F`i`fL|>iTq1_ch&sfD3T#%^&8X3l9xtV`mo@68az$U?gm&CoCZW>eZ0i zdJ(tB(1CD{$M#?4+9}?E9gu_pts)StLB5GtEEW`^$nXAx5V}VTvf!Xd33`R1^d#f_ zaMXgQB3P}0=QwgBJb2Bp8_g9oCTg4lesL@Nn_+e##j;ZgR0W=iYK~@56ms%}jq7*U^cAiee$_J&9K5ikuNKTar)=!^w( zZ7}?)510CZsyp~JQr&TaTZ_q#j8{r&ynS?~S#=N_i8N17TLrPVoj%w;yjvMUcj zo-s-7zL@D!W4XzN@Mydw(_qgtCw$;QV~t0`)4{^sfLhiq&ISW%qI3`Bye z4&^y%4Plz&d?O=xclazM>VT`MAEaaes|9LcgGr)xz9A&KKzZ;!bg=CCp#1P*Jt#&& z27gN|Y!}jcgv}4j-+n+1CNt?UtAnHE&;0ylc@Td@m@AWYldP{Kw}I;3!9Wg3Y1K5z z_ix{hDEb1%ABqp~iydvN0*g)(8=7$NGo@gE074l9t9ve=ZdjK2imc@i+l0RETG(#O z;_mwLm8cZ(nnhZ zLqi}TOo7apSwaSvLBNB%JEa6h0w8<%X?@=hA~CcN;g^w~vUZeh3k9bel_-A-k?+_a zxj2zAFuMW()lnuLL8*Qr09=L~n&a3$mz3}$t$U+Qh^C;Z1$eTG*K>F8+zIt%+Wxj$ z^aN_{hayu$=xTr)fpV-N2xh>sRY#YBi3uPln3g@nyzel{=7=8vqzB+3jxA2{w?Y2h z2FwQxsyj;A^@3O7bpLxzC|LLr%c%MT_tY}YaV7hP4 z3CYT0gcDVUEw1X4%9PfFllMCDBom7jSgo@06-o)&HC`?24d?EvG9C;c+k(0l4wmi5 zn-?5a>Eu{eqJe|cwutNOKToq)tBIM>wH4U47;f+Cn^C%tj352_dZ(ID_4v&3PG>rr z+Vq&a(zbZ=WBpv`wn>c@C;9SB-t0PY$?m-kgO0G;SwMO$6E{ zd;23SQJj%N)#7c`2UTy|Ia}tO`cBE-Pp)q$&@i9y$;deoc~VslGHG^L4LtIiuyXQKZxsT4^*7a-M!Db-yV0NVN$$b@-zg(M$aHaw3F#Y0)X)^?e zH^~-s2jEdn$L#k??))N^Io;~uNcWuii*z-?Vg^$9>FUmKEW(BI`}jPZc`}XCBi3?D ze=(`COjT54CzGVk(7#OH*FREMe=FVD7&P6=^rYIszOi2l(tYRyK>`@j`yv%01-K5H zyvr~8wt~Dr(#}gt=^%UsB4PXNS)4`?oT1?kyAR~-P)}a>`pxwrZj`HJD!XwP z$iqP*bJIDgt99p;SmgH>sL5DZSRm@WG&D4@XS`3=t6>GgM4h)W+I$>xv=|VJ%YB51 z5od8u18f7OZe+CKmk%>ed$?K#cZg0Zk4t(g)yRBo})Ur5D=#V!Nrqg!eH>}tlezznY6D)q#Pq6VBmi+aG!6_ zuN%a~;ieHa>A5yuKCmCD{_O(!kwfwBO#uAijIDpEwGd_|ss2*2NM_r^0?X62YMo;Eqi z%4O}3{J}B2zwPT?T@9b~+I)E+_h2RkbteT%8ypm%H=aCt zbdAXih8)_(M#QK%HouFr15iz}ewOv<^N`IRq{j}m>s86gv?wd%^qXR0G^hy?F1Anq24_7al|7g+R~wi5bgz?(n3^3V|%2j^NSg!{U}n=y*4y*n1=dPPhu zBIQEVMD|2bYS{@t(bSBu^CNn;hDPT-`V1bBzB@l`fo^9noMQKajDU#f2Q~0YePl|} z;UKmP#h8Gdz5O1Q7C4tcQ*+JTqZ` zb9Wsh=$+wZSBTkjPM(uExY*dPR$~JL*YfTNw27yx<_}ki?0QPF$A5mJkkY;ADqhPE zMV%S-M~-mFQ@}KRr%*wm-l(|W3b@bJBH&*F;Wd~UhBccUIF~N5gnFAoKFC8ARm_5d zYyA0~{Fxni1=>^=v$Q)yMFBS(5+cyHP7FUXxvq$360OChH5v}`eDhytXP>5_{fHqe zw_D=oY8tNLv=NWDiQp%zwB`;Rx1++&v~3Z7H0krnZfTXTEW&+>&rm|2lz4%?7H;W4 zRl}zxO=9Ayr^2=n<;D(M^AfO`LsAN6xN$Ss@S3i zj}U-H(}D`AUYznjM@wR|-4-*aXx-;BQL{dZ@x(q$R!}JvXS-R!AQJ9EB^Rb2E5Ayf zkgm6UF3~AkU*$9Ow4xh*%Rr111Vc)srwU^;FBq5O&Yvma1~Y@ax0|1ji>oI1fG{$u zuCo^asv2xt?Y)QWgrWCj(P-BDlIWrM+1)!CD$R`H%I;ZDFH`?&)2~UOr7DpB>GYZT zH;roEpq;R0E&iov1^_?VVdsu&y@rSR9}Is3q(qYsm`NWH_keULoJr?(z~-YwN$!t5 z1FS7pV8F%63=qo?4h|ZZKc)bR$>3vV{V;6gMPlE~?2+hc>iTYHm{b5vwktJ9?`>gz z{xfPt#$YyOcwH_;hEJZX`nX}Epg~L2@{@1g%ShE{eBJ#}E&66eb3?cb<|=F@INgxC znN4X2;5;sCH;pqZ!ADD&nOQcDZAJ~sEw02bpFb-*tZ*3f!8i((Q*Ako7mjIdD)qGZtPnf@H%iM`Ayu{A*#Ksazwc@^cmu5(>M^L;31QjwIvXe`gfQbVzRIhr z(vH1Vplu6jU~y*q{J-0`4PrWSsvp{DOA1G%+O+g3QGepKJ4Qk_C(;S2LIk+w*8SBUBXy87hs5hyWEZJM@S|6KQw*$^a+oINZCQT#^@>sKikPw-e!o=_0b>Vo0%3Kpqkpa9if0XDY3h&RPx z`uWfz1DG|GKm8sI2qO+YK1XPqLm>$LwFW-OGhakSNdQL@L`#Ok;!aOb!KHQ&Y+vdJ zW}X9n02TotA#j(^BE(>Q0kQ?4XV-W_si9%fg-~{_*J0on5gNK%qE$Ec`>~7&c5650 zWoxFxen$s}KT7U_kF>NF+-v`@pdGf60_2?{PA+MXY4ifcYmw)7=pg?F`DIw6IblQu zA-i}`-$R$+9bn(U-0fDNqr?xQeb!Kz$%Ee+bld2oMVKxln#S;iCi=2~yu;015Ruus zlwDRfF#nH@jcvEPZXre|HQnKk0kcF`mfpJv>?Z2uOQQ1!KYqNl4c2Or;sN>N&aSS{ z#5{L2B)xZ+pydR=huRP%zYQ*>$QNj@Lg`dqR(6k&h8ySbax(SMuIh312ieUXH(egem$h zV&)ekh)J8H;K;}nP$fRNy*0w`(psfdX5hAGG)-(T|H{d;>6hD-2xJ4%v=lm|5lnd zy2B|{tmKYXBFM7F&w`Hk0#J-BYquI+kr{y(PI|z3P0QTtRb61=Ksp5t;k|e@X$(~L zBxvPd<}4F+_ILOPv-5K>miWsGnf(XQ)&OBlw{i2N4kgfIs07>rjB!~wIPz?- zL!kto_rH33nR4C$etQ@DVEk5$PL80m*w5a=`qdXR4{({iQ_PS|^ZDOdvnD1MdInBI zyepL9ET;FLpVd93lpqu-J#HrvW-C%tsg0=MgkgW!MfRi;-bq~jjxYf>D%u%(5XLze zKeZm4Px~DhqQJ~9McCdOiaCh%US3B4`sBGtL?1zC9`-i@%WiML`3}>?VMN_6TR4ZO zJ&>&exIMT*S17I!O+;jb3PLt887g!r*HH-MjC6TvF8-bRu zIcl8s$<>L)-6oCePiz01`fX21mrPgjH*Cs9J`Z^kiv4+$?mJ*)_FV#IM8gFSCns~R z88+}oRICI(4aHeF&8(rWsTr~6$( z!qD&Eb^d3^$mACc#h+B!Ig6(P{qlf#vj&|8qfB@*_LEi4^hr?df}ha7+*sh?&=8x> zd=^FC;5eEay#xb+z{Rjd=psQ5G1Wj+`=RHd8fzib*C4vp#g-(JpemLOm|B9tuok6Y z*#C4vbu5m}I7F?}?}OfDSP@$|e+i znS0eTC+hqM8w$OS-rl^UMJuQ^L0lgO#$XBY`O~MR!bB?@x4IJ{LF{LQk9s>Ru^Z@f z@M(y=LSkA?#oSgX;U~%N{)6Z%G(!)K4#1xRZjf3yWgP!frOZMSD;Ca9(UAa)Z zO9}A9;DlALVzW}HtsUr@8X?XX$6#%n=*V=6fsF9CP&Mu2+y_T0^#Mq6M|!CIW|l|JF- z->RmCG-MGpf)PDLm@uJ#y;snl=8xF^oEu7&K-x&kadmZrFHj@oXW5{gJlWy(--6T= z;V|nigju(9KqrUnCeFoA=otU|LD7&qf-wsoHt%Hu&NrrNaUYLag;s^SsQUFJk4yy&M9 zE$0ISf0<$#GSYTzqb{DYeCzL9(vy=55(eCDXLon1h@;WTJmFPd=(=NNTM7OD&us~{ z?!^tQZ%OS{HlvF%iZ5xK#Rrnsn^{#5V}Ou!fFCNuYY)r((6!iq>XDI=KUAcZGSUE0 z0F+?n=&j%k$ui89)O?Q2R?d&4nU&@T=#2Z=Z_LZ-$q3qhm}r>iI&$hz!M=)P>zBkx z7&L~643Krizj%^K#%VUtsF;aaIr}vrFkv!^n3}~X#v|&0my`ts1?$wN9{mKZpE|X6 z*YL9@e>`Oz5mR)+bCUzsVZ7C)-lxRVIkgAQ2|^KU>ram_%hJp zr2?efYwcf62V!QIFbq9^HB7TfI{IpM`ZHKx{NH@mT(46h3Py@>C<6)-%6}LL0ESO_ z^W!-jn)~qHDXFNA8Gl133SRhCJ|oGDX2mOD75|~}DYat$F!+>{Lj|)FPeL0LKL3ro zI^z0C)xm24Y>CTBM&FeTWF8NMV*%c4#yNKvazjT`oBq{42M&%3bngMH zBMIH6fYW&<<_jy#aIXl zec8ALdNYV{&||KJPLQXGLtx9G5RI6c!ps+mKQKuQfZiT1ldltC)A;IlA35Iqsu?yA z_IjHaxFumKSDSf_W+k*lCkCm(T>3F?<`m)gegv zwYB%RT6LW!M`VKFm0bFaX0#XnePu3*|J@1>LsY8^d^)@ZmIx{#8HGGomYkaJBD+UJJ5`^UQbAidc^D1wFt4-^2Pd2Q67 z|FVK)|C0t^F+Hsort1~z@`TBwZ;isJsy6pc?_)gz5u(&bY)gM?SJ2YeG9)XSs5Ke& zfe8Q46TyDE9Iv`zMwz^Og4i5AaR9dyJQk3oq%Kor5^~(p&ZwKT9Yq*}_3iKf>dpSJ zBiNeLiPO#jaLH57`^IXBN3B2`G$iK#9UdLMd3(zg0Rm=TTG-thZD;&`ytu>}pEX)d%#gx#D z-OlAQ;`FmEK2BzGNuv1v&bzWWCv$8nsxe;3!Xc5_I-;krLI;R?AE)gntkdOK5D4iCCw0D%j={S{762LQ>=9 zlGl2msO)6@8rbaZC(fEZ)0P?L2>+@RT(4s%o}5E zTS-*6R~=sB(G&Xx4cpxA_R~-71Mx?7Mt$hnf#Yr5^z{?x?3IP9&v)NsBM?CR>WjulMA z)*eM-9gLcjF4j|)J^-3)Va~dm^PmlC;JX@#T6O|Q$uEm?gO^_k*CPDmxSnG;a}Kn` zSU)9CW4tZl&PmF{rko{Nks%obh31XMfWcJ=M^NREGK#r`F5>q4V0OQH9XN0^$i(U# zM|?HG?B*{e;?_Vt_U_KR=1%_e$c1GHMP~UPCh(oZ(L4pvDP)1{w-XW&Sn+Q4D^Q}d z#%nlbs`t$f-!{rbHQy>F{zurgqII=3;vo&Ky#iKuqqKVC@r@0&BkZNAS@5lNhg4J> zWb7<{@uRjNqul^!=W`mbXSC3m z@2w`!fOQE-A*ssAVW8kV5-a%TG}jCw$(5$91OqGK5(&M$050s?!*-&V;YuCDijKrT zC{Z3ZX!gF|1`OBRpl);EaJv>DgfM>x<#vv0283mc7#o;(Cj3vhiYT_ZAJxJyJZ}?k7}HxfKyLX=|eYwx|WQc;5 z)q?0foVoyL)jLbzxmTeUIL*F=EjRYnc^-uP=A_D?T(&K$vB(G`zVZK+UmQGlL|>T~P770G7|@*(QSIHEoT2 z!&jb+F zO_%aKVTI6=L)snh~ zKlX9slw9oa;Js*4oh|F#x_lE~nT`Nk4)DoHW){cRY3r%ka4eRpn!Nhp;5E2&nMA`d z1{fm(Z3vq0Uat``M(0GP^t8&^Zwd-pasoOoi<4_Z4b=T4 z8DEj>{})>C-UGLfe^m9P0P`Urh`Tt0J$03eiln4M17w|dpg#CNR4^CUHHdYPun1Z5 zgI~tvN1Yc72KY~QiTSzyZqEIYy&@Q&05wrjQO^^R*GMx2;9$sc%%%)4M9A12aFt-| ziSSwAwAdEEr>?GUW%cQFv#zcVmQlk8rdYU!hyC8rK1kSc_{|)|O7I?=(YNeTF+^TU%~D!tr=<=7E#=S27U^ z<17CJo2>j_r)+~8Gayx4bQS|fVaN;<1Q;$IGy1|129Uh>o==xYsBaiRZ((Pv_7jGg z|0WNm6b=20#=5Haq|uQzo-ZniiT{sctw5NIt-Fa600Qdua0Rel{lIPnl>ua82z(HJ zp{oG)dB0~l>96;#Sr8C3e3j%qoe0S|z`gv{*oAxZx5;RBTO>CjGE z2S_;siPHW1UC`&Rf$0|6V-%f9QCT#fx*a5wvi zF%uqi804w|G#V|?(^OaA8q!o_356I2sB;`}0KEH#=Mt)kdeHY~;`SUC^a6ygg0fME z$03hWz}(&(vmj?{r=oL#3AdcR0;=sDaOY5z2mk3kLMUu5TLWasW5_ihKh7Ck4h{}} z%%uhUOiRb`uKt9R63n(eii9&S**}ez@D2X8y|K#aLN5AxWxLISB1~SO=J0T^qXUyv_){>6f%XWp8(a9HL77!Ec>wVwfjRRD z2p0n{j{V{Ua4xVfSo1CK0H+%;dB|62YlB)f>`7KJv2l@#j2IZJ1K?2@cM9G6O~!}9 zli?G8x?3khxn_hSdK@Gi2TqqryULI+IASS-FF!o=L@s%B_5WDw-t~nQfDBbtOh`ze z7jpra0&mTHtOSrn!U6*W#;*VC$MvNQu3*SP`amc=zO#7u`Qo8BA zSO$5`9rdu-^X`;{QQXJBp=cf;50?N4I{<_Lrw3Ar!YSP_fJOo)R3cYPA*I=EFkdWDF5LE@Xs=gVc;3HEW19M&M8BBDZHVeg+9$2 zS~wHX()J1qqcq;;>x&EX$KTB$E(!@y;E#QhyX>j;Tbec>|Pl*XmS;@3?y zw2K*AX^)*C_J)+i+UWu0CV*T7d?|8;7UijuUUB~`-9RX+3e?eosPjGLfC0=byB758 zz1;vY%>0w?`im@1JWL2Uur27HVW7GJ^1tONxve)6CN)qs`knfP{fjQqUZo;t9(zu* zyZ!V3kV;%R&dTU4(EGrnc1mdU^YUBh?h=FX6F^WnIqyl6)6jTMeMkLpv54vsigHlv%r-nKTQdNuQ;?es4ZziB0eMF;OF`e(3=la{8G#X=pbV zy@#$wgn2Z09?5kUtAP(jdDOPzHbFyULta(e(IV@wLwf!Y@6MNPeFtrycd;wsWe{;e zx-+%e1oRE)szGhl*FiB#JrDlsoqXy`M9Gd6@L)vn<(3n7(n}{V&Mx0E3nnZbjQxCV z8uQLwXU<$gmIc6s{6kb-N|AD82?fK(8K2*u~iztS>7srvi-g+@zB@bUYXU6DoA z+uI8Rq4VmzhMv9eE%(r`3NzC5%?SJ@0uNYkI+keU4-0wNnp1~w|6ie_^uH=>gYS#^ z!IoPb$!h<=@2>JEh-BPTq?y8%$ORP_EK+sp)4o1+l<3a<)yt3K*aX-9vh%LcD$*(G zkCM$13oPHs?(g$`n@FJxjXz*CH`@AUeB3%C*$vyv5CN9Jen9DZrxGY1T4S<_7?rHZnisv71Ps3BV4-8U|flZ9oNBTd*#>9a4HKk&YiKs zpPKgunbW^s*RLr1DR89o(M<6D@4E$ca(K%tD}Rm{zCqqX5T={|H2ljK$%qjrGkorp zSNFLR|BQn-@9ghxZyz78SizRLpRqBUl$&Epmo8IYQ@vEPMmdtTtt82a_R4pBI0#~; z@RcRxx{^xogJhdjpN>c4x?A-R4&GY1dHDmssOZm~G4iO^tbR_^kMsbXQ=W`x|8hbX z!e|TuL_?_FdE3h`>V6kfZbW`P(D|uyhlm z8ymSjxnvcZOAYesOHnP$mWkRZuhV?C#73{j>tQPRT8@*g|`TX?w78ZS;7VIYz4 zNRA9T9p-*ntK#x6&`GQ$OlgCEg+E*z`>_eGllESo;ikoP)^0R7cPzLvJ~s9jzelN2 zVGAZGFqpk8&)+tplGV=W^B|5*<#TF>_yf^R!w(`eILeQF_o6;Ii&N{0@>)~Me;>-% ziz+KE?ZEx;>LMbg>3C73@%_mRw8Ef6a=g^_KIdt)*K{Ze%MUM6=@G@{4;j^)TT8j@ z7zXK7`Et9xCWV~EcmM=a)WBm&Q<9nW*8?u0qztj>OXyG44Y@5!R+K2oL<_)sKr_r{r_Shm zCgR?Re+RIxxH$3=u6J`zqKm)gZdwXN12LlPZ4(iLtoP216`o)s@>j-uT4#}!S-veh ziee}*1VJ*~{HHi=p3qq<&?+&5hC{)1`lvCJVUG4?S7@Z9R1&;Jq)95V-vV-@^lejI zXJq7$WRE{%K}6i#_h?#Y9S^VBY8D7OH&i^nTO@7|w zXO+47O{(0YF!;JV=1rzh`ApDnh9{HxWd-CL;QKq^A2ke?Esn);T#JE0Tc>iRe+YHw z9K;4da!E($Dr}T{?D3#s`QJ5{dF@!F-4cZ|6U7JT4h#U+&wnfIS&SZ*LmIQz56NTJD5V^!bK>; zCI^)V2vVgKx<`RK_2hvk`i#FFt_G3)0A*Goco><>j9rN{6K>b|cV zj)YrQt@~GdbL3KIV?O*q@TmXaf4gFA>;d`O&(3hQILEUv5;v?XPWN%R=$u>rA0$S%Dd=%>4#}1QBf-9VL+d^EQv58-DY`o?24=jnVPELm(Tc+Lkd@2=H$Q)iOyG3Dpu-e|W1DhH&zGT~&d%y^}ZWbp&uUr+Z*H=8g z;Z%BNdW%9qZU@AlDuUSGxEvRS{P7x$^!znHw$bZlWfC#+;UGYw;1@1{zyQ=~33vYf zfdzo=k-Z30(zF=<|I{7P$La5oj30=|k{1nc4Q1%N)Eah-wS}vR zGF_}=Yp2a_325+skO@ND7k>y~+fUoAt$vVnXONk1?26n~%!Okye4WN~WO1WIWE^2{ zNtgb&x3;E}JzcMVd8Zbyd*rIa_bVwEXCzX$d9qlBs7FbLWJ>00&w&W8L{K6VuymA_ z@gZW6-7Wp{B@)*1(9qC}Yf8Nx?hd|{Y#Is}b1GMK6r5Yed9OBB;`m7$YiL}CA6KW$ z&B_XfSH~O*YObFC>e@y|Jzj-+DbDh7Y>#1kw!e-HuG=% zg&bP`0p=K^nRmUs#NdOPsGl?Hd)6DJDcI`0h1M#B7W_t!2H!sj4jsbFuafKsMafLe zFC%4SJ|uT_`Qt{-CwUMlm9>U}A%*ZCQgzQ~rc7(Ez?7g#nC_)qB=zQZMFahA`+Z z;f=&9u8)3L+lRe|d^npVqz#i>ij_P{nyCXukDJNX<|cY2hBVYE zZKRMirxZIG-F;T_3U>h(sGZ3&!|;36ZvpWPya?RF`ntLVRMIR2RjY2WNW4~wEV6~M zq+ufv4@YYY!G0r!tUmi0iz;tgc^t~?BfrLxn_5f#xw*{aEvc{6i%*V^;RWF`7oe}> z`77`9ulac<^sU!TLXFa{W9tPd7ivq)SpkV`3qAR6z$0bIr{PNfouSTfArN`RFV3SE zctw0oHbf@Nx;je!I(byJUMI2ISa2u$Iys342M2%XEOA3*baf5OtJ6Yh!Ug#G;bq@L zhh(!6+?0ftf>+16{>ZN{Fy{PLh?D5ZHij93#?hUJjM zj)AaWX_yV}>ksYv{y+o?to*z-NjE2Tu|E;ji($*kGs&kvi;2KzR!^6@;;{?+BLQj% zWxZF|FO{LBmmy9qb%Xz0=>N0;PxU?Rg(mJ21!FQ?AF-K0X2m0diXF{#)>qIw^sx06 zd}j0`l2k}^x~5NuXAcR^en0!MEKaHYTw1VzElxGL_TOwHR}YuG#^yBJ`j>$BFN_ka z6FnA6)i*v2x)4*u-&`j(D|sWe6oR#GI@c4fFX|Zx(}EOR2F{27Mz=*8$|xa+gOHSz z5LcykaU%sMc49QnNjt(|=Ps)k0$j&gjFkU{NHk9%L_%m%1~koMBUIwOXwK~a#KH|C zH;N8pRY?%7@3Wt!X+HD$QHLS1-=}{m9#f3!_hG4fc||5Qj?BC_?f{%k$rjNCxm`M= zsV1q9yW1(2;Ija!%s!l!42WuK(!5fo=ZGujD5vUf&Fq?bp3hc3XXO%of82N&J(L&7 zhjfR1@77XSk?r%my@Lan_w=(RaHxSC63{1HnhlU}3FVSjkIePB0hjLz48Rdq;u4hx2`N8eFL)HYHhnl|pS;k^#A@Hh$k( zUyRA&`1tBf`(KaWZ7Xf9r!w*wxwZAvi0|vV5cw2@pOx68_qbk0jtP77Es!Ek*Aqmz zU^1Y@#%?V|(8IXt@254Qy9Boef6k?U8*o1O%D-F}Cg!Tots}0$WHG|L=VsD$BK5y8 zgNc&R-OUX>h;?=0$P4THJqTfLarSG1rda)Z)dixQ>uXj(zCK#sjPZTs?ovt26 z5HfsX@Botp>>irz58)&+;@ifa&<~(#n6NVV;LRW!0sNZp!N(=%e_IdiVt|%HZ#}RB zr5Dxcbw;0^9BO=e+E7J6*W4#9JVxhpyE_Xc}DpqxpDjLj0y%Wl4s(SF0w zdu04OGWfYlWGDuPGUd}u_x<^F$|I)gMo(3Umpa-`TxU=F#g4zz5ls$v*SV^VkA8^m zj%za8YbVHSKDfJ(5K?++k~(9daFF}*Q8|rlGmJ@)uKK6gH6Q4!cwR-N4Q~=F^WAP zT(vhclcP}KCr}5XQLgLc;B`+q4y8j$e9aR z`&Hh1GM~;KzDM79|Fws6$B^aw3ud*WXrW<5kZ!qNr9sVNWz($Ka^i!EE`XOstyQ%; z0DJ>PW%ZJvUjiYdhFE6f0f}1i7^tHQ3vWC$wuSG5gDPM#iXBS1v}+0Ie$U|4fvbrD zxQ4XS?wu#Iuv!AyhmG(ziQ33=wsBcFGnDZRBrF*U;7pQ#KN;+JD0Tn+)c%Zre54Xv zH3H$&Bo=rc9@y!O$XOHXF(3<-xOZ2PpEyMOQ{@STES%20TTOL!y&2Ag)hHC4YpdLw zJeei1m)eM!(P7kZZ?X!75gkSXOMOn7+v3m!#oQx|DncCz9O+PD%vXpWri(S~mx!0w zCz@uRGm)zJ55GUuve;!Kab1Vt8UCd07i?YhPVH87X{SV(C-bGZqSSNl#^Srlw z=LW$3GY_&alXqS_p6w?lYwc+B1`>&uH;n6Ns-s|4L@Tj8HjLI1(1N#}#qRI0iez~F zutn?fKycYBp~8ue*(8Yz`%V^~AuP|94{N^k2*?>@u*n&oDlbh;pof96^3I+({8%%dRV-ad#W<2ahgBrv1tdyZZ8D z)>-?x#>oBY6HA>yaxMoDmr-5&lXOc_f}`*XU|lJ0L~r|&x_$#veBz3F*mEA z7JmdTi-zPC(YhN)+a`VbQG`XKC6Qbt%i#ysgLY_41?k^94m@!T^NkOxdN@IVDXQZzh2{i0!Lzl50c)F zH>$yi6Yekh^oKCw*XAa;kY+)LO8tI2>{X-b@t2f}o$|Um3Iu4X!|Ba38!IcHP97!n z|AhR9-QCs>8aQ(3Yb8E=hJnaQ6hpiDgWbgF0c5pc3)C6J-r?cHQa)8%@FnJPz*3rC z#2l(9B9EVxlyq4ZtO@TP-7FMF(h!EhE=8QFUOcy@0j_8R`_u(EiXS`&nRP8sge)_1 zdAnDHj*hPWO1_q=317+x>K%v8jRJ$%DPS^^<~sYw-WxZ`^`x-Lj))ph#)imRFS=tGXRp3 zM_CA79nef(29V%=Hj0<>3OopDM4n?|<1GF0!;brjM0}crD}~Wh69-v;?P9sjX&jzm zVp5p>q|n4HF?QFnzzkt#vSK9{P#arz;e1YhDMDAbp{j&K6`TlF?V75PU&3eZG#eG8 zD6G%P0YWC-vjqc&^tGF4!=gGq0XF9M2lO!!F?OO~4fHRT#9iu9EbT53; zm-5#QyZ-!f3DpEo+5yD?|AgtKvF&ZRo)|wr{~-Uw=h|?{_mfBU)n=#`f)GC9s^H$J zd3bY-)zz5axy@CX`=gh;vemMxk!Gume6A}AQ3jZUzqVeqZ{J^e58g2rTbUbbVA8iwo>>%dIS#7WbdAn zBH*BYK)|#1eZ4O!Zv2xpGKP{c43wNgUp&Ab4Qnd!bGu(5qbgPOxsqrPnu}~9J6JZh zS|0;5Q31dEvB2MIp2r}Bt6KYP^HmH>wxqtEl9}?QVr4m*EEL1@IA8#Z7uLvntBtvk zR1T(;mDLywiZxHHH4xVcQ6QkbOS68xRZ!xWY3^e`NyB7{D0z?IXJmiSU;jvxl9WUu z1Oo~Yr_5Triyd7vf*KH^#O@S~?tc8eLK7Yrs^H<{cPdvbiesP*78<8TLee$rZZhGn ztK0TyONkab`b6cW!f#U$Yf;{1&|pibA+9XV7hxVj&#lIm2OexURlXR6f7hds1#&&M zOdl<|tc4+*F%3({iL0SWX{tFKSNAKeNT?K?TW6Z}btnr93O{O5|V%Xr5V+jn%40UVRzKfnFYNw1r z_f}TzX=;LVmYNNmmNT_qyU>j=u2XB2Y%HLr(e-nggN$qu)*9cd9)YScXLrB_(|dB=m6`%m0pdq z+qla-#;Q3`n6{xRb)zlc=a;floy*hY2rD5|JwC63{FipAQ#Ta%N1+;Q9uC?dnk8eo z0XfnQ8@*4&2$!+D&-2Wpp=ER9A;`I5`H;J2RJGwI_MkK|NuyqnjfDiTFFX^&v_@5# zYc|OX{DD`$Z_GF}f!e!1!YBq8(Hx!}QKVg}bysI%-$Ky#rEFJ~mnef+na+URgHoMw zr-FzN5d;B%=0j_F{g|V99oxJ&g(rsAf4>GcAdoi!B8;8Ss28WDhS*nVSDMRuhbg5 z7p@_)tyq(jPDH59?5*pYS74I>**;94-)YuaXr*VC`?w)Y8bXyiv<4KoNRXHX`;KYN z|fh`+iKokR6Y_GrM93zA%BLN3>5ugmK5HPm1=$jCs7D`T2jg)R!eVk~ zA(Y~6B~}Ai1dfl7%?}S%LUiS)`4%O)mP|h0O;QEF#|zZxV-RgXM6%RKIShTj;mxkF z4(%2Ey_va_EmhI>m%}bKg3e)-vw-SJZbioU2FIM58vAv#!m0zRIn!@mPZP>95jsJ) zFIDxN#im%F$90nZ@h`7EZwb5ey}YW5&t#&RgcmAX*4FGzxnZ{H5CSdTssFXHp;o93 zxTlJ+YG%kjf@}%ikczNqYDUA4nP-F*>kk86VaM51)KJ0O@wb*_O z$rf|x@_T!Ep)VoYufd6?r7Ct!RvzjFx!h_2P?Z4+BAgow8XFG`-uH&qPfmrr4xsbe zc=|MlPTcCcCw~5|XopRWfQ8CUTO_Vbr%x0%Zk`s|igiH(UT8X#W==Y84kxOye?Y>@ zlvxCOU4!tOT+pJjSm&ol7}6>#Q4QMB8m9qLBSii;RBFf9o$mSj-$m!RZr+qSa6MES z4D}7M6=YV4r#IR*?rE*4u+MPGS9&p+thUpuM;mxSQf3hOPy_Q@L0PZy&m@iYouo<` z?2t_|o9hl8=O4tmuQ~orJjwQU!kJ%haedk1Iwnv3YF@tUi8A!9cO_s|(1KC`e-GFy zCEj%I__Rrk@K7p1lUoSUZme(l=~b44<$>?^GX>5z^gmkH1p6<` zg4X>!rXi8%Y04tc>|d-0`pge8cHhFxvHEFq`CY4kjq<6Y#&Mma+xR=`0tb5^g;6qA z#7))yfn(?IWSWS(YMjc2huZPCWJ#H_nU5a?acClhR7jjgeEEEHpIl(9zFpk+frM04 z9>=(NonJ87qF>C=?i)v;Ds)YYBK67bdM4KW+4PSijDiz)Bg&|Ae^AJL$K2P!!^k#IYVS!QF7pd=Z2Nm+;W}OgSP*mKi34 z6ce56Ji)$#Kx4lpcL#;gzO1wnzn0?mVO9VLNMWtL7c_dd#hJGNDq+B5<^COf z=%8vH(~!E`>T@bSccczNGf=R*jH%r=%syS!2sCPTSw_BT>+##UC&AF9I$4|4NoX>0 za&l7H?dIpQJ>U81(3Yb$`X1!p%w})&@HvY$L)iITe)&4Q zao{j1-nNPFfN_E40ODERi%(E!5Tm=~`nu~zD4m2?97@69vyIM}aCrbn1f({x%CVCh zeoLMh4PCX)sBu~TR5vWP1`q@j0IGCa*(_PhJ?vB<66>3Q4JmBnBUo%g*zZbZQ|pfYlL-BBz1 z0`R;J6b9qN>eFo1ZYHGInA73o9bC_r_k936Y5HJyM1&Tt--LH(2MDK-(GEBoFa_Vp zi-;jM4YMw9=%o6Qc18 z&$A5Y5yy@UEe6}-_siZg)Goij4r(T8BAS0&#~cs5`o*~H)5myD~ z9T~T!F7mTUq?{NGoi~l||6n-!Hu7Muo#FP)XY1dht{xq}xb8!lNUk#-N}LqlQc#$Z z%AT2{Pq#h)S^!b_NPa1tVeQW>$L#=rna0sHP_g{>|CbLPsuh%c1nF&t;?(el-IskcYUdNr0K>lD1Sp4 z(Y!)XcyOK7#l)$zr)LGfddvUT5+16J`vMlxUzr=FjwZ3xH_uWuYJya+1!?oU{b({d zU)P^cENnr>hWM#VOPAu=1k>zD9#Z`o6t|+h#n`Ps-X4LyPOGR z3i*s9VOAK@$(F;}6hERVJZxTFj4q}E2Sy^6xBs@OoKVl?`1EMEAv={Ed4c<)A?z>CQrC-gOu>6Q8SQvM!G=Z{xOtaD ztxG@s!KitkLVi{Gxm}RFlkk~VsRYG*iGuN}n^8QgL-rNBbVbhP1Fb0A^s+LbvOua6 zk|cm3ZX&v&U7DE30Rc+=RrdAK>uLAl+YY_SAiq!yWVD?lS~O^KQDF^CxZz+SNT` z5uwS3={w7OrEUZrZzJpff0c_JhBJGw9uK~(Om5QLuvvfp^RI8d&P@|6yN=c;NcYCc z%olY%xk10csgnQxmdJjSt}Z*uy1BHCByGkIv)05 zm5m8cnPoa*O9G2UeD9rN!N+o~#{**0_>_eBL5PCOf7N;|ujTCZe<@2aBx(YSQram< zQT)st-3NCC_0g3C39$}S%q`RL{lE|%tbS_gU)S)SpzLYw&rZlxdxwGr=3W$u$;Qku zWiDr&2N`F?(#D07Wu3HdoM*I3p@tZXKacc;Yukxaj|_{b|GOIpAM<}FkmlLCYITuY z*u)7Bj?9*f92}iWQGAv;-Kal^wR5d}(W9VK@WPt?r-BI+rbxV!$slv}38+^7yFJB; z=|%leUm_d1-OdAk_7(tYHQ9d`R7c(ZR~HD#PSiG;@Sfe$8xvNEkFl@xr4ei^Wy&r1 zs%!jAvSi{d%WS~dGxk{lTmx|z(sE}P+at;u$|I3=&%{m|1d!?;d{5-H-Coq6|1A8G_Vfg0E%0uVNOcf1V zu~J7R$1g5E2%(-W;${Y~st#vHq%_aqw0m%FghnD9q$#nnm=n^2uyf=Q*RKmDbNQCO z^X~SlchiB&zOb4DyB>(D%nvX6>5WXCI&n+^51+#O@YXm+#`(6lA{n-W^%f$CEd8UT zhbW!lu8_2;;fYSCkW^N!^9viA6YKkdhptV7MjoG^%mf;zc{x5ZI$8~I|1M7dt#wgH zu?VXihrA?GQ6Q^aDG6EiBObyB?zM ze8k>FSC`O7f!Bc+Pwv@mw7%L+$xCz993U6Q(i&5ibh@|FAVs*G^ka8UDQR~nxG?A0 z)dzbNcfAC7OZ{j<2z8j*5F%vHwYNicx5 z6zC0$T9TR=&b}SoIS(m)nAeJ8nUIJOf|Ba@dfSAuGR6UUJg>EsIf>Plht?a(CgR z#1vX#+MWd}2>?PsvhSZf4ai)7c{8#}C?q8QPYXb1KmGO<$^?Jv#}7!lOD0DNj53}r zYQNi-|M}-xgNquO){&cwS<3k)(&m$P4nx^>SI(sNDSfxjY(j2*=IcQO^7^{wS$Y>P zwcFHY@)&uD@iCd_Osc||59Zv&c8_hUo0^*H>V&fOC5oWvAhG4>kiG(SQtyC>DhPAi z+A={309lTWsir!;PI6xyJ;`cQ-GEehSj*JKXlYH^{*F3zP3Y!2`L;OkwhQ9(&0a z5((jqiH_@`+jJI_`Pt?)|7382cW*5{zuQ<1;zbsGUh?ul((a)krHYw2iyT1&es;_~ zq7xibeB!ip%o}34oZo!&^EZ$47Mn562+5}PLs}$Ra%p;`@k=zh)dHIfe9k}HO_)E9 zxYBs?Pep+=!#He`0>uOSTV8E5SL|QXCK{6Ruc>2C6H3h%h%yFO-E95&iav%g#3$O3uSLHU z-$kT5%WV4++2JU*V{OrQ^nfk{O6FPf5*mX?6n|q+GUCX`4vQy#WfbOL7%D85YOVg| zTUUGV06V=XJW81@30r5+wfXnnr*uw4+;2GT+_{&yxNROPN5X%Xlya!$IH6(XN!QUW zzl__AZyC?lS6pW=p7xMVHNSP|BWH-e!f;zTq73H=_VKrw)~|=>xsm~RcB1E+ zc-Igu>LPcS?wD4!HB_HkTvi+*>(Aq$9uNG$<|n&O#qqxoJhx%v94+1iM3BR6RRpL( z0KS5*44a%Kc2(T6Bi^&V<*59AFIwWsXM^5RVtk>;lk|8q2uwTL$h8ygA@3XRLM}+! z7A`B*bAwuc5!JScS7l?gg)5kW3Ty0+!@Y%oyj~qdeye;!2)UVESyKhAvhs3x1YB7g zX!a^Gkq&&lpWn~mb-`o*lSZk)@j9ZW@G33w#R%3hqn=NuZaBlHYhp|Lj@(>W%K3o6 z=g7t;wVA)~k3VfG_lh&6JZqv;GsSdUzj2T2M%Z1uosi+*1E20jCp?Id1DE88kOB07 z(ADjRu!X+|*w72!1X&{}NV9DhCJIfx`~40tIvz&&Q8C3dx8ai`xaoZeg-_K=e?K-IlIRvW?u;LMIO=n!V_7Mm zUP;~AS>PdtJ>;HXZpdpTe)*yeAq$9R?)2dzvI6~IJ1fMqX2}sDN-8QWc$w!?LpnRW zcRLKD?NT&D5s1t2?@%uOb6I(B{FSEa#OvJajt_4S9zMd9?a+_Nc%!H<0+exQw6zgR=&R(VCY~o$dKbsr~Kxq_4o(Z(hRkxA=V$t z{NutL=5k^2$o!`iWh~Qg_1~N~l%EG*zxYV=9?~|@q`m3(Yh_lDiZ{K|6U)35COgfS zn3L$?<_4ZUbXo)&kpNT*#a?)83A-s*Avq={2B3yjSIkLfcIlmxa;L?zX!3s~>`grS zb+KV0jqp?JTb5g{>yXZ2Nyp?USll7VW#-dSthpWU?c7+?6XJIVnSwt`ruY8GhEwzI zTpkM>-KEz>hT7U6jPS30S>1zdLDLIOd}a`GO5FSak|m(iqcaBKgML~8)7$-aR%4>?pPj$F9vB)?s2Njj5C+>RWE-IdR;>=6qKPY3?c`WK6&XI`au2w+x zG)n#hKQTOVdQlkUt|$!jY_v>GN1kGGC#e={b7sk{neq2MwIPA|@91>$cP6;?a&oGi zX)~cN177V?hz1#E1W|UK@NvUE<}o}R-ag%+YstYeHpC0GCaKw!=@B2xn1V1qVk1x! zo~7-ttsLC028uI1ew6HUfM5#U_;5@Zi9~9MZwMPQJX$sytG_+#mEYR> zkSrAXHVwhq!|%28B%~yER*a9OrOIf9sABM0iB3Q8s5w0MDQ|i#gTtj6Tv~;JqZ*_d zM07zBzWGXHmYeZr+Sv`AlcH+a@|YDVXnL1Gc+RU4Zr`F>^KYzB}4tU)p*Tv zKa>0N`gXj3pu&E>1iO48iS#w55F5H}VUyI?WUpo4dXbsa;|E|**fN? zMW3OhkR}3~pj*KBvW#$P=TN|$yw8f6XTY^<4mC4UQu5bdp^+6p^k{+Pb1gvyB$m;7 z5QGyzR^Oc+OrceD;OBJmrJD@sx52~BtJE#me?tojI0Rgy0m+Uo2AsG$OIRI!o zD=Q0rViRDqZ{b?I6OAu)JNvT~#pT#t@5Jt@}icgs1W4+?UC@Yr^(w5$=D_ndL z7JsAGQw&jX>FaO2_RxZ8O(pP?%j^^1n9n*qc_;GIrt{ky$0rFyj`?#S+{kWYiEv>(nVhkc5x+5hP25W9jFC9`Ls{4iSFJw@DOpw%<|%Ipgy zpH4UKC}@cWs;APqg3VTCiBLGL&i7WwG1p1Trz|-AqzX(8Hn+Dz2@ox5oA2?6H z6f#N}A3>HH=y#rNAhco6bR$Pd0Q4BVe&zruEGyF+%`3BWci-nM&iDiQ(WA5T^#(xM zp`}WHW9`Vj?p}hJ z=hIjwB&J`dAACDNMtP8NFcAlDiCOQSO$v0D`GIz3hKi?BLYO@T{5gBYYq=0LO z548BMYatc-jv%RyaF}V3!&aD8pZZ>Sq}xVbQfG;Ixcq0yMD68yUY>av&nf$R+V7`1 zaqj@of-T)i_GXvw_|-b!pd3-mbzt|9PPnw(2GJK{`C}AkSDWr2R(#Re*`tXxI zNp&XRWCP8ib*S2YrNn>{1olw=lhb)LUIW@5x&Vy@gu&6y!nAEb4F>v!7B{S20qqws zPRlAPjN5$nL2HMNfHWm;5U_baL7}Gung;!aM%G|YZU8MN_~T_HU*91Hveu6upEMD! zF`1rsdZ}d}-;_*wcOs}G$w+xSPV1m4SAaEhTEm@;&@tiD@MWSEGuy#o&Xk)e1Ei^| zOsTZ-cMY=QcDxl7x|JA(z0uX1t*%G`@Z-!k9w&uOZ8+H4nnPv?9ku*waiGC%>UWV< z2B%ALcvFk7wblMupNYhAwwmm{=lP3MG2tuEKh?_Vm{PGedwtHdTjb8c4I;mO<%o#Q zf{Qg%{Y9P)FUCBX+893bv?P~+novUj+ZhU5&*FTjNE~`ez!yO%Q_Hjaz&f1(jWBrc z=e@}uZaxj_KXkLI>Thq*9AzlEeV?5LX-_>AL@_#WsEy-%rQsFu0&jSyoBH9JVjz&i z(QTC`12({5_!el)kQUB329_k%RS( z7X#}VVadk=jLUR;A;QT7Zus|55n(NS6H&I88CNRx$TBFzF$!#H3lpbwmBY<#(pNw} zOJuHi{nfnnV-fOUxiyu*las!abovJ?=oAsCOP^Nh=zfD%K|sBWY>0F2jSkI^J!Rc} z(YmwO9dsiH!9vd;FF<{>%CLH!f27oluv4fr*_b51t*x!TK5?q}#xrSY-EX#IJzj-w zwF&pxNa;lR9cLxRWhbTazk|*ddPFw+zW@zs8&u%zQ+_)sgRc+417QD2)VR+iT9ozr zRwY{Oqt3Fy-Ebg<_fixI2nEu9c z(axJx^p_&?I3O`MRv#-|Pb-ql+%vhfLsye)P6MhCV%R5P`SHsQy zr=a@<7Y~nwpPb1=B}kLty=e|d8@evbf&|pJ%sf0%TZ#XYg}8&C`DyH%ooX+%RPKJPmc%={`GdH&v~9}lwCmo90vV^n=fn}b z?w(;CI={(R_u16O>eVexw8rY)#4_9RMo{^QJ)jn%f`{RF4rWQR$Ntv`YR6Uw+d(v$ zcAu?@B4+s}VsvT>NdrBP^7A+%97P8|$4qWV(r=W|5C)s2ufTbl_S&_&%u^@h6SA0O zq>cLt%fYC|;*Tx~;R#cY!hrT{ZIE!OjZL?>uR($plrpR;5ss;CdCN9HPnDyIaod=7 zkSfdlwh=oi=L*sjf(YnB@D`NG5A&D$=tz3r3%pENV0ROiRfa4dTLOezK!SE?I!W-d zabTBt+?5}|U69B|P9VyPp0`f#^)a`rb;+1_q~2$|-NJQBS-N_U`K4x!$`TFY*X!s^@{NkbTq3mxF27z9y|N(8+eHcn1h)HGwwW?*oSQC z+F+4wV|_h-@aWjslkPX6akaIzP<2#hg(_f>Kx2_EypAqnFz{WL1<9Fe*JW9dM1k7t z!-5kNSv4^zFa@537uj|ZTN-Zu{#|Qj8X5<`4i|xpKQS(^oMAGsbaiy;Z6{}DGDRu? zamdR{5Bm*h?1qMh~iQ*6_d&E4G_@;Gue`+QQy(jmzx z@=`dFbrmdadg>sogHA8T#&m>X9~P>=otp6*7#O7XThxNc2d2#c4JZ*a)zc4O&V5n4S(1S8~+ zexCgye`Y6W_WUO?q9}c}?2O=_EHMpJ)fRRJFs2BmNqBAN?1NQ;|49!qqVLgX;UU1H zdbiDdkEuQ1~mzkNT%S!mn;DH0a z0(|GHU3xMy)xEwVcR3fXXh`ZVN(YGYB3mo*X4`bME}CwGjG>G}75aQu<);D?e$|i@uMJ&hH+%-2J+BI59C{P0x$8IjbG#NZcQN|NebN z1W3~ikKV(S7$9U8MnA!Dv>GwrJlc9F-7?*3bK=|AuRlFnm3(Y?uB>fr48;(@s~z0e zlvM_V{J`?>)zumo>CiYh=|cTv4J2789}Z@VcQtHtQ0Y&p%n|M%6;{(qoSmJ8quaO<0zoDV z?A#7$74aU@iO^A%UfhGYoSf=X#Ea+89|0803U$?|N-B-L#xnl*adl>q30v<&aHkc*Nsi>Hx}Kuuf)wbRXq= zxBcOb{|4Y?Ummr@g9}Z=DT||iTw7goP+9c&uZB?UDZ9fRh9vc3XP!Y7Zj_rSVaV$x z*XgvPo@IYvGx{XMq+Cm-&_bzlCXRODeVug7sZKxru|aiZ3d>o0^fQel-t;N z1<~j@C&}}SiZHA;uz`WAq)d$G833yI5Y>;^(O^)3#YEhwzWxgT=Q~@`E8nT{B%P5x zp{}U(?L$3Tm!{TSJGSH3?AnKZSDW~P^Jo*bf)G8`AE%{Bp=6sD@`qIj}b$`F3 z9Rm}&qE5hcRl-%Q83J1b^T*ALiW@)}uuCs$_!HT1d*nQD02T+@}A0?6@04_sdfBvO*M=iapFm1p}V!*jyp z@4Y?^y{r5Povs!=jtCHd&-vq*0^!W`Q`vN^p1*IGVwRdOMp6YrP%CvGR^8Bo0D!f= z173{Fzkz|#QP$`Efq)&+0m=;5aYJiMQc&1~dI<$oS9t1f(3xij;J(m(R)1448z>|l zHaLxcK*IRb!?w5^x~H=L+~g>_dNw1J#vWjC?$2F@ag;88X8KlrO^oKG2URlv!8Mu5 zz2@^^1*GM>6xv5j&cU5`kZs!U$Phnk1D?*S#joR5M26KZ*Ct@Ry=DRZ6+vJ8GynSoD3_viGejnql}86e{qO!aN>*mh%@k1s>tLKPfIRl<9(C8-i~lH zt`&XbV#*P}y2xG|Us=UTCDLK*t&G?J1b?nlyT&Ed=1AODz+o#IzXT_n+B+4H5)TB2 z3%aLBrROmuIUNB9fDSonh^d=0q7Dynrg1Zz=If7YVu8)(Zg(Y9__%3 zhd<*VY-cEx1Q0M`C#L&0MYQi--PX?!hZ$e;QB!j6rU;#U(NW81nyf$DPerUbY!ZD{ z6i002^`-j*xnpqH{4!%SaA8P#@0vf32~fH`9C#*C2MjNuTdW7R?-kzUHK?A)llt2U zO5A2p%t@W^#9C+jdu;AN+;(=n-+s2?2qLUu_;};D%nkmkYkF4>eM`%aQm#AQXh19Zh_TqGIbzv#+U>9fa@5VJRb0ZNv@hk^ z9JcSQDhOKWjqbm_uQ?H5?AhQQ2Osx^J(!Xd_)nw*@Z3zUeQqV z&UN@5#&~4)H57UNx%*MD#qI2WW^JRXO-Hmwq<3kdc|09D4{Y-Kx3$sJ&3?XMLlDNP z(;s|2-;6#cGR|)k5{*7S_R;z|F~P;fRgvE52fe#Gc2ymr@bKV47Ze`IWFb*AtyhW& zf+N5`%U&F7DUdorBXK`X(DHHE6>SBP0$D^pPAJ<4Dm>q$dxR)SiEdpFQR{Ljka*hz zlnI=-Yfhs7E1&ed1yM8VhL>da$g&GKKZ((z*UC_?>r<+mm`yfFc(z8p(xWiE8|zJ zwjaW-D5Vfk8?k1xRjF%X@(UJbYv#KqYnW`8cLh#@3wU8aW+yI*loHZ->O=#*xs9B+)WVc5;Z=L0?m_nK07QqHSP_U%;o8l|Kj;`K+-+un^m(L(u{4(}g=K z|Fs0yZ265K{$gYgKfUaqFy`g;8T>DdBokx2j>`~_%4x>K%#OaW8PSco0QbdjGQo*6bJ22}@H3C8hPq}2F#Hod7{ ztl@SH02bY$aM(M!SkLqhGFE7~(3q(_bhi>biT@toZ*c=dRuBUd1BWu2@E3*OsUJs9 zN#wlT@?GrZBTY(dEg4Gr`Tpw;9DRI-Ohgvh_XX4L3!eP&o!e|3--_*V?&IkXU43}> z!Tu5VYP0*AZwvCyp$?Q5h?ZBdh|CP3r;l*9NT2g`w0M`~FO%_I(d`Br^1g$@OT*c? zGE3`%zgFKKB5$1caLx>^x_x=4Y2P&Eoy88It~`z}5<}Y(8m@U9=nkcM-noMgO=A-C z$^7le40x7A!$pNJ01tOx841svo`8sN*YJ`vbj<2fc zlPa7cAtF~^V?JuY@LpDUwZe}4G$mDyNEQJ%U3y*Nqi9FgMXT9FY=%r@TZ%?zM7QX z!fJLYs%|D4#bd(k5;5J6fhPW=@DHTb>b_$?yK^ntwue7jhf861Qn1eW#ow&}EY~X` z!J$Mf!Kss*E!5(>B*O~?e5WN_7FX`1BA*E~PHhx~#mP*#D`=I>goO&k^e#PmlTuIi zSaZ{;Zq?E1zOPWGljwcdT5AO@u+%A+r(*uj4LL??U^>bjJ=Y|9AHH?8GACSo;Ci0$ z9NZ1i9K5V-jN1j*8G2Ty*EwCfbm?Gk56u8HOonEk@^G(#LR4oRYnxsWMz#bLY2o5e zk1b-|#O}iLwY3J)qju2AOR@Ee|MftR=B-{RESqsbFX>MIq9CX z%!l7kANR)wo#bEyWT8rD0x^X6AAH&S;1V`iu_?8oDf#z-BzlbQR#<7GR8MydQ^yco zy>Fs+)%m#?&*yyw(~vSp)2hu!iLn7d;h#oK?kR0KItmD9FG|$KMc{p%o5l6Gtyfb$ zn)v)COJyWL+pM_kH=kILj<;B0TM07H?O6W26pZ_2bwiFYQNN0X_c{CsjS$t9j#~Ur zGZj}Y0#I{V_KK5PcPB?b4gRB&HU<4Bd>wMC2Wz7|nq^tZ(A} z4JekiZh>RMYGVZlln>DsHKE0vp{kET$Dh6Vtn;s~Y?ua)xo&!Nwx5Q~f#ghvtYl`b zYE5j&*Po;d@%*;$NX};V4PmwXX}>I#H4;=~->mBP_x32MsT0QIUFGw&Amakb=ETnM zm%KtB8am3p1nS+uMmotm`Q_iaOhb5URo#J>O@74)(Om@|pKx={*)!W)bNs~70=~6u zysQsFTy)-Z&CwY0&GOWm$6XJJhaT`Cm_n^o8GR26BStho5#ufXUXpbms+WI*Fe^&U zzEP5CCaAe)YLzN8BXy5|SLL4Bp!(#bAj_b}`vbuqOhNAeTh%^B?R(kT$-k)hCxRU& zg8$%gr!vn-`D)Idf8SGbM>R!vcFLqD;J{7;Ns2fUDvrSV0=y~s4dFB)_urU@hCo)O8R`d{GxuDJ_!ST0 zEWIH&0fa&e2w9u6<|juJNatPzFN?+$2#G&7;NZz_9D4&(E<7Tl7=8WC%}r>~05d5X zoFkrFkKp>|G(FH|)fRwJO-+Z;WC@^)EU%Q;XWL!_BoP)zD$VmEKEz<8%z>lh`8%&1 z8WwEH%s05D+j3*>)}I3Xtt5x$5X&oF#8=O1@s`^qS<0)26^uSO$2GmTYU0i*hArA5aen=hG#_Jrh ziKw?nVyT{+=lk(5GnkzaMb-HBH&WD>&a73-a(HB#kL=Tgds_n=%~u}Go?rbQvXbJ; zj1t%PIaGggvh^&b<7wo+QqqTF<6wW0>ubs3(f?)%hi9eXVev7x`~Z|FgtHsi zovqgBZIzqxknY>A(;o{Y9pK{SFS&QY-xD|wx%?3PX|6m3xxv6#M~c{900t{^P}0)SpeddZ zU*_kB{A2Kg5YXlk`_}q;qGeh=VGj>TfzVHH9)@yD6@YIgci0(Z6z<8$EZ)hbB=y!^ zD{gxZY=BQDpmUaicY=Aq1)PBZqvcnttE_yv;`s{-4}pPF@D)h<2)B-RU>c0asTbQ0 zvpCT7fZD~DYH2K!p~ZH-o3!oftqciu=MSr`_JvLNeR(1H6>gWm@=}pX0o{+FREO)8 zGJ4xm8~d=p|BrV|N=&S|Y59fjy|o2t7e7o(cv<~WLvU!h;uDztXZHf9^_mwC?~iPr z(?X@x^TWve&n2)I227;|^9&3&pkMo71Hhhyd*6usKf3-ps;W0?8-+LBpduk%0@BEq zmQq?m1nH8NZcwB|5lKmD0Rcf$y1N?`M5LrdI;7*9+u!rNXMFD&hd&&sz*?-h?>Vn| zg$ltd8I(CGRtZ<&vVb~6@T2Urp^;q2^$~m$R+XSAWio21lro1Ow$ivu>p~`I$f-fZ zA8L44A4weYf5BfW3|*-HNn`X&O)`L-3lj^^mgz0&?q`X(a6OkX56+A;YLn%dc&Td# zCbDJ6a1r9AUEhmaO;XriCe|;E65Xo}#=*i{Y2=POqj4Vd`zfp(FRh3Ek|kCMVF~#g zVY&oMg`7f$1k5x_vwoy5Cnfl!ZyQ3+(w~0>4QK4jN`1nmS%g43JZX!|zpZY>CXOd~!N^SI^xtHlCa(;GFbdMs&|%-6rY?8H;y@4)b$ zob<)&uP`aX`dfqr@9I174*pk0E^3muqBOAy3C7@!lel-AuQSUq2Eb`xn!~ILh!VVs z55TY{4rmk8;9dQjivdzXs{e&=>lq%(to zCFmFbCkYmz_)T%ldw#la*37}yjk@W~3K ztbp_Kc#)xP+|`Aw{QMl7uRLT)InW;h;Az8n*@`&Jj$mtcN`3j@(icBSb1dbl^P%YuW%{QC=LJ1flEqTDf?BvN1btcS%D$`H|dpUJdp z%4UYWrTf}z)9x=1_5_1y+_8T5$nUlQ+Cb;~ z8gi&`(adNmSP$|F;Ga(h)x=R^pg&0M@w1I{Ce zLyX~`gR;zA0+sykK4F*;Vq_rbP z@*W<=6s4VzJKV=(TNx&|R2f$LJ-?ov)*tLNoY>5FzhjQABmZwzW=?!iSy6#1f0zH2 z!k(U}AOIM%>g%Ii+lw$uZYTPKK{*U)P~oyokaLlz`E;=u5ZwJ$pbGVSOfK~$U^FZ9 zHeezWw}(-=x&8JiZ6pSGl1?mEgl4|~c9Sb&!P>}gS(qnxP%7k4Pv0{?l6u>X**ZeD z$QT9TJ;Uc6TV>i1s4P+;_mp3JXhjpFgfi&LK$CBgyI-g@?vA+H#sMed3Z^M}m0yyd z?k{suR9n|mQ7SuggdO3Av0S6q!H(_u&FYJu;UKGNId-oh!3PPvTT5B=&@&1l1kab0 zG_!#sad9khscV(`7hpaN1Tmesj<$C0+6iQmyF%1T1os`ki!+E-K$l{_9=J1@1brH| zKa^4MPLHI66Bb~#23LamF`bUKO_K-WLtHI97ME96z*KC0e*WDi^gBr-iO2280mumm zZUa+2Fp!hMHG`?>-tMj({*y3~2u^P94$5Ge4A_;zN^O!L%&c^31FSLg^CNh`$U-J# zSfK?RaZ!Wo35D>)K+s_(Brl5q{9dFO z_-Yx3_P}ppfqZ>q1KLKn7BFBAmy@UX>fVr>YxU9O;X{ZTguDLQ^izIPUia3aeAb8# zmtgIO92@voW~|WAP}zqxhFOqed+d`%fFB42jkrTgS{hv&pBx3a??8X)*3u=LN`z>YG<0YgMElAp<-z6E1^`=sUHff?%Ti4WiksOCb(w%k)LPR@I{&=Q#AC*?rY z@U+9>_BJpY69c1Jz?OpUQAvG04ML8hzpoE6c(Vw8*j2(%7V2(LGnwH>6u5+4r=g+( zR%RAK?-y|-5~)#=nc0dQfL|p@o#onyJH%!S(?q~m11IE`b=4H;Qdl{JHOz9d!g+)% zgP(+fN?T=YeRFfrt2}0Z_+3PNUM4WF`NG1!j?miwq@yAZmKR?x#S%ETaFdSgYI8OK zj*Q#o$Xz$PmeRX!Zt{KCQ$A&-8j#RVKf6me6mmFBx@w)21N@!ru~h)^CMR{l9^~z> z-DJ!pVWtIg#I_ecvXgNFc$sH5% zCK+%m?{7yc%2Tgq!1bmIf161e+5z+m)y&|CsS34^!It=RRl#%u!Ky}1KSkUMtXfM5 zd&l^e0Arbby=z+%X18Leh`Gfvw0yvcaurushUEe5WL)p$-|+p z?-u85x<`DjpWg+4ySf8kYV6VfW8!xp^PNAnY5Y%>umrMMqm$+_vmCHslCFnn*A@BRD6#fVdD|u&oTSFc{f;ny_(&ieQ zj#K*?+;DEE@~{0QZa)KWERlW_uKXLpBRu*f(x!nqA$*fJOMk1o*yq6-t@fWc_3vyu z?GMZdBKRujzDEfD_%ovN2*l?2l< zN4Jzjzl%>K_*m)4UpFIrGuNeqDj#w9({IQlyv9uI7W*ak`(wzOW6711T+8_BgOC!j z^;1(*v$0vtQAvJWsE1lCQT8OWC*xHSHQ0=9kivCwwjwzTGv(22WgzNAC@Q)_xDyn4 z5CFrYdwX(64hB&T5ETccWd3tYM6={eTBPH_nEPFMqs;o!r4qm?S<=FTw$mo~e0C-*eP`pX>};P$c;XWN)0OcD zd@sl&i(=YpC6|h@mej_}8qYyL{{Mgoi^J8$?7hD)<6~nHQp@|ZC_8|u*^7hf31G{v zBBH#hf5EQWWf0@tQu67O^=`gEa=nEA!GhHBEj~mP^NRuz-^H}wk9A94m_Da>arwaL z>z=FW{pfL)c9g(!OyF*(+A*HB)C-IclN~{m7i%l)*BFQxg4omb1&XgmJqD99vGfBL9>Z|J###_}TW3syc1;|M1mK~&X-n)bdvKKJL4!>ZD(KiPdlkK6g zNw^hq#@kSKqBjE@5RHMC*AZM;U_wR`QL_OCd(+@k*!JqxB#|0T0+75Ou!pOH8Vi`x z%6brI<45bADYMO^wAObq;`m*dM!t17OJjBAi{TbjJSZn0+a6sM?C|qHX3h=%I0aD@-M!)= zcPH$s5HHiXkHR)mNBwyOSIq4Mto8`r?gYOqM{SE zuW5Ks@9InbQ`0Q^mzFLTr;|_z(|IqxgW|~zZU|)b^xRJc&WwH8Bm%*>52pWuNaW(m z3Tmnwa{t$eJpK9CTnTsRkivdul$P!k0}U2v#Hc7@R3iehpE`bimjt}^Q9X7FDF#lr ze}82DHXE}pk2^hc+%G=kikM5$t|Ou#xy6Fqh*#QT<&HwZjNJbNGr9yE38-bh?fAg3 z^Rv=zMCIltv~iRuP$s!24ndAEaQ~)dJ5lsvDNg&ktT&`{f~|lLa0YiLAdL!0PpDue z;MCD{8N!8394nS{oqt6Ey!u86uY=P^6~S|X1f2th3YbZU-sp^bZF*<6IP@nfPuLi6 z7~T(wSVUY}T78*w(%1v?$S?6I{J~PG9)(^RQCNQBIfKG|VL1xg-5l!XKsKci)Qr^Z z2ly_HIA-;J<0G`TDgM0M7q68{uuO^>+51$5t>5P#Xn&gf)2BNRP9LZt7hQg5UHAQ# zgdN~=gU&j6kr>L6^z(JAGKLL|`5iA7MHH-($!JNm7?Bntd*rDtG#r%QE?0_2Bi#7a1Wu7nu0W-oz!loK5 zJ(LxHQ^qnYf@lSRBo?SFS$!iM&q&nn8DV@%aWayxUFW<>w^nH!7aI$XF@5=ccThiU zM+^X?G8FP-Z_hoTul~=k4|R%gjLg744MjC%%}Isu4M|qI(pMlIk-KQ0ZDXjGf6?{w zEj0(O;T5HchC2mV_lHY|aVs+;b(nKLe3(0;7%&1mAyjat_ggGbsln(R73d_x?kR{) z%1BB0uX()U%!=o%Kyd(zCQKU38v#n?bG73@6Ek)+czt^^%1N?=|2*R8h>o%RcfFX zCve93(wXwa%gf8e#2*gP{pIJ#2w-wBWw5ii&-NxT5~kT)TVsZ^j{Of0f+BvPtiY6# zJXciJT9GeW{LI#|FhFXwpUiJVa9uoJTKw;uLi5%Ht=!c4dDA3grqGTj`T3Bq3uBeI z2dvOW0i*SuLeM`13#vBjgWJsSa0lj}%N_6$GGE6>EnM)8YcCh(gMFzQp3xE$WuCBV zPGY{nAg0FAn?8BKZ)hlY_%}-xc;44{Y^W1iMiB@?I0=ll6h|0d0eGqxzz;EBP zX{*0kJb&RX>W_D&&1rLO`gKf~qN+|s-(%;xxM=pFd-7!)gdZBw{=?Jt*c}bW>&Qcl zFT*|?@*lV^x^YNeX7HP=_U*=Ao=BYwHUAqrthcCKrtqfItsWr&@@+BH@ zG4-^Uqf0K|0JnkmJ4pRsU?~ga05Nh0@QXo<2=z3;e;+gES=3~Pad4vj{EVi{2ng>L zq;J)3Un?!}S-1E;TyY?1u|>C3NOaP<;*?3Cg;ep;CVrXy?gU5@oS*ydu&c?e0J;-l z>`EhFV=L{Aua`Tf3xTHp&$JO4{zE6v6bMtTD|;5J7u-8pRppWgx%(qn_40Bh+9c=Y z+h*yXYlHmG2fD*~Gk)EEB-PB=->{-LsU#VH^Cl^1{B34};MrtRjAl`O`ML%uSAr@~ zBt(i<=%U{<5BX>8y*j@NBZ4*$xlYu2G|bL@t&~Agp9AP z*?x@ehaBR`27js9i=;DS;{)-tl$ESC0SaqFTBSV+i_@te#&qpFzS|QFx%6jo-C`7) z2%A7dk}vvI`pBnC&rYElm-~r(lxzfA(`#0z+0OvM?e8#G(g#VV7@o~BTmKFzxN{L50n<(TU>5&Eh z7kO|$jJD-}^u5XNQuC2delUsb<3j1a$IQlz-)R^`qSzwE+}(dA(??z$Ow8kKuIjgt z6nzf!ThZI7ki1ud9Vf*298a~5A)p%TR^u)Fo}DK<9KW%p?R>F_yy*(F$$!~OR#BRt!!9wxe=E&MSpbVK6Jv88y9 ze3rtMpn7qZ#;UKD=)OfO;mURC{Ww!HjDE$5dhOnV-)5>gs`*@{_b=+I@8m{I4@Km! zJ&~-do4YVhFHei{U-5o=XpBGr{E|H6@~UJ6#t9I^g_@Acyjd3TpZh4Py*`gq?Vj7r zpM6EfHF?qa5?7dxtY~rB=>u~CgZcZP=y9J_@Z(GyOK^mxa5W|g@MZrG7vS2t7X5DG zR-wNc0xMwpiX>Xj)aU{_-0tJW*8iPc3Z9oD;$??@zW!7+W4-py_(Icr8I5uiop|`? zn8Ackn`;l7hb)QV>_xYny*1rR2tz%^{A|3@MP6nFI^yxDrD$O#l6t@~!(>ueh|KuxpurH@yMiZgy$bU8Fp zF}`Y7ex3cAIpvWc+9>NjZtkzSCm~P)>R`gR#x|ic1r!s>`CcwLfd(DIxHV?F)Cz<3qOCN|-o>au6G^E)>`f538Wb@dhx4{PDgmF^V&6c`x0 z4e|__g}RvdJ#AZ4(oPW09WHf=TZnzsWn}jH-s(&4-UIGG#_336d--Fs?o^V>5Wi4i z1tEKJ8brtGUB?TmCO_X&v%zX(2jL%FRkPe3bng&Pn7;R>^>G?Io)dN%5CCCd@>~Fj z4kZVYbyJsM72yba(L1)|58PS`D#UX?c=%%Z8;*>7GUNPucH0=gpvPEmQ#hl($&#hu z><^Dak1$>`QB|R(CnkcAL{19%08w^j)t{)@Cg?t?mbF2gCEdI2D1@23AQ_$&+O;^6 zr{6W-ciig_k=nqF30U4F0WWjdeNc0h&h?t<9W_c+Z?lRxp%i_3Oz&Oc3-lGnjfU|baFnoKKVZZvP3TTLdX zC=hjc+~n^lZL(U7=39uNQ*})kdsz<^j;>U9$quDLg>D?4B}0a%cz2U>&ro+WJ4_?(&@?TS0h|- zO_B2Q9oW5(s+r>Ua)pi2y~q5`=N`CLGrXAaahgBuC?P~(DN~?z>HgS-Xy;1n5vIE7 zQOvtFZ2*S@N(U9LA_3z)PtU4McJSN;oSu<96ciA=x?h6IuiSp01GJ=ZQ2WOHuqp%~ zUQ<)^$Okjs^+p-#Kjo0B$kO#u8LpddTO?m4@Ajwe&g{~C5y{Buv39&syCXWdF)k>M z)63vx`;N1j`zbnY0KPD>L2Bm&TgM;iMWPS_zNGQ893O3ESsvrIR&st-FT2> zqkbK6I!9Yu{aUwMFl>PGO73wpB7N3xE9NQNn}ARY?oWyGcB9m)D+$=?RnEUIKOZUR zsU3cvm$2|s2&w<c+6ojVvw)?FN9?naVy;uHm|g`|ctAlRtk5q~k;LB6;1Bx#c$KO=U&m6u~rT^cE9uhc0_>wcMj- z?{&4Wd4$MsbcBPd%qOaLaB36Be^cQDD{r@G`M?W8&Wu9$Y>y59v-};>uejGJ5v)$% zY%=&;5~`dehOrdh^Uc-AlNkNpW3tH z{w@@Ihq8twxv&6XW|zcjLl(blXFjFo$tK}CYg(aj`#cc6+3eHw)n`t9P8U@PjqA~V z&vbMfc{NM#m}?WY4JI>%Jt{P7+ghkmw_mnfmQX*zW_Y z2lI2v*V1}{+3!m!aVvK&EfE}ADcW}TuHC;Lg<&jx;YxeaL8qoDa#(zbju9d9oB{?} zk365sifN)T%n^Qn*^+X2(AyleBDlyJ8_9iLLYD^P-&_|+Ft>#0ftNuALp=Kx`r}h< zo;pXr+OJ~Qj9YODse@Un_XblX)m69{+XhW>a+PSTapkXYd^@uEqAtb~>+upHOq6Gw z5^##;^y|>!2_nL|Rd@O?GU=BQmCbeoV z`HKzTB+)W}?eQtjOhfgs_T7-S(qV0C{lfDs$1>*1^ftM#hOTlWiCBTmV$o#^Ha52g zie&jHKTcM_@BmpyPSXV|&`2egJJPplcEbZzTGdS(>FO%}PdQBkW*Gc?DKAM{JL=47 z=DIc`T5+4(KEKDI4M6{3QY5`Z(SB6J4e=!Y(U`JLcp^g-_Bb>XzPi)(I(~iO!I*P= z+Ifm=!NaR6@0yKTlIzTR4~EmXpl|=zJb+0H zKn!4#|Bsj$$e`}#Uu7dl_nh)_S^7HHjmto5{8Sf*)ew8WL#FxGUji9N{i~YRBEUER zLP#`=;%KY}aX$yDnreLy5!U~8!GOJidpleN8^*^Uo}34#`kj3*5-PC|d{2u#$KS-z zBSgHNJ>88~OH6fAKCd@)nsBtNsYr~6;FI9}vhm4nd3y9|^IHmGqDhS$JoWA8+7B0E zS*{WqS_r%SRtGLjMREx&ob^VaI9_czu4#jTPtn?|R|2a}KW*;EF99qGP0XlFw?DrF z7!MQ{W_ys1k7UX3?d{$28-HSsA^WhluFghbJD<)z^6YRT{N>h%dVKY(2%6`$GE~mt zV#B*zr0?Y4g4tdA(8`XN0s&(i4AP;hs3Qk5@mB{Kew95Gxv-8rLtR1ZTV^H`94tyH z8;o7@+zZkCM?D<*-)6F0!yDx&n3Kvh`#Y%bNYuo*I~byxiw=AWVkP=n)5ph7^KI%E zMYi7MbNy_4@dkg23xH-J+C)HuTl#m^@FkkNu04D2oQ)bCsA zRE;G+*0*F@@M)HS`Ddy{LhKqP117!9H1kKbzI(IrSR6yl+~XQgN-39$UUBuIxHw}- z*xdnla1&MOiTPXoyOu8GKEMfhQvnuNk@cU>`m+3vTj$D}vFN9-9k^xlNjCNf-&k35 zEWhJBvm!FM?1wp*Cpz}Xoi&Y*Qc&Q7`1GxTN&){9Y^j>#uSFyRTqYh>JTE>-?hh1G zKA(|t)qdHFCb&LfkEAfjw~=1S#HqMvq!1furt@CxL#*cW$MsD8e;m!YVo3`BFBkym zE@mFZ%~dz+ct!S`B?NZQ+s<<7{JKcTkX49<*Qtb30X)9GS?69OpGW%lC6xYW^8&6J zipXU)emhiO`^?cV!tdmo!xFxxdL(m7Np0xmu<57EM@Ew!2tG}hJ4N2IYK@$t6ss3G zXT24q1(bu9mH@2=s$cwHu!rpxS!eQe!9#@!f^_PmwuqhKpGzopO8^^{7ld?(ci@#XXA4DDz%5<;n zjnu1y$AA}#2+dD0FYNF*&F>=#aZuCc?1|(>q<$HdCb3l6i%omi;}wIwsvmY+g=b3% zMgF5?r+UN#pNq+?Q;pzV-5Umc2o(LW_}B?j15P1*#d2xi^B0QMhlw7bn;4SEdG{#s zz_{~7-`MYN`SxG5u^w9qv}jy1>t7a*dv{Fei1YnYtq$-^m{{H$G%y*KkUib3@Xiw+ z@(n_fNT3!>dPIxySA;!P)e3lM|M5+9N&rNQ9(L*!e2EK~WKmH>`CA*-ogd0Ojz$6X z7N5NMBN*pnnSaWro@HvklwApHsCM=({EP33^OR(JP|Ew7C|s4j#a3q;7`({dvhD&Q zJg{>A(aAH}lX3>WR0QUp&eorGJ6>#UZ2yqlcfK~-fc^>BoU3TInHRlr{UNXu6*u=H zc<(y0B9KyoQVzqZvm{90SLGg`A^Z;M*s8>G4XDqmxnsZ-O@5^^;jSB>Hz17%Rzlym z4j%ysK^`gs2&#}0-pS%O`hmP6zPMaw4#1 zyvN+-wW{A3diGda2l&>&S~SX`8jbn8ZYgWZEcnOY!)r$SYa^})mn9po>ckqK&(%x* z4M-LerVGB}Cl`D!DTHskC=p*0zPgg|hQS#@wwchKSmc z1CVz7he&)7(d~!eYhz=2xLZ*c$Ny12+mHj0YnGg&sE5lBv}l{b)}C&LGvPG&TjhmKnb6OrVCqi(ZNR9UNH(+ZuWG8 ze*@5<-2*j9VFOYe|3d2`<=nTXGxJp;hbw(Ue9B3Dff^VIclVXf@|t{wH#<~~{^Ca6 z|Af40SW2s9%%vr{lv3t&rk_aFy3cd%HuT~Z{na&*{4d`-7bX<%q87Xy1pOXK(Du@CEOdgDHhPP_v8)xkDR>ab$9al=$=MjNl=Lhxk zu;-gyA{WA&@zV~*_3vj6anMXwN3#Q^9F0MYpXHrv3m$Dyhd?$F1TDagez{N$%%Gum z3K*Jz)FP=4N>3nNfZf!)$NX3&DagYOnFGARav2-NymSq1-AcO~P+vi?!GM`E#P#g( zCN%);nl!e(Bi`h5?2I zOq$@E#ydp~idQz+T(Rw4SX?AAfHJxE*Me)2Ie`O7fdzlLg2J%FD~I`fZUB}Z* zK#2gORT!MAjr!}h02zC16$$Sq3I>FjPx$QjpFc1(LX96FPimsb5UwP=uRwXEhO!-( zAEtw}sI3}m0CQbm5Y)cW48Nm=0!#DQGKbELpH5Ag{9Z6{*;iPv$vx#2^V|OU>uAFm zndIrDoQx1L$yC8mjQh-y5*@~^U&;Q~<=TlA4!A)Q(j#3C84q_Q zJ$65>+LAAEl3E_&QTFXr>P)T%;H1TJtN8v+C6U&dz$6j+BC*uKjZ*!hafw5B_gOl#1y|u8 zcr!KKWS9?saU@CI)4>ROpvjeG^7E%QW+gvA7pb};@AVTd!Qg*-4B{li2Xd9AjqWz7 zv>Bn)4+mC1t(PB4>{6Jj;JvsY9etJXx%lEnmE-F(?8W_zT~_t0-IT|#s~_oocqp}Z zIc0QS`dfdNV)JK+{jo`#KjMKuQl{1PoZ9#=&L@enAk-nkNCU7+P>tn|gc>t4rFO&i zXK#+#W%JG)es5DFj-to57K0j@HP~~af8uBt+FVfb@52~qP;yJpy7=X3xn|%L{?;_n z|FpyjLpU_ogI#Q3$^fkysgg8A_3@_<2tJlE)-Jv#t9hRSZ+XplFns0`L$ihubLU0+ zTR}eArQ=z~o&dNI(pS3Jiz6LH&HJ&OM+`N3g6%JknW7O=;#(P}E4kSTX%n+WZTu7z zZ}zOJ^5`2a2lG5tw8Eg`_T=g9B411Aav?&IhgmY}&mTERprlzxJ`%xgrWWCO%)t*k z?k752alvv5yH`KRO*5BIylvr+(Y$mn=JMiRuQ6lw=lgYI?N^TbdG_KaDiQ{zJP?>V z_kO07@Bb|vozxe0z~`2a{s_#IRen25aCl*U`)j8-IXgB!{)e3)6xrYqXd{8%Gw%db z;eTDzm8HBdAT~`=1$uaxF3gRfxqCeRDfr%>P!cDy&t1pVU5vrht*qL!J-nj%Ls&K~ z4Nop=2IpGMM4Q50DT>rCw)F+?#8xi39$Up7#is?OL5x8Xi3<-WXW5k6KHvDH zypa*zfLaOAFQI#!m>8>XncO;jE>0@GqTxU7P@JESl9cTa`aFJ8HN~A~5uV25)PLjB zky5JdfO@9gckZQ-)8>@O7L(P5&;Erx7jb~+Qu>oYeOgXGJ7V;4|2;GwM5$#=-D3I9 zmN=UD5YEe%m`V%sC;+CQQS_0>Hx|x5TQ$7iA;lmCulE(1<740&N40Mq#-QlJxPd06 zwx->R=7M20Kcny{< zAW1K6q`OQ|p&$T|aWcJQ=j7~rrjqmSnU(&p9plxl`nTxWqy{e^N>`o#d@1Nj)}>a- ztq?`iLMEy7s__Y{zDUY=jgQs*ZKIUk$5gTpVJQN1ELYEIeE7!?J?N@845lV0!FoRL z@15Y_;5#bd8pOmMMEHg4@bGXbRSYC(w@t!G{!u#Rf&B~87tlde8}N+EP?ixvcUW6n zFga`At9Tr)P1)%hQ5a<(f|WlC!{dniv$h8HA3*qDu(h;e zddwex=36q~{j0rbJnLB55P`2IeW9U#Rbe5OI0{*@he2#SjW;uSwIFB?=SPlh66=!9 zS73KSIyPKQum>S;l1Y99F8WCVscW@#p&h9Ce5der{1G2@@KVe5NsW4Uld!F%xndaS zl+^G1(aHQ}%j*Di3%-$KJZ$T4CVM)ysxae%t5i_Hp9_Wr$gNh;I3(r#$MuC%hm|l| zHP=EHMbW7(0@^fc41}&j{;q){?r&pS`<~x}>BE~&+6;bp9J*MyFmqbdC-a-CuN?D- zMGUfC)!vI=X|?*oV##Fft46I;sr?pE!~fHGMSq*d=?yp!u}V|-b!W?eAL*0bJ;xXl zB^eMy>{Q>RW#*rTd6-Ilzh^Y{^*`W&4}@v|7#po}l1T$Na23O1i~`iQo(VNLlEgof zdH8N&UrVN?NwrerU?b%6AmNYMVb%%OrzdxQ)3hVBi18E3KfJQ~Fz0!kv{qrIDuiRN z(CUwtDpQKdw!xOuQ$YG^nFv?v#eV?j|2frNY2s2rnYL%bVVKff95R&;b7QGq z*Sov^3ZVZpb=exny+oBPB`b`1mUs78uV91kUEj5#Wm3*&<^X>*gd1il(#O|o?o3;v zMEcQ7ppM_X@_N_tU;C-}{kQx-HN`lC;;3Q@;>mrPw##EOvjx&9Z4w%ir?>fs=PyRe zHVGs+9A~1ues?W5Hf6Lvs(zFtC3|J;*y41q{7uPrvc{y9fp<9KiYNE$UjieD_Yb9* zK8W}eH2pH%e-TlJeA?$sQ?WvCv3>0GwK0bn0g9d<_e2rRmSrPnYXpH(8#iu(B@8|$ zI+8cG2DGN6*)W3}+GAVMqnuY?OoQy+dg=!V!Z~i2>Fs-4OWN;ubbiHAETx~55Yx+I z{WVY_{do1$>yrE%+~IS*$?d(i=q*32-EF`46xw@M%`9Ml+{?Cc?|Cw$ORJjuO+H^> zBG6?ba5+Qk3T9HwFh6{{xQx;QA>QmFj9!B<4#gq@vkNBfMPm~c+Uh?smRnaBsg}}B z!`i01g>Xn{rM+DPNEu&6vAE_oVdTcU{GD}8@cX*#l}?cTIZyMFc!s96yR+sGjd%QV zisirgR%Pb@%!4ux*e4YMbN6kMgjl<;(z0^G$fF(BFt5e^h6J@?r1Pg3RQkNs9HLny2rHAL$y|KfXo zLhV@ZJdkvU)KJQCdqxR#`daQvwpbwvmkxB_-@K)sJ-j8uu7jNuvb)CkN_gu^tyj~R zMYDtB!xMb%w+pG<916s0$N40mE-{`^%5jlr9n;K$8emTejL{)~8)w#NL{3u;#;mk7POW#L$38xLA+ZN%iR z^R=TI#rb~E0S+lLwVGa@lF3N-8LyySWwpyWRv#&lX+0@@Kkbk!*d*Y}ZS4WQDbPnO zCzwzMeJCmq0prV}HRyoz$7byUM{S0lz*6q%c^LbaCEXiyNiB-~imSm6!spq&v&z1? z{P8ape%-tdR6@_LEhlQu2wn z6lyT~_26IjhZymrh;*vfMogCG$$6DLv^Sbnj(W*9pLaF+e17xEm*d~0mbuGxubk|G zI{`LtUycJJOdAv9wrE)9je~KafzRer4ac!<9wz+%xHwD80$+M#^(e-XOIv=j0eBjd zl!)Abid#vN?6?n8--Lv7$KLbCfLROnQVFfjw{lAUgTUlsJcNo zLcjD0*1&WVcxEgE9gmJU*lgz)>5B<9k?+@zmlOIkj1~u|yUNi0KV=j-E?Ry4viZfL z&zepjo+oJ_J6Vfy)QRIywsf!0d_ER|N3%;5DesDyg1neLLFo zqtVkPi6-#E%YO7GR0=)dt!N8f;s0_0r0#uSphWmCv7UZ&RI0x_m6S`7^n%M|`H`P0 z&VVYm%$o|oe>A{DEAvQFdVQuyaagZ0;$yl~arlE+Fw8NT6Uhjh@1;0x>KE;8^`!l< zYwjdZ>LOo;AukGD*E!8?K#L-m!UB;7%ChT>Dn*rO_8>h(U$Upr4qat2oA#v;_n5C-_l{JQTm7-1snx8xK$)C=%-89p;me(uZUd2FVM6>^I>&cf8Jk3JagHfR>X}c$1i` zqJjHtiF3f5FfKKK>AOK?>FFPw72b<_TJ`dSr#vIr!gL|3C_-yP;=@2+u@K;6Zr!={3KdeaHltPhu6sesj7Sg zf;bj+VRkQti4huG4l%}Op(C?hHFqm> z%EZ@rhOtlDW*a)Z4#_mjsIC)>*PaVF+I&k8rkZu}#z*^LJz4nHg?ao54O_tCJIr_G zxBj6se5$xmr=SyV(N;$NIPmzh5pK!Sy0RoTC^7L^i1#dpo};Oe>{~H*+(P?{He>x{ z&-p&BO47SKFLI>z1R+fZ*bSP}IX0tq5}ogX^LDZcI1^wtVe0|+@d%ms8}!GTYDl$s zr0cDpJbJ#Qcsz2`(n?_WdZviGa4Vh_F~05L=cP!p{wA0GXAJ|(n8`8kPgebR2Ri_> zV59iIdMix)#cTGTW6~VMd`P$_MCiL?<*r|KmY zhe{8C*)%A?3=LD+N9&sPfh1iviCSP`0_L3riMU|X2+uDDBNDu7lZ0xuwX{T11;idS zcT11f&BV=4KHgsL`!hoB;5*j6Vy()p+OA%LPDqR#^BqXmv%e#>ZT<;H@Q;2s-{dXYaJdO z%zzXx@t##9C`IY+K8r1&gU56Kd`iaZ+eZoS*CR85`N>gzBpyO8IO@kYKKa~nIaX)M z_H}#o=lK-1l^K9BUTKgmhY~zf5{{k~eVJIxp6mlr5K0z}|Kv^P@558L2tbU5GqdD{ zzF_1m?5-GKyeOCP&N96+OQOj#vw{0Qb4i@7mz4&m8!uX=gsQu|C}>DnfAw0N4kUlg zKEzg)Tucrh;Y8qKzeM76CECur)WD_028_{@8@zd33*jI=1xd#!MVf}jE_fHzgO0Me z>Ea~gUN8tfaao(+Hf<-&yI1sb`eCYF#pIOw5?O;OEfaTXoVxOPzQ#44G|C$9ZRT(a z2RcgE_9>qOg(a=8hyA}eX%Ad;Si+o@l?gyd4(RW{QBzn9+dBo})IpRHA|C*PX>_{uo3HQ5nk*JYu7(A*u$Fh<4nV{u|*;$Hs)wBmSf{=v7%C`%g z^Wh2Gib+3PgvGGX?-gUsDt+gaT4ry~f zZrR^5_1%VxJnWvjynVMnhgOGL&<^4Me6z-CzfP}e)>jNs4?#@hYaw?Jls987V&q{C zh$rZ3au6J4Gqa43NEG5lJp}&^&i-*HBz=K6FDK8~wEc<~(Om5Nmvim! zMrLUieWn1Uo3FX;aWw*^l|>?Hbg5aS?QK%0C2w;7_9K~}I|+C`UK z&o#6+HbWenK23B$szY_V*==CA!@KvC5;0tV$%J8x@m1znE%Hh$Wf^Zkd5|4{s7hZ6 z_(dRe8qdBn6Z@WwrGt1mHD-%@pnz3%OWXXl3~8gFa1y3d=+? z1)3xV?EROG)3GC_Dy@b%gVgT+{R*z#x5wvT+W|xUh4&<2&}(DUL*v`CcLphDc7poi zbVK5HxPfy{!blb6+%aZZ$a9lnCl9sAZ>AJWRh7PCt}95$>^krq3+^f2P9te_xTY4* z0Y{Pp>8p`DOhNGFox)j9-NK@;1s-aaXtye@k~gy`wdKzP*`s_!%L-xgGiMmAs(p*W~9*Fjeq%>rV*cN>#5 zU68I|hW|{QE@(L9`o5QV$bFeHWY|tD{-0W&zFn3(KTr%-ptcsRb#V(ntNZ&sP<%)% zbr8O#!6?jm*)yen?)SJ@tx1lWMG*xi2(%D$J6>`V!r&$g|6?iX&{BF1`6U2-QFi_| z-nfsinwJ&ME$r=wh5+x^)r?1ftWl;%s`bH;oBF`@ZPx-RSxS9Y_*dcDziDnQq^m!+ zhemwuT6)BORAb##1V?4%Yz=0~VUV3U!2f1E;t;N!#AyB=n3a4Ua$Wpg1Z&^zF6YGK zn-kA|!`Ea7mR)Sjfu0>hN?N*wKiz8A?`BMond*pxgTtVY>8Ce7Pt2~_&me5RW}R~4+0Q^yA_BTdu+z6_{C+E(4Z$~_NIzZIMc#iWoyH8@ zolQYGpcL))OTzoWz&7-S%fsu2JQKeYf43X1#ds{M4YQ?_Tlq4j(;%*ez~nBFq5TOz zh`_@IBzF~gjut`2f$!@yaq^MCa*8eeqY1cKWoyLLjk9g^uLP<^@Jnn?=9RJeSAdE` znWx5lePv;pJwz@GWH>v=KH@{l(O)Mfsv!Hd-x-ntPtGr3A->N9Hbw6qM1h+^XQvzj z#a*y`2)@gZx>7tbH8vJ=9M9hwAoT%^Kj=cMJl*5JVF*T6b#N0O6^uvu@%&jUWao|S zcmh*0X44Az31dk43D6(|D;qup#w0t1d3lTL>&3}K-90=au7eK(*r{g`j89C|859i; z4nF8=qg+{8Nr;P+%^HC+?ZMPFOi%(nocKF}1-?<>9wkq~#m>&o%^iN92?lO4*Ha|@ z8r$Y!C(zU)V+55u`*jW;o{0NQAo)!U%w*@$DUlij?5i@&YYa(EMYZnnJjW!b6IKuS zfG%ocBH@FZ1)W2;i#$S8#VbyF3^a<9WMhGv_K_#Sn$V5j{x5w)nO zC`X*qMF{APNK?LpiXOIBODii1GO`TkeCLHuT2Z%Vo$2*<2!OY(_|e{ezZ@6tuh7%4 z-MzgWoSe!T>T@CS@$uldx*~)ud^`oej|WqHx#Mi3Vhn3yVq$-L7S}86RNKju;^SXu3EO6zy?(7it!5rcpl_|Dgm24R@aoI!$M*=9 zsuIW{?%?USx3j}ftuxLhX2!=W;cmgznVg&qd`(VI?`UTSc4_H%pD(Yk+rdgQV>Dh4 z3{D+_j)PXm3|LgFtKTOkmL`<^Ab;xMFq8L)&6i+FxCmaxoSdBX^uo$le*}>c3kHUU zDi0nUu|cU~MnHx{wuC?iGryqVa+5OL6Sz%4{93zo3&{oT8(m-p>53Np~7 zvgE=`GIrEJDxc6}enwh~`hlop47RmlAdYxV0fj1g^()t~g8Mq+=k&Bl#6r4`D*;60 zLU%SWIC!wVJ^ZxdjP%l&JJ#=4lTC)#uO_>Uvy74-q{d%mh$L`3LSq%o7XDOpm6~J^U2{TxxjqR=j)gG?J3ygs;Hx(59GiVq%`|M#zrAM~3e-bhm2*2?(sL5e3KIWZ9)W}N(S>rbMy8z0b{LU+8t6-Qg=0TGg3Ixc}S7!#Sh!! ze=gR%Bwn-+?}&=1X?@a7oY+u%I^LrzuUV!FCjEMaszp=jXH9M{%*@Q-#^UOF*(55m zEq9hM+~cm#o^})|Dnh;Eu7zcon&QVKh-}RFN8LnI&v9KAD{< zr;4+&tAWUAgUTU*-Nn}XB#107wfh3T;$80NA>H(_6e)Kz7+}E=fF0)hzwaJo@ zHlsy`V!j0D38FPcw@EJPQ)v)jYi}gO1~1Hu-;3XT@2ve|;Ho*RH)+ddz)$P~B&nRV~fV)YKWEEa_vYLLogPQ(xsV zQ%n!Mr$S)b@aD}My;wGzd&Ya52qO1bapDh3*i`=bh4sd`LL24wxmC71jl~R8rD_NVfC zCMfis-s;#%@5^Xu#pUJMz?p+hPDi{fFUsmwz_NeX8X35=1~I-1U6EjBf8Bg{+4eC& zH7XDWGR-A=!*k-s){&OJ2|ESp3ih7Qx;syd`8e-3#>Ol z=nB}*zGS!=ESCkyMjxzpZjlLhaS)3xBCZ()+*FNKs^bjTdoLX%zIID#S$q}y?scC} zi1)t4Wm1bikVb%GCm~^EcdMNRb|h~XrKqo8HE-o+^bZXU4Gxm)A7Wc9aNAOw2I4yGdj-4bLeM zM>oG^lF*jdEW8O@QhpHOmsK-G!4)Qrt=`hJVOAlq-jDqgy~drCnvJw42n4x=jG2*K zXn%2Q40x76lPuE1w6m=CE#c_YxOjD@K@4#QRx7sS1*Wfbb#-U`F3*AJxMoDByjD4> zdO@DKHhgKsZf){ba-?EhbFZyt~3`?ZZ;w;_o#B!nVDk}*>f z(Iixo%$cWdWtMr!kYq|35*0}lqNHRNrGzLX$(ROZCPeJx>i53S^X&cZ&;D=wd_Uh5 z_jOKgd=UTfhwuv`J$HtGm ztB#L4UGSpozJ+FmQ}&4V0;6WdpS?EXvjlr#)xgJbezhRJO`DqC(zCLLs%I+8f>)N? z@15XR4agNuP+F%HclAy7;{DTdJUSNykKnBf48-kDh7Bpj4QZ(%Sa2hv&)8; zrZBiU+_`gS|Ni}sa@XNFXU6+h`YPUGIae!Tg<6T zU|}TeOJ8u5VV|X|t82~U;X)2}1#^mK6}c<^bJ2`Bi*Bh9EZK#`h>4RTyLT`Cc%Ngf zy#)&Z7|;ZY#@y53^a<78vldvkMOI z2uIR&+xG1^HO~n#ad9RV7B15@GK_227Ubr#;)NG4T|!8*p1j22!@j?NrFQ9EJcwy3 zXtYzGtRW}Ib3{|~Vq!7t-JG0;moG0#L^viUCSs{BN<>_{Ov#hHj8T8TrxSfULNT3|$c#wtD&e`EB$mAXgRG3oT$8oiqVR#fJytTlwwn?J>L&KNGp3>~-Z4 zbpZ5=Q!I~jEsvbzrzZut@C7qT?{nvpr`WrJCDC|+Trte70VX7EX*jcy z*LiHY#6!mL$GAZ}s;l_LOA?{iohZi(F7+{^CwR}&YbqVDDAW9i5z ze0&=Rc}ZVi-;EnLlHb|c+3B?;*1Ppw6+L!G<=D;3mvv1{uq@#eJ*XkLxI~|DShH{1 zbn4_uVSL<#^zb6i#opBm)D_XR`TlYTQniT4kNvTUW>~* z+nW2lh|ChTvdOhE$deEgW5Yv4X;|`<^a%q45j){>#4;5XX5=-p+B81~)w-o?WL|d9 zNJf|z#jss)hVCBc9h2M+D!Hwr@;Ip_*Y%mmbwd$Bk`{SaTiiN$UWJ@=(Dcoe-E#Hy zoh2I0XJd4l%k&u|(GoOPMVd>ag5;9zKR9?S^kj_`@&ll*@Me9OIS_m5)$Uulh+BoraLY=JVHzFR>+H3hDV;dmE1hG zwp%B4v*6a{Wo1d%4yHp)}a+gH`NnF=l_$xZYaF4UI zvs16dl?u_mUB`1g^u~@HfibxJCiwfFML4@vvX&idk6f2aa94ApQoA$vG2m0LkIMP; zmh zyu&s|vefBCvWCtbr;2=SoPTte!e7bL9u!oC*B{0oiFMrK9BafPc~0U{#>qkce$vQj z8$L7o9hjTnOx#n6Auo5*!;)J0sU>9qwj@?iQ?qD{-nL;4piTs?bI{m0H8D#GO+2np zx7c-r>N|;5uk2lwU#6a^Yinx@BjN~&kJhe_5`>EXZ=J@|^Y7lj&sJ%IIONNhFXWGN z_3wZAVoN^yxFKsBo9v~8)GJp6hqqRQFAH=CN=hDWynn#Nga@Ayn|XWEc46TI|JjY` z_NVnR z>)Y)*ZkLvp0z_jr9eV)9R@NAMBPb{+&!B+$(I59`OJ81J1z^q{;1&xy{u7N?XBWQR z`YG0$pODZ7o1~$kfxMN2MeI{yVMOo8_3@Qk7BTPzcmmY%=>H8dAq zZ_4VXdF&Xbqo+)zfpf&tqBq71&i#C<%kx9`PUKXfTcQq1V!#O)y=^R%c4 z|A(7cZ_4R5F*g^CR#Pb!L1K7wR$g8(B~M}AAJVg}6+3F$v4>h>5?Uq7+;l}qop+bu z-H_y=Wqhw}}PQ z{u^UzaGko^+5t3yTD8%Bs?XBdIS4JHR;}g10y| z2STjJj~=m`vbGsLb-sbbH9p%*9ERD1&6!oL02jQ9&ZH#;3c*E=K6)rm$pAwIk^(lX z&GB>DY)779c4`e>roh<$T&{ZYSkEKg|MOq=SB5Yf{m*}>7hk)vXf+vm{ICBm8uCP~ zs?OJTcXz*Xr*N9DdX(QHTNCmoDk$br={J z0Gi$RubnvpV%*wVkO2MFhz?XmhFNXcoVkx4z3b@#k93NeG7Fm$s+H~Tggx0+!}w(9oo_6JXCvINyAmq+}2}d?EmoHV8a@`d)SQ3ScoJ0@Cgv_g_0n zE%}4!5BCaEl6>EbW@-Bm9t5*<2X>{bd~j$;o+sAX1~GFmf*s=A+6Pa8r;aA$ z^lj0YWriXijX8N#`ETI3rl#C6GZ9BQOeb|}esTy50Xo4_<=2EQ zwUDkpD(XjHwOX|_x=|t?F!d{8c>id#g)@&mG!||`_7@GHOcK~L=4nz^Du z^8*Y)^w8wL>Em6$Ug*332|c}f_7W64H}F&XG1SUV7^s(a6?5*hYzBJzNtTJpNd!cB zrnOG7FyK}afT>DxZ^K^ z9=T(^u!#D3_IxTnmsjWv9+(-6K4-sB_ad5Wp|G_+YCZZ?zTnidPzji4&3oqY?WkNc z4q)79hohWDz$E?3>7}LVw}M)EhEUxU#cfZzWD!^SZ-#>P;aoN8f&O0~i|L0QO9$5T z@`_&y_q$zGq$|DW_xCoTWlHFHKF&q7Fjc}GkEiy#@yU}VsKyUE;uU#n-@BdI8~(E+ z^aLX#BVR*ON=lZ5%V>AWt$-;;qGDxv(WD@G)2*vl-;>nbXMPnQft&LyN$3kqPuMqI z%Ph~s<`mD>-@Y*X>xMeEdXDb45iN5z0ovrvn0U)eAn!p@oJ>0lYG6<+Ta@H^{OaJv zjlY>18%IfO7ZZybQcBXA?J%_Hm|Gq`Aib{xW3+15AWUW^Fy5_xGnjq)N_Ggk>#yod zd7{-9c;(RNaE7!s7ziG5YvbFSdz?N#5+=KXUD{$ZiXU$xl)OeboNt$mfmADv+F1vl zPd)9Fv-8+RHX$Md@KY{oWhX)_ZS4N=hzGp@+-#;!D$~&XkZ_w=6a>9%&DL zU{Sq}!2Wu%j;?PXVxxz{@0f5x2x*KhF$lf&6X}!EUBSx%{YThg251O$XXawF?NB?B zbM%FIgiB$4;U5H>J@u*WFg=&HW>sOXa>RocU0q#*fWd&Zj=@K>6Q!`H_5r4cOB5;>w2GIyHL@FX*FJ)GbZB96PDS7cQrGPG`x60 z-?s#dk0b+SZ$LnW(Mg}vkBW<-AB^&{K$>if()Ds+{M-_H4${;Bw3X{0 zzbP_ay|RqC&6A2PT$7^FiCV(neNJ~s9lfc-NWes(ogui~It|ZP>=lGfL!6g~M_r%e zhimAnu|k*~IfoA5WeF8e_U8SCoxq@RMf)0(L22@x>YJV%YG6{X1a(SuRR#Lrh&pAu z15>nL#%xr2_k*VhU9}gX9?3U*hT*lz8?1B4PKJ~56#)yfM8BV2Xzs>zX44`|N;RvR zeb=G<^9k3lH?GhDqS1wSYVZ!E0JhfyY0uURw5 z@7rHPAzrr4Em-4}X^GYT9l zo-aYRnBN8@blL<~iFOY*J{LTlSW|2geJe;^RM@y!-6i2@1A1TO!1)p_%#C zFMqdqZwveO;Fn{jWs5PhndS=-_MbvV7O6TfnTgqe4EX=Xw7cW}$c*~H&A2hG78)xo=c*#pR zW3xI-J({KzT|vnxp?UP^*PHPbG%I!m227+uyYFP|#L_O_TFtB7+N|r!P31_DJT-Xp zQ%ULvHF7M^uYLKO&yTQfXLqc5XV+hI9{lydP2LKi{H;nvN_$7cfy7)BEb$S`n&-~a z($cJ4zS7xjpD&MpE*C9r!GJz{X@27}T~3Wax9P9VAf}9sj3$^6AR(_!=5Qb0xxcfW zI-74?j35Kth`yd4`^JsCY+td~%5cvZdQ*b`3UA$Ni`N3c)CnJ8PCw4JV~8OHr?$^Q!3Y>(eP!HJ9c^Ez= zf3tYjnTfKD>C<4^2YfAZc#Y9M|0WS~p~Wv86N-uN%XZ+s(H@4(qEuGy2?~;yJXL0U z=1e}XwJ*jWIDUAaR})SNIp5I@mT=oGw7ABJFpAkqyDD&P5${LrEBFSf)!nh`Ju=ku zwbGa}3_!GYlQKuau9$4?lpxH#?c$QzAt8Y`*~HGS_f&Qy8jDH07eETuX>RQEn}cik zbn!vOl{TMb(pMST4UF}n&;poj8H)f(9r7%@F#Q>JNLfjVsDbstwZI10EQ`sep1~}U z(2TrUrt{{RZH`NS|3bIARf)N-!=ln}1L1nzOi?j0GLnJF828vivvWgx276Cc;BFiH%Ty+3I2Ntg0v&f(pnEnNb37Tm;1b$(?XV~{kd1h)3rslhn^pGw-U_pIahLT3ueqX2TtR_^O0d!e%J#zrCME2N zS$nuv9QEbFYtS`Rpj$ox<+TNad*?<3CpgPXW98#TpQI!uFMRvEnO}e3+AMw|M5=n} zT}w+`#OZ!;YdZtxT|Z9&7)FMNug*V3m&x>JdgNTrwY&FwjcZn_`BVdZ5TXO8=QC}n zmpF*{{e|8(Zqkt|d3!!-mV zb9^;qxX`$^#R~{+QMt8Ufm@W3LO#th1Lp8&+1%1#YPx~H5hc1^pu`EtUa9Oe(GO-}dr~6+IB;CN>Yvp^CqFEWSAQR9KQwV9D53M>TZ)%c z{%(Fxnh$>^3#xmbc{qUc1Sq^A@5GsGIqDfn4WQr-F-_| zIR%JZXxqT*H+FlW`nQS9g|`g&;esPXZ8s1+4J{?cQ1NWaUNaG zm?-XZUa!C)4~aB0Y)BT*>c*B9b4XfX3oktDYNZ+%kK``OoARS41oRuIb>KcHuzU9> zh>~Ev921aqu-kZhp1aGNb2+JlYH<4W=~Ax1bDrXH7UmZ+PYFPXf#(gZv9j2=Qbgw! z!`1Owx=IHA0xQZ5b8uF1Uhp$x-$vT`m-(FgzW19S!G!ve@$o`a(3o=6_S~|RoR%(_ z8Dw@r_!KJk`p{~(a_M{DZr19hp@#RK!`c z3u+aCClZ3+@%BLRMWJO*rqb@aczoB=o_SLy&Nb28kh<5b_x562#4*|id)j`W6hwD; zV#EHFel3PyeDnRxRwY4nv(X?WkzX6_tFDH1gr~z?0BmFAbd$7}8cvy+Nr%UV;8ghg z`wwZVv&x4U@0NMR#_wq-e`j2d!X;^jDDLAk57E1HR>+uq-y8r0dFW6>8T*lHAAkS1 zn5Kk~KT{W#rMFGJ(Ryc{IFdXsGL&pf|ojdCU z{vJMjI9KJn^0f>HPUZOz-WvP%;lT28b6_@tnI4l z&%Iz@@p-KFi&79@cfD(4V_ET2MXtq?m8x(hCB?zP;RA@(%a>Wr>L_oI=$Dz>8-;Ej zo4paWUi9cK)z1*Wl&ddgAd9oVPy81@-On`x3mWcq^NkNyJq&f(sB&%3jqIiUtsPfy z&9&E{{(y^&#?*CHPruuWh+lon*F?5EBKbM(t@Th2xaqd76;p}s%H#a^8saHzQ z+;sHxl$s9~!4lgJ@zbe`umWa%ZK`c77O|X5hR8CrEOp1A@xXL?2K5tb7&}BZovFN zWaxAB{N6C)p$b4>Zp}IeQ&OGFTTik!{k}@UszL{2CVv0sRG(2k&usLE=18V?isUdC ze)mcD69?`9p#F@jZ@Ft7ufyx)(}{k8Av2An8A*UrBIcW|z5VUouOWCYe)LF=XKjNU z;9*#`gZ487kQKv!xt-hf&QvsvmgG< z%grT1fD0!JL+(G@GF%}#)0lfa3u)1sr|VWg!4MPklQwMG@A$j!8Kj+DTj@dv26$hSCxTH8f~`-~RrwGH~(Svhg+50}~|{#}LnMl(D9(rW@tSH5wFE z4%Q+pqE`Nn2YX562Gu-%u{1;d{yZj`hcA#WYZM$aqw+n*pF#n&oMju=$R4-eyft9G zQe554x&V*OR3QMQf}N>OTve33qM{<0YWT`)w~rIoWxe{Y!o_{KQChNgrzHl4sVlzX zQ9U67if4zkDWbTI_us5IOLM;xn4`Kc{yzJ-O~rQ#?3X>_>kBes`V#2HMnfPW0@FAe z)PlIQ>s6Wci#5LvL%KB4?{}7`aHE{Xl$w_DUJ^2cxZS+_95aCl9YVJ+muTO3=@8OkZB!ZR_TZQ)+A^FLfYmfv)k~BRKI9_^xg8dm^V^U zF)?%@EUNPY@Bs=6=VnJb2vf^Yim>+!%FSNyhTB`V>w*W$%Fl^y0g`$M}eRqlchI6}E4uHYSSA z`YG=x{_KD+04WD2^uVMRUyGf%lX&a=GLk=NHG%L{OGl>y?)*Us zBv|#8xqi(z_mFZ55X;eAQmaCs$BYv9C52_AQhq>^TKG` zsq&Jd=qjS4rS)8%b-joVD;8`EvSkGO`t`fw>N4bz%lhZTd3!Kg1L>u%TKGA;amHx< zkQ1+FIT#oskEt%)=|0urw7SbGKF@PXyRg zqkh)vwF{#8mfhnQMV!wL{rKUFOwYpfHyaxl5H8rC+NJhq&ZJ+t^2nxPox!8vl_1Vf z+Nn+{*ws?d zHj7+!2_T>m;ob+<$EtgAHj3+teQ36ij&o>T2n>^m_Ma z6;^c@me>^)pCYmNR&_BSHjijUY=R0rv_k2O$PZVy1YvviYB5r1h?J}k2afNh5}ypQ zj<|R#^ex8+kkPD0{K3!8K2^)W-~a08(9ra+k2`}R&sbWPS_d^P%hRg?-_S>s>uyCf=k-IqbWilk*Ltz;ADF#h>n5oc+ng#@1Hp@7-2kum`H;d0h12 z5q|z#@U8K@itDnDRZO?+1{8tF(u#q5Uv3&7QDRhZB}{vAl6^TcpZ8yo|v^Jj3 zeO1a+H^*8MIw0KT2ierxy9cD_bC5kAc7Nt9$Q`gTCMJeiq-HCB+)yjy@PU;=D?|R9 zhOH2(bUzkQlG=XtwX|IfW!l9=SykM|#-{F7%FGH)AKf!EXH5&9GKd!o3{1~%I&HLd zSx9eeFJ_R34JsXl+@nbQ-m`P73Q2j#l3AhgQ@QrwTa)q13Yz_Pxs-ro%vED6U2AzJ z4snM4ADO2krvLZso}6us;D05e@QwNDS0M-fTU$h@Uh(cSCHlW}RjWgNvbWH3{tx*P z-K5sORXhH7E{nX@VA6$u@9VW6I)X02_Dw*j|AaIDUKL&oj^njkdY4{1TT)UIQ~*fN zu?mvckhXRe~hPqo`^j$lij zO6S2rgocJf#%c&oMBKaS^=q;1+x?z-puF{SPY>_~A%JZU$7QhJZx<5ausE>2Gv3iC z27~`G$?F&y=Oi<9#~YBt1;+#hRge|(Q|Hb-(aIj=qLy?6kfm%M!^ks^H7}yiRX$eu zmx8MJUPWBKc{2#)3+U^PWS$fH`gii~Eoz3su;2m7}hxb7B{iHyf{AV-9VBn zHGr`*-b~~(&b2`v@YkptnN=d$H|fZY^8(o zo7WOF!9%ch%mf|JhIP|WIY_y2rRuCA6Tnj4c2w#g_LRSezPK+$k9|UX0Vjd7gKWKf zy4wu$jbtoqLI7iy=F&);A>5*o-PzEy>o2mY zs;bWWeP`6xeuMBF(ankA;`;w=t(lPyCPGk1Xn~|ii3yOV(<#MPJt2tls(WIUy++zI z)WfLWC<}q={`;`xqD$`YDv~C|o#AmLYT02-6?}~XeiH=VN`rr;=K)wyeKWHP*;I95s~_)jAb()rO@~%t2!d56S;0vmp%9(gjv(T z^FL?rBCt8Q$-K~e%SFSD&^v^0v2k`*4O*H9wt2`t^H}4X>k~`eOkJ~Q?slLleiebw zzyd%Ul&bT4^l9Hz)|PZUFn|(RFSzie*S0BA7Vr<8J#+X+{C2*Ay|2E0J9fonBb?IP z#>T;Mut8(E-7x=ZNM=wFwcLx(0GBh=i^Ia0d{7qNf)G$syJew-R5&CEkDBM_@5nGD z6U4@m!~50s=RtrDW^+oJH(8jcBqu-do2B;1V>jR_oP=QeVsv!cPKR}ypTSNbt3+ji zj+v7{H+SB$^3bp_JK2vo#@NdjKUi(4+^iZvGEmk7fD6X9v3R1WmUFPRRJ3~aYRh31!eBjC@EEe!TPDGvNc({M2G44|<9Pde z-QvMx8y{fVv8kGlsYs%~{1suP7)gsNm0i11H~E6zMZ^ya4US^H{F={csxUr)?gtE| zDDW`2iyHB_sXGs`CJI1DCZ>XPCrK0ryP(jgS6}2R{CDNHKO45Q2Tb!3G5l)FB_GUf z(%_y*y49TeJe(0-;_S*{2!PHa%fTZ1gSDoDs6!Qyj?mQXEWkqk@1pSVaO5-Q`hqRI z4WS6q5lNFf&3;MZ>T75h+zd@jx&b7MT%lq?rtw!k2@qdj6;*WZsj1B6GlDn zW8)Yy&Xqvy)I%2%5`zAggY}HWe18}V4Gj&z-sr#pg@9}M8m)|kQcX<_^y-_&(^66* z{a2Qzj}i0pL-G4GG(cRAz)|$~69mZKvJ$fLgx~{wN0Q!K>g5+68S8rJ0MPm>k^ws| zWJt-(`D4y8{@~yhyeo)$+P#{ZtMlFQqYx8-F%)BU zK~M#(;NZ{)(i6pvS4EDjVPUEE`ib23h6cCqC2|fee80KCtKZ4bj~P;8rd4xn6~JIg zFsUGRoaCT1Vr2iEkA#!R7X%|A; zu90KO0%n1Z08%dX#uGwhNE-svrz$8&W4If;m~RfL&!+s~+*kMw9$rB`Y)} zGHO4B@o+4Jo10r{)R;7116;J@V11O)MPHx7Q{@-Zkei|jft9?8Ovci}v{KHC$4s0$ zRJ@5{q4}P`KXMIjz&|iP^|a7@Qfe9+4v~p@6yD{=@+uBW>XQ{=$8IQZ;O18How6la z>~GN|kqrD~Ug}y4m5bV+ESWbSKVr|nK`eE1mxl<^)zyWD1d3%PFLO5J_HYD-7&NBa}tXJDDt8w!+W*mc_9G-6jJaK zuspf`yJIe8=x#H5jmU388DLLN&J!DyU}a-tCy-9MuqWj~~k^ME-drRgGwS7LcA20tPB}s1$?Sum%+iU(*n-*PFWXMXrx6 zjY-_&i>5!wR-neEe3{n%b?MYiJVijK^L~sCJ1sNaJy3sD<&!Is87QHqwt{s&!*!nq(?=bYn)T$eqN6Ucq> z$U&GDvNG(=KKnGsAnUa60g>G-M_nL|j9&uSxYe@E_1NgtGxvy5vUYB#cIND*(KYMV z#YII~r8zp=Jdyr~4aY61HjnKPl|ZBkZ|DB@+Zl*ju{NC=DHF*4PD(w3pyb>H)L$Rz zH#UVtbmqZ(AaLq=!EBT()_hCNBCq4odbgOPhY#1%0*4-3wj*H-7Z+FD5R|fMX`dj` zbNkAyE}pbke?NZL=LUvRtXsXhzmH_>VOt;wN;>oL(TjKQ*zKwy5$Nlh0n(z~3$rli zP1^}%0i$keZ2UUT4Bc7vzqvew^Ti>a)}E(Il+#=I5Z6=#l~)qkgbqrF33ZB#ibe)E zlG-GBjkBpqI%x{cI3}YnRtAAWP}-TF&%DC5Jle{Ul$`t$RO${{THyw_(teJd&B#2} zaH)!je1$7n(w;nw@)Y{BUcB94-ohM{c#2q7Yz8U z+R?6pGRFl6=mFOd5O-ATX0_qy|LUv0WwA}#G7tnVD4R3ug`6h5MB;|PbjKcJ5%o$v z!Fvm`PY%qTT0{oX@)+-|LKQPuL~35BcILnjhz|G~tT?ycRrKKF+Pt~tz8ZKZQPCV! zy`1v>Cmf?A&JX?zIA^b8FEn413G-KF46pjKbox0mv;f)sEX$b6P3+A$-QUh}RQ2!F z8!4SVHa@<-$ZC5l@kyCHzNoflCv7Jf6au-Vv|z!OT+q|;Nn5vW?SXy{wpv{LCz-zf zZX1_eP4&CMfJjqGNzM-JZRiPBOEl_Gsh>9_Tfh@#4-ihi#C8pf!htji1& z6A%y>2oWI*f#muP6<=AA6tpE~`bRUv>dDC^qV+h|#M6VYk@k^OzyV@zk?6;?R)Aa@ z0+}4@i&D^O*iv*6+&vs#q1XkfI-P)zWXuRq3MvT0Es+?XP^k$QpzV(q^p?e>%Mwz% zGE@q_35WG8SVtnnUJ9Z2a>9;dw@nIe%AM8&*@u~<;71CJT0!|AWiN7Rd~41xWoKvO*q-zB-2d?G*|Q65 z%~TOd$uXQ$E)Img6yo6XK_v(mqxsL@*5wjQ>ltBio=Znauqi=R(y+~xiSUaq^p~$2;teAE?)|?{^Kx-{F)(Ph{*!rxKRkvzINvNRPgWE%C z7fHg7)hCg`atFr zdDXosl612gL6=d637%rybF_N{NjJ0bDHS23V4r>+u{6v;Tk6HsOSZBb{|GTb^7XK& z$fr#rCN>tJw*osG$3_AJ0QlG6IBy_v>O}@roy{`P{pbiu;>aa*qZ&ve``JOYF27@s|&5Edva09s7 zvhPCCk8<+lnm#?65s}f|j)%)L<_^D!H0tdv)`Pn2{lmjvzkeB@_hLSkTITs9RN)b# z!s6F87>#}4;KAGOt$Bu0=cH-59{qR((?o9AnN>(E=zC5uuAb_)wX?HQO+oZo080*` zijgzCuIr*kYp=uU(;p)u;djtP-~sg=umNHOp7bJJMe8)Qi&)LVGTxdQmX{}9?t@?* zlJhU_&mP=Fi`-|hMF_C1a=i%0?#Dl>z5S5e`Gg!a-Okifz6|_m#m5gCZxl{dR#v8@ ze87(Y$DVlp&`Z9|cH=kwvh_dqrLcB#60i(sdD9+0Iq`3bYmb7E!+)WkVPTcR@BJ;p9Xk0&pHQ zA%%rf{<=`9!tw*}-~a82BlQ&N3Ah%WgtBv^Ji#Y3bVNM7y;+!<_3!DIb#Jy`Fovdd zCD_fwgBQZQW@@sIh`59Vl6~@b#h+^geASt|f%pPPi0-GzKOU>97`;yrveZmpW4?&Z zSX?}PMOYh@Nz2PBph=k7wDbGW_MsM66o? zlqKgkSUs45N(}S~7V>Os#(B`Ig@uJFDO@{0>YqFb&@;fJ%)GDGU<5w+q2DCx?2I2; zA0RomRGq9gaEP@{O)>X8nA>-`mDrb9hF^+g;ZFulpPY=gFVJI6#wzyiof9T-Gq8L1 zh31v!Uz9p=pb_EGPLB}KF)v{kEHEf3E1OpZ>=G4a*f%>}5QMejQ*zBHF5Y>fEKzG1 zzKqgefJczfG+`D<{rG4YEKc)d*?d*gE57hXFgPcj=(estobi@0MG|8BukI2iPuXU- zx3TL&OVhYJ*a?!N^%~J9xObo1A#!KvpP&fVVwgX^<-`(QXzpn%OBXndWtC)`=k|mV z%o$WpL``=$Po0B1A83kQ#Kg>uSqU`>OA#5_a9!RB1}(xr)m;IRJl}Hl;@ECt9;HW~ zKT#AO$`B0c;WdRez><^aeW#?%E4n^>;0pdWJnY7olAa!uhCEd;5GlnHdFBa~@4JZ| zrcZQS6X3~^*c%w9dT4v_eH$9u>D;5VY%@1IYnR4-dqXX+Rfc4M?)Uai#F|Yf!x^UQ zdOi3W0^Wnlh&oq^xP8jsM@RB?S)gYTD2#?m?l5MT$V;I4g?i(LO39dNTG8WeSgFmU z&CG=_tL6QhCoC+TH2%RO%Nob;+|;Wqan;;SX|+v?fP6ZWmdcQ`EfLDcdvDyh0gu?E zAai%aT@Ft#FNAl($>`LRl{O7}0c^u1!=R}zjAM2~i;#x2Dn%^Mmp-ki;H&dSod+1@ zwO*T%r%djOWGNP(%&QqpOi4+xasCe5FSC#L(s79A#f6c8)t%cX!M2klYgGi-@q7B* zc3vQru~rSyMYHiVRV&N>J~t&(hm_<*9#w8nTJ!mRzwgCB`#q@nki04lxqEzrXkE2x z+E+4MYq3LV*LniI?@|c*0q5uuqzh{+akjbdQfou$b+m1tBG16HwC9Xk?-(#@ z&veCAVgil$`d4HOo{qi{;rE&~ z8aHZRys&$9d5g{@03C|t$67OK`=Ui5gYD@_A9oC!4uxlhszDCw!tT`#Ze(gbCI+pg z;K!jl>W}OMNxC=`uLc?Lj-E#^T}DM5&RjEcDSGD5BkPSRc-t={gF*)%X$Ha0`34%?-q1pkenZAOLq z;bX@Pw1IVmSJb1cdw|u?yv^mT|ABw;0tmDgVkv+vzO=XFHH|!f(;Za4;vqag*jR69qT_NexqP zfLq0;Q}dg-Sbgbz2>coMF84d0BigJT8f5zTVi`KjO@UGm#srwH?5se_&@?jg^^wjs zRDc={>D>Z6#=F=l=gVNKBO@b=OQ-0z9Qi-;)zI7jd&z%Z_+Q!R|0==!f2+Uze-^#| i|Ctv5|GJUuE3^!=gLCu~pR)*j9X@b${{s!n(Ekf0yofab literal 162119 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⪼Htx61+58y%Bm1s@ILY%;ZKR{CYrl&o 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ξ>yv3f>yu=?y^!6fn+uUNQ2;_9Li0STD31#Y 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

er=M59n>-K_fuua@?04xh-qB4weY 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≪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

Em2)WpAjROJ(96~*A*k=!W1cC4B&#> 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 Date: Tue, 20 Jan 2026 17:57:06 +0530 Subject: [PATCH 026/102] docs correction. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index a2acde7a..32e6fb7e 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -153,7 +153,8 @@ if (popMessage) Once you have a `rtl::Function`, a complete reflective call involves two steps: -[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] +**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** + ```cpp auto [err, retObj] = popMessage->bind().call(); ``` @@ -234,7 +235,8 @@ if (classPerson) ### Binding an Object and Calling 🔗 -[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] +**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** + ```cpp auto [err, retObj] = setProfile->bind(targetObj).call(std::string("Developer")); ``` @@ -257,7 +259,8 @@ Errors specific to member function calls: ### Binding Signatures and Perfect Forwarding 🎯 -[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] +**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** + ```cpp setProfile->bind(targetObj).call(10); // 10 forwarded as int setProfile->bind(targetObj).call(10); // 10 forwarded as double (10.0) @@ -277,7 +280,8 @@ setProfile->bind(targetObj).call(10); // compile-time error ### Const vs Non-Const Method Binding ⚡ -[THIS SECTION NEEDS TO BE UPDATED AS PER THE NEW CALLABLES] +**[THIS SECTION NEEDS TO BE UPDATED AS PER THE NEW CALLABLES]** + When binding methods reflectively, RTL enforces const-correctness in a way that mirrors C++ itself, but with an extra layer of runtime safety. Let’s walk through how this works. #### Default Behavior @@ -362,14 +366,17 @@ To construct a reflected object, first grab the `Record` that represents the typ std::optional classPerson = cxx::mirror().getRecord("Person"); // Default constructor — create on heap + [THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] auto [err, person] = classPerson->create(); + if (err == rtl::error::None) { // construction successful, use object to call methods now... } // Overloaded constructor — this time create on stack + [THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] auto [err, person] = classPerson->create( std::string("John Doe"), From 5e0dd9ee983940d44d61362586c9d0879d6a6001 Mon Sep 17 00:00:00 2001 From: neeraj Date: Tue, 20 Jan 2026 19:39:23 +0530 Subject: [PATCH 027/102] perf. summary edits. --- README.md | 2 +- docs/benchmark_summary.md | 41 +++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 74eac01f..9498a07f 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ RTL’s reflective calls are comparable to `std::function` for fully type-erased * ***Zero-Overhead by Design*** – Metadata can be registered and resolved lazily. Reflection introduces no runtime cost beyond the features explicitly exercised by the user. -* ***Hot-Loop Safe*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. *([Benchmark Summary](docs/benchmark_summary.md))* +* ***Hot-Loop Ready*** – Typed reflection calls exhibit near-zero overhead and scale like direct calls, making RTL suitable for performance-critical and tight-loop workloads. *([Performance Summary](docs/benchmark_summary.md))* * ***Tooling-Friendly Architecture*** – Reflection metadata is encapsulated in a single immutable, lazily-initialized structure that can be shared with external tools and frameworks without compile-time type knowledge – suitable for serializers, debuggers, test frameworks, scripting engines, and editors. diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index 8bc0d828..d3e78bad 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -8,6 +8,8 @@ The benchmark measures the cost of invoking functions that perform simple but re ### Lightweight Workflow +The get/set functions are called via reflection and, and RTL’s dispatch layer perfect-forwards the provided arguments to the target call site. + * The input string of length 500 is passed by value as `std::string_view`. * The function `set(std::string_view)` copies the argument. This copy is very lightweight, as it only contains a pointer and a size. * The actual work performed is concatenating the passed string into a global `std::string` for a given number of iterations (the workload scale). @@ -26,25 +28,6 @@ The benchmarks therefore highlight how different call paths – direct calls, `s Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* -## 🖥️ Test Platform (Linux) - -The benchmarks were executed on a modern multi-core x86_64 system with dynamic CPU frequency scaling. - -**Hardware characteristics observed across runs:** - -* **CPU:** 16 logical cores -* **Frequency:** ~800 MHz to ~4.8 GHz (dynamic scaling) -* **Cache hierarchy:** - - * L1 Data: 48 KiB × 8 - * L1 Instruction: 32 KiB × 8 - * L2 Unified: 1280 KiB × 8 - * L3 Unified: 20 MiB × 1 -* **Load average:** Typically below 1.0 -* All benchmarks were compiled with `clang 21` using default release optimizations. - -Multiple runs at different frequencies confirm that the relative performance trends are stable and not tied to a specific clock rate. - ## 🚀 Results with `std::string_view` Workflow ### Dispatch Overhead (Scale = 0) @@ -92,6 +75,26 @@ Multiple runs at different frequencies confirm that the relative performance tre * Reflection does not distort scaling behavior or introduce nonlinear slowdowns. * The value vs view semantics have a larger performance impact than reflection itself. +## 🖥️ Test Bed + +The benchmarks were executed on a Linux x86_64 system in a typical release-style configuration. The details below capture the essential factors needed for reproducibility. + +* **OS:** Linux (Kernel `6.12.38+kali-amd64`) +* **Compiler:** Clang++ **21.1.8** +* **C++ Standard:** GNU++20 (`-std=gnu++20`) +* **Optimization:** `-O3 -DNDEBUG` +* **LTO:** disabled (no `-flto`) +* **RTTI / Exceptions:** enabled (defaults) +* **CPU tuning:** generic x86-64 (no `-march=native`) +* **Standard library:** `libstdc++` (system default) + +**Hardware (observed):** + +* 16 logical cores +* Dynamic frequency scaling (~800 MHz – ~4.8 GHz) + +Benchmarks were run multiple times under **low system load** (load average consistently < 1.0, as recorded in logs) to ensure stable and comparable performance trends across workloads. + ## 📂 Raw Benchmark Logs [benchmark_runs_string.log](benchmark_runs_string.log) From 6b444f8321a10eb5bd59d488bb394334cf878b23 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 20 Jan 2026 19:42:43 +0530 Subject: [PATCH 028/102] Update benchmark_summary.md --- docs/benchmark_summary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index d3e78bad..fe8f8ca1 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -34,7 +34,7 @@ Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* -> **RTL (erased)** refers to fully type-erased calls where the target and return type are erased at runtime. +***RTL (standard)** refers to typed calls where the target and return types are known at compile time.* ### Moderate Workload (Scale = 0–150) From a132a45007f2be2a93d9c98603133be8bc2c9c72 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 20 Jan 2026 21:55:36 +0530 Subject: [PATCH 029/102] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9498a07f..2674e0c4 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ if(cToStr) { // Function materialized? ⚡ **Performance** -RTL’s reflective calls are comparable to `std::function` for fully type-erased dispatch, and achieve lower call overhead *(just a function-pointer hop)* when argument and return types are known. +RTL’s reflective calls are comparable to `std::function`, and achieve lower overhead when argument and return types are fully specified. ## Design Highlights From 7b1a374361fc7bf29f40ae9d2ac4cc8e5476520f Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 20 Jan 2026 22:06:32 +0530 Subject: [PATCH 030/102] Update benchmark_summary.md --- docs/benchmark_summary.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index fe8f8ca1..d9e18bcd 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -8,7 +8,7 @@ The benchmark measures the cost of invoking functions that perform simple but re ### Lightweight Workflow -The get/set functions are called via reflection and, and RTL’s dispatch layer perfect-forwards the provided arguments to the target call site. +The `set`/`get` functions are called via reflection and, and RTL’s dispatch layer perfect-forwards the provided arguments to the target call site. * The input string of length 500 is passed by value as `std::string_view`. * The function `set(std::string_view)` copies the argument. This copy is very lightweight, as it only contains a pointer and a size. @@ -30,15 +30,15 @@ Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* ## 🚀 Results with `std::string_view` Workflow -### Dispatch Overhead (Scale = 0) +### Dispatch Overhead ***RTL (standard)** refers to typed calls where the target and return types are known at compile time.* -### Moderate Workload (Scale = 0–150) +### Scaling Workloads (0 to 150) - + ### Observations @@ -49,13 +49,13 @@ Workload scales tested: *0, 1, 5, 10, 15, 20, 25 … up to 150.* ## 🧱 Results with `std::string` Workflow -### Dispatch Overhead (Scale = 0) +### Dispatch Overhead -### Heavy Workload (Scale = 0-150) +### Scaling Workloads (0 to 150) - + ### Observations From a4204d35249039d49278da96df53d937ff999f74 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 20 Jan 2026 22:34:31 +0530 Subject: [PATCH 031/102] Update benchmark_summary.md --- docs/benchmark_summary.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index d9e18bcd..279e1847 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -4,11 +4,11 @@ This document provides a concise, evidence-backed overview of the runtime perfor ## 🧪 Benchmark Overview -The benchmark measures the cost of invoking functions that perform simple but realistic `string` work. Two variants are evaluated using the types `std::string_view` and `std::string`. +The benchmark measures the cost of calling functions that perform simple but realistic `string` work. Two variants are evaluated using the types `std::string_view` and `std::string`. ### Lightweight Workflow -The `set`/`get` functions are called via reflection and, and RTL’s dispatch layer perfect-forwards the provided arguments to the target call site. +The `set`/`get` functions are called via reflection and, RTL’s dispatch layer perfect-forwards the provided arguments to the target call site. * The input string of length 500 is passed by value as `std::string_view`. * The function `set(std::string_view)` copies the argument. This copy is very lightweight, as it only contains a pointer and a size. From bc52a498125b475baf2a851d2fbac5419c136df0 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 00:10:08 +0530 Subject: [PATCH 032/102] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2674e0c4..e491f8cd 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ First, create an instance of `rtl::CxxMirror` – ```c++ auto cxx_mirror = rtl::CxxMirror({ /* ...register all types here... */ }); ``` -The `cxx_mirror` object provides access to the runtime reflection system. It stores metadata for all registered entities and supports name-based lookup. The object may reside in any translation unit. To make it globally accessible while ensuring lazy initialization, a singleton access interface can be used – +The `cxx_mirror` object provides access to the runtime reflection system. It references metadata for all registered entities and supports name-based lookup. The object may reside in any translation unit. To make it globally accessible while ensuring lazy initialization, a singleton access interface can be used – ```c++ // MyReflection.h namespace rtl { class CxxMirror; } // Forward declaration, no includes here! From f1de6f35f386fd2b220e47783d111c887d941437 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 09:13:51 +0530 Subject: [PATCH 033/102] design doc update. --- docs/DESIGN_PRINCIPLES_AND_FEATURES.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/docs/DESIGN_PRINCIPLES_AND_FEATURES.md index bbf5a074..bdfa19a6 100644 --- a/docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -5,7 +5,7 @@ All registration is performed lazily and explicitly by user code, and registered For every registered type, method, or function, RTL creates a **dedicated dispatch object** that encapsulates: -* The callable pointer (function, method, or functor) +* The callable function-pointer * The associated reflection metadata These dispatch objects are defined in: @@ -18,9 +18,8 @@ rtl/dispatch/method_ptr.h Each dispatch object is: * Created **exactly once per unique registration** -* Stored in a process-lifetime `std::list` +* Stored in a process-lifetime (`static std::list`) * Reused across all `rtl::CxxMirror` instances -* Never duplicated, regardless of how many times or where the same registration statement is executed Repeated registration attempts always resolve to the same existing object. This ensures deterministic behavior – metadata identity is stable regardless of initialization order or how many translation units register the same type. From e30e5c6b37588b91007987e322f4cecb3f6d9dcb Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 09:40:30 +0530 Subject: [PATCH 034/102] doc: Syntax-n-Semantics update. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 56 ++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 32e6fb7e..923e3cd9 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -23,33 +23,39 @@ This guide walks you step by step through RTL’s reflection syntax. ## Building the Mirror 🪞 -Before registering anything, you need a central place to hold all reflection metadata references: the `rtl::CxxMirror`. You can create an instance, passing all type metadata through an initializer list — each type obtained via `rtl::type()`. +Before querying or using reflection, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities. + +The mirror is constructed using an initializer list of registration expressions, typically produced via `rtl::type()`. ```cpp - auto cxx_mirror = rtl::CxxMirror({ - // .. all the registrations go here, comma separated .. - }); +auto cxx_mirror = rtl::CxxMirror({ + // registration expressions, comma separated +}); ``` -Every registration statement you add here is collected into the `rtl::CxxMirror` as an `rtl::Function` object. The `CxxMirror` is an access-interface of RTL. Every type, function, or method you register, the metadata references gets encapsulated into this single object, serving as the gateway to query, introspect, and instantiate all registered types at runtime. +Each registration expression contributes references to the underlying metadata objects, which are created by RTL only if they do not already exist. +`rtl::CxxMirror` does not own or duplicate this metadata; it encapsulates references to it and acts as a lightweight access interface. + +Through the mirror, all registered types, functions, and methods can be queried, inspected, and instantiated at runtime. The mirror serves as a single entry point for reflection operations without introducing centralized global state. + +### Key Points on Managing `rtl::CxxMirror` + +* **Dispensable by design** – `rtl::CxxMirror` carries no hidden global state. You may define a single central mirror, create multiple mirrors in different scopes, or rebuild mirrors on demand. RTL imposes no restrictions on how its lifetime is managed. -### A few key points about managing this object +* **Duplicate registration is harmless** – Identical registrations always resolve to the same metadata. If a canonical function-pointer is already registered, it is not inserted again; subsequent registrations simply reference the existing entry. -* ***Dispensable by design*** → The `CxxMirror` itself carries no hidden global state. You can define one central mirror, create multiple mirrors in different scopes, or even rebuild mirrors on demand. RTL imposes no restriction on how you manage its lifetime. +* **Thread-safety guaranteed by RTL** – Regardless of how mirrors are managed (singleton, multiple, or transient), RTL ensures synchronized, race-free registration and access across threads. -* ***Duplicate registration is harmless*** → Identical registrations always materialize the same metadata. If a canonical function pointer is already registered, it is not added again to the metadata cache — it simply refers back to the existing entry. +* **Registration overhead is deliberate** – Each registration incurs a small, one-time cost in memory and initialization time: -* ***Thread-safety guaranteed by RTL*** → No matter how you choose to manage mirrors (singleton, multiple, or transient), RTL itself guarantees synchronized, race-free registration and access across threads. + * A lock is acquired on the metadata cache. + * Existing entries are checked for a function-pointer. + * If no match is found, a new entry is inserted. -* ***Overhead is deliberate*** → Each registration carries a small cost in memory and initialization time. Concretely: - * Every registration statement acquires a lock on the metadata cache. - * It checks whether the function-pointer is already present. - * If not, it adds the new entry to the metadata cache. - -This ensures thread-safety and prevents redundant entries. While negligible for isolated registrations, this cost can accumulate when initializing many mirrors in hot loops or same again and again. + This ensures thread safety and prevents redundant metadata. While negligible for typical usage, the cost can accumulate if registrations are repeatedly performed in hot paths or tight loops. 👉 Bottom Line -> *"Manage `CxxMirror` however your design requires — singleton, multiple, or transient. Each registration incurs a lock and table lookup, but the cost is negligible in normal use and only exists at initialization time."* +> *Manage `rtl::CxxMirror` according to your design needs–singleton, multiple, or transient. Registration involves a lock and a lookup, but the cost is incurred only during initialization and remains negligible for normal usage.* --- @@ -114,7 +120,7 @@ rtl::type().member().method<..signature..>("method").build(&T::f); 👉 **Note:** > ***The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.*** -With these constructs—namespaces, non-member functions, overloads, records `(class/struct)`, constructors, and methods—you now have the full registration syntax for RTL. Together, they let you build a complete reflective model of your C++ code. +With these constructs–namespaces, non-member functions, overloads, records `(class/struct)`, constructors, and methods–you now have the full registration syntax for RTL. Together, they let you build a complete reflective model of your C++ code. --- @@ -356,7 +362,7 @@ bool safe = robj.isConstCastSafe(); ## Reflective Construction and Destruction 🏗️ -Reflection in RTL doesn’t stop at functions and methods — you can also create full-fledged objects at runtime, directly through their reflected constructors. Cleanup, on the other hand, is fully automatic thanks to C++’s RAII. +Reflection in RTL doesn’t stop at functions and methods – you can also create full-fledged objects at runtime, directly through their reflected constructors. Cleanup, on the other hand, is fully automatic thanks to C++’s RAII. ### Constructing Objects @@ -365,7 +371,7 @@ To construct a reflected object, first grab the `Record` that represents the typ ```cpp std::optional classPerson = cxx::mirror().getRecord("Person"); -// Default constructor — create on heap +// Default constructor – create on heap [THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] auto [err, person] = classPerson->create(); @@ -375,7 +381,7 @@ if (err == rtl::error::None) // construction successful, use object to call methods now... } -// Overloaded constructor — this time create on stack +// Overloaded constructor – this time create on stack [THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] auto [err, person] = classPerson->create( @@ -386,7 +392,7 @@ auto [err, person] = classPerson->create( Key takeaways: -* Allocation policy is always explicit — you decide `Heap` or `Stack`. +* Allocation policy is always explicit – you decide `Heap` or `Stack`. * Creation returns `[rtl::error, rtl::RObject]`. * If construction fails, `error != rtl::error::None` and the `RObject` will be empty. * `rtl::error::SignatureMismatch` if provided arguments/signature don’t match with expected signature or any overload. @@ -406,9 +412,9 @@ RTL does **not** give you a “destroy” API. All lifetime management is pure * This design is intentional: * No risk of manual double-free or dangling references. -* Mirrors idiomatic C++ usage — you never call destructors explicitly in regular code, and you don’t here either. +* Mirrors idiomatic C++ usage – you never call destructors explicitly in regular code, and you don’t here either. -**Bottom line:** you never destroy a reflected object yourself — RAII does it for you. +**Bottom line:** you never destroy a reflected object yourself – RAII does it for you. ### Creating Reflected Objects With Static-Type @@ -446,7 +452,7 @@ RObject obj2 = std::move(obj1); * The reflected type’s **move constructor** is invoked. * Ownership of the object transfers into `obj2`. * The moved-from object (`obj1`) becomes **empty**. -* No duplication or destruction happens — the object is simply relocated. +* No duplication or destruction happens – the object is simply relocated. 👉 **Key idea:** > *Stack move = reflected type’s move constructor is called.* @@ -476,7 +482,7 @@ Across both stack and heap moves: * The moved-from `RObject` is always **empty**. * The destination `RObject` becomes the sole owner. -* RAII ensures proper cleanup — objects are destroyed once and only once. +* RAII ensures proper cleanup – objects are destroyed once and only once. * Cloning or invoking a moved-from object results in `rtl::error::EmptyRObject`. ✅ Bottom Line From fe1159a5d40da4dccc03ed8cfba29bcfd5231e91 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 10:18:48 +0530 Subject: [PATCH 035/102] doc: Syntax-n-Semantics update. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 923e3cd9..bbde9fa8 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -24,7 +24,6 @@ This guide walks you step by step through RTL’s reflection syntax. ## Building the Mirror 🪞 Before querying or using reflection, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities. - The mirror is constructed using an initializer list of registration expressions, typically produced via `rtl::type()`. ```cpp @@ -55,27 +54,31 @@ Through the mirror, all registered types, functions, and methods can be queried, This ensures thread safety and prevents redundant metadata. While negligible for typical usage, the cost can accumulate if registrations are repeatedly performed in hot paths or tight loops. 👉 Bottom Line -> *Manage `rtl::CxxMirror` according to your design needs–singleton, multiple, or transient. Registration involves a lock and a lookup, but the cost is incurred only during initialization and remains negligible for normal usage.* +> *Manage `rtl::CxxMirror` according to your design needs– singleton, multiple, or transient. Registration involves a lock and a lookup, but the cost is incurred only during initialization and remains negligible for normal usage.* --- ## Getting Started with Registration 📝 -The fundamental pattern of registration in RTL is a **builder combination**. You chain together parts to declare what you are reflecting, and then call `.build()` to complete it. +Registration in RTL follows a builder-style composition pattern. Individual components are chained together to describe the reflected entity, and `.build()` finalizes the registration. ### Non-Member Functions ```cpp -rtl::type().ns("ext").function<..signature..>("func").build(ptr); +rtl::type().ns("ext").function("func").build(ptr); ``` -* **`ns("ext")`**: specifies the namespace under which the function lives. Omitting `.ns()` or passing an empty string `.ns("")` keeps the function in the global namespace. -* **`function<..signature..>("func")`**: declares the function by name. If overloaded, the template parameter `<..signature..>` disambiguates which overload to pick. -* **`.build(ptr)`**: supplies the actual function pointer to complete the registration. +* **`ns("ext")`** – Specifies the namespace under which the function is registered. + Omitting `.ns()` or passing an empty string (`.ns("")`) registers the function in the global namespace. + +* **`function("func")`** – Declares the function by name. + If multiple overloads exist, the template parameter (`function<...>("..")`) disambiguates the selected overload. + +* **`.build(ptr)`** – Supplies the function pointer and completes the registration. ### Handling Overloads -If multiple overloads exist, you must specify the signature in the template argument. Otherwise, the compiler cannot resolve which function pointer you mean. +If multiple overloads exist, the signature must be specified as a template argument. Otherwise, the compiler cannot resolve the intended function pointer. For example: @@ -94,9 +97,9 @@ rtl::type().ns("ext").function("sendMessage").build(ext::sendM rtl::type().ns("ext").record("Name").build(); ``` -* Registers a type by reflective name under a namespace. -* This step is **mandatory** to register any of its members. -* Default, copy, and move constructors, along with the destructor, are automatically registered. Explicit registration of these special members is disallowed and will result in a compile error. +* Registers a type by name and associates it with the specified namespace. +* This type `T` registration is **mandatory** for any of its members to be registered. The order of registration does not matter. +* The default, copy, and move constructors, along with the destructor, are registered automatically. Explicit registration of these special members is disallowed and will result in a compile-time error. ### Constructors From f19ded6efc55c170d0b1de3b9ca0aa6d4c109d8a Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 12:07:06 +0530 Subject: [PATCH 036/102] doc: registration syns-n-sems. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index bbde9fa8..d1363195 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -24,7 +24,7 @@ This guide walks you step by step through RTL’s reflection syntax. ## Building the Mirror 🪞 Before querying or using reflection, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities. -The mirror is constructed using an initializer list of registration expressions, typically produced via `rtl::type()`. +The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...` registration statements. ```cpp auto cxx_mirror = rtl::CxxMirror({ @@ -65,20 +65,20 @@ Registration in RTL follows a builder-style composition pattern. Individual comp ### Non-Member Functions ```cpp -rtl::type().ns("ext").function("func").build(ptr); +rtl::type().ns("ext").function("func-name").build(ptr); ``` -* **`ns("ext")`** – Specifies the namespace under which the function is registered. +* `ns("ext")` – Specifies the namespace under which the function is registered. Omitting `.ns()` or passing an empty string (`.ns("")`) registers the function in the global namespace. -* **`function("func")`** – Declares the function by name. - If multiple overloads exist, the template parameter (`function<...>("..")`) disambiguates the selected overload. +* `function("func")` – Declares the function by name. + If multiple overloads exist, the template parameter (`function<...>(..)`) disambiguates the selected overload. -* **`.build(ptr)`** – Supplies the function pointer and completes the registration. +* `.build(ptr)` – Supplies the function-pointer and completes the registration. ### Handling Overloads -If multiple overloads exist, the signature must be specified as a template argument. Otherwise, the compiler cannot resolve the intended function pointer. +If multiple overloads exist, the signature must be specified as a template argument. Otherwise, the compiler cannot resolve the intended function-pointer. For example: @@ -94,36 +94,36 @@ rtl::type().ns("ext").function("sendMessage").build(ext::sendM ### Classes / Structs ```cpp -rtl::type().ns("ext").record("Name").build(); +rtl::type().ns("ext").record("type-name").build(); ``` * Registers a type by name and associates it with the specified namespace. -* This type `T` registration is **mandatory** for any of its members to be registered. The order of registration does not matter. +* This type (`T`) registration is **mandatory** for any of its members to be registered. The order of registration does not matter. * The default, copy, and move constructors, along with the destructor, are registered automatically. Explicit registration of these special members is disallowed and will result in a compile-time error. ### Constructors ```cpp -rtl::type().member().constructor<..signature..>().build(); +rtl::type().member().constructor<...>().build(); ``` -* **`.member()`**: enters the scope of class/struct `T`. -* **`.constructor<..signature..>()`**: registers a user-defined constructor. The template parameter `<..signature..>` must be provided since no function pointer is available for deduction, and this also disambiguates overloads. +* `.member()`: enters the scope of class/struct `T`. +* `.constructor<...>()`: registers a user-defined constructor. The template parameter `<..signature..>` must be provided since no function-pointer is available for deduction, and this also disambiguates overloads. ### Member Functions ```cpp -rtl::type().member().method<..signature..>("method").build(&T::f); +rtl::type().member().method<...>("method-name").build(&T::f); ``` -* **`.member()`**: enters the scope of class/struct `T`. -* **`.method<..signature..>(...)`**: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. +* `.member()`: enters the scope of class/struct `T`. +* `.method<...>(..)`**: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. * Variants exist for const (`.methodConst`) and static (`.methodStatic`) methods. 👉 **Note:** -> ***The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.*** +> *The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.* -With these constructs–namespaces, non-member functions, overloads, records `(class/struct)`, constructors, and methods–you now have the full registration syntax for RTL. Together, they let you build a complete reflective model of your C++ code. +With these constructs – namespaces, non-member functions, overloads, records `(pod/class/struct)`, constructors, and methods – you now have the full registration syntax for RTL. Together, they allow you to build a complete reflective model of your C++ code. --- From c49572e1ee91247e0431db3e96b88a5d56f432e5 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 12:35:57 +0530 Subject: [PATCH 037/102] doc: syns-n-sems, queries. --- README.md | 2 -- docs/RTL_SYNTAX_AND_SEMANTICS.md | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index e491f8cd..3c5b8b2f 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,6 @@ struct cxx { static rtl::CxxMirror& mirror(); }; // The singleton interface. define and register everything in an isolated translation unit – ```c++ // MyReflection.cpp -#include // Reflection builder interface. - rtl::CxxMirror& cxx::mirror() { static auto cxx_mirror = rtl::CxxMirror({ // Inherently thread safe. // Register free(C-Style) function - diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index d1363195..bd465842 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -60,21 +60,21 @@ Through the mirror, all registered types, functions, and methods can be queried, ## Getting Started with Registration 📝 -Registration in RTL follows a builder-style composition pattern. Individual components are chained together to describe the reflected entity, and `.build()` finalizes the registration. +Registration in RTL follows a builder-style composition pattern. Individual components are chained together to describe the reflected entity, and `.build()` finalizes the registration. The builder interface is exposed via the `rtl_builder.h` header. ### Non-Member Functions ```cpp -rtl::type().ns("ext").function("func-name").build(ptr); +rtl::type().ns("ext").function("fn-name").build(functor); ``` * `ns("ext")` – Specifies the namespace under which the function is registered. Omitting `.ns()` or passing an empty string (`.ns("")`) registers the function in the global namespace. -* `function("func")` – Declares the function by name. +* `function("fn-name")` – Declares the function by name. If multiple overloads exist, the template parameter (`function<...>(..)`) disambiguates the selected overload. -* `.build(ptr)` – Supplies the function-pointer and completes the registration. +* `.build(functor)` – Supplies the function-pointer and completes the registration. ### Handling Overloads @@ -83,9 +83,10 @@ If multiple overloads exist, the signature must be specified as a template argum For example: ```cpp - -bool sendMessage(const char*); -void sendMessage(int, std::string); +namespace ext { + bool sendMessage(const char*); + void sendMessage(int, std::string); +} rtl::type().ns("ext").function("sendMessage").build(ext::sendMessage); rtl::type().ns("ext").function("sendMessage").build(ext::sendMessage); @@ -107,7 +108,7 @@ rtl::type().ns("ext").record("type-name").build(); rtl::type().member().constructor<...>().build(); ``` -* `.member()`: enters the scope of class/struct `T`. +* `.member()`: enters the scope of `T` (pod/class/struct). * `.constructor<...>()`: registers a user-defined constructor. The template parameter `<..signature..>` must be provided since no function-pointer is available for deduction, and this also disambiguates overloads. ### Member Functions @@ -129,8 +130,7 @@ With these constructs – namespaces, non-member functions, overloads, records ` ## Reflective Invocations with RTL ✨ -Discover how to query, invoke, and manipulate functions and objects at runtime using RTL’s powerful reflection API. -Once a function is registered in `rtl::CxxMirror`, you can query it and perform reflective calls dynamically. +Once a function is registered in `rtl::CxxMirror`, it can be queried and invoked through RTL’s access interface, which is exposed via the `rtl_access.h` header. @@ -144,9 +144,9 @@ std::optional popMessage = cxx::mirror().getFunction("popMessage" std::optional sendMessage = cxx::mirror().getFunction("utils", "sendMessage"); ``` -* If a function is registered **without a namespace**, it can only be retrieved without specifying a namespace. -* If a function is registered **with a namespace**, it **must** be queried with the correct namespace. -* The returned value is an `std::optional`. If the function is not found, the optional is empty. +* If a function is registered without a namespace, it must be queried without specifying a namespace. +* If a function is registered with a namespace, it must be queried using the same namespace. +* The return type is `std::optional`. If the function is not found, the optional is empty. ```cpp if (popMessage) From beb464675dfbdc8d9dd88ebd3033c28654c7e5be Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 13:03:31 +0530 Subject: [PATCH 038/102] doc: syns-n-sems, callables. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index bd465842..47b97dc3 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -92,7 +92,7 @@ rtl::type().ns("ext").function("sendMessage").build(ext::sendMessag rtl::type().ns("ext").function("sendMessage").build(ext::sendMessage); ``` -### Classes / Structs +### PODs / Classes / Structs ```cpp rtl::type().ns("ext").record("type-name").build(); @@ -160,10 +160,17 @@ if (popMessage) ### Performing Reflective Calls ⚙️ -Once you have a `rtl::Function`, a complete reflective call involves two steps: +Once a reflected function or method has been queried, it must be materialized into a callable object before it can be invoked. -**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** +RTL does not expose reflected functions as directly callable objects. Instead, querying returns metadata descriptors (such as `rtl::Function` and `rtl::Method`) that must be explicitly materialized into typed callables by specifying the intended call signature. + +This design avoids a single, type-erased invocation path for all use cases. By requiring the user to declare the argument and return types they intend to use, RTL can validate the request and select an invocation path that is optimized for the available type information. + +When full type information is provided, materialized callables compile to **direct function-pointer calls** with near-zero overhead. When type erasure is required (for example, for the return-type or the method-target), invocation proceeds through a lightweight dispatch layer with performance **comparable to** `std::function`. +#### Materializing an `rtl::function` + +**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** ```cpp auto [err, retObj] = popMessage->bind().call(); ``` From 7e4587c0271a4b047ce12ab187fedefd17726fad Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 13:29:36 +0530 Subject: [PATCH 039/102] Update RTL_SYNTAX_AND_SEMANTICS.md --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 47b97dc3..ed74716e 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -37,7 +37,7 @@ Each registration expression contributes references to the underlying metadata o Through the mirror, all registered types, functions, and methods can be queried, inspected, and instantiated at runtime. The mirror serves as a single entry point for reflection operations without introducing centralized global state. -### Key Points on Managing `rtl::CxxMirror` +#### Managing `rtl::CxxMirror` * **Dispensable by design** – `rtl::CxxMirror` carries no hidden global state. You may define a single central mirror, create multiple mirrors in different scopes, or rebuild mirrors on demand. RTL imposes no restrictions on how its lifetime is managed. @@ -166,7 +166,10 @@ RTL does not expose reflected functions as directly callable objects. Instead, q This design avoids a single, type-erased invocation path for all use cases. By requiring the user to declare the argument and return types they intend to use, RTL can validate the request and select an invocation path that is optimized for the available type information. -When full type information is provided, materialized callables compile to **direct function-pointer calls** with near-zero overhead. When type erasure is required (for example, for the return-type or the method-target), invocation proceeds through a lightweight dispatch layer with performance **comparable to** `std::function`. +When full type information is provided, materialized callables compile to **direct function-pointer** calls with near-zero overhead. When type erasure is required (for example, for the return/target), invocation proceeds through a lightweight dispatch layer with performance **comparable** to `std::function`. + +⚖️ **The Idea:** +> *In RTL, materialization makes the performance–flexibility trade-off explicit at each call site.* #### Materializing an `rtl::function` From 88e4e492c548334fc97763c35dedb3a9e9c6477a Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 18:09:01 +0530 Subject: [PATCH 040/102] doc: syns-n-sems, metadata-query. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 44 ++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index ed74716e..cbb6bb9a 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -23,8 +23,8 @@ This guide walks you step by step through RTL’s reflection syntax. ## Building the Mirror 🪞 -Before querying or using reflection, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities. -The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...` registration statements. +To set up a runtime reflection system using RTL, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities and provide access to them at runtime. +The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...build()` registration statements. ```cpp auto cxx_mirror = rtl::CxxMirror({ @@ -128,37 +128,47 @@ With these constructs – namespaces, non-member functions, overloads, records ` --- -## Reflective Invocations with RTL ✨ +## Querying the metadata ✨ -Once a function is registered in `rtl::CxxMirror`, it can be queried and invoked through RTL’s access interface, which is exposed via the `rtl_access.h` header. - - - -### Querying C-Style Functions 🔍 +Once the Mirror is initialized with metadata references, it can be queried for registered entities and used to introspect types at runtime through RTL’s access interface, which is exposed via the `rtl_access.h` header. +`rtl::CxxMirror` provides lookup APIs that return reflection metadata objects. +Registered types (`class`, `struct`, or POD) are queried as `rtl::Record`, while non-member functions are queried as `rtl::Function`. +For example – ```cpp // Function without a namespace std::optional popMessage = cxx::mirror().getFunction("popMessage"); -// Function registered with a namespace +// Function registered with a namespace, e.g. "utils" std::optional sendMessage = cxx::mirror().getFunction("utils", "sendMessage"); ``` - * If a function is registered without a namespace, it must be queried without specifying a namespace. * If a function is registered with a namespace, it must be queried using the same namespace. -* The return type is `std::optional`. If the function is not found, the optional is empty. - +These metadata are returned wrapped in `std::optional<>`, which is empty if the requested entity is not found by the name specified. +All registered member functions of a type can be obtained from its corresponding `rtl::Record` as `rtl::Method` objects. ```cpp -if (popMessage) -{ - // function exists, safe to invoke -} +// Querying a type without a namespace +std::optional classPerson = cxx::mirror().getRecord("Person"); + +// Querying a type with a namespace, e.g. "model" +std::optional classPerson = cxx::mirror().getRecord("model", "Person"); ``` +`rtl::Record` represents any registered C++ type, including user-defined `class` and `struct` types, as well as POD types. +The term *Record* follows the naming convention used in the *LLVM* project (for example, `CXXRecordDecl`). + +`rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. +This ID can be generated using `rtl::traits::uid`, where `T` is a compile-time type. +The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. + +For POD types such as `char`, the type can still be registered as an `rtl::Record`. +In this case, only the implicitly supported special members (copy/move constructors and the destructor) are available. +POD types do not have member functions. + --- -### Performing Reflective Calls ⚙️ +### Reflective Invocations with RTL ⚙️ Once a reflected function or method has been queried, it must be materialized into a callable object before it can be invoked. From 59a07dc4c8670a05aeb87f67bbca189caf9b8263 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 18:12:22 +0530 Subject: [PATCH 041/102] doc: syns-n-sems, correction. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index cbb6bb9a..78026ff8 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -144,6 +144,7 @@ std::optional sendMessage = cxx::mirror().getFunction("utils", "s ``` * If a function is registered without a namespace, it must be queried without specifying a namespace. * If a function is registered with a namespace, it must be queried using the same namespace. + These metadata are returned wrapped in `std::optional<>`, which is empty if the requested entity is not found by the name specified. All registered member functions of a type can be obtained from its corresponding `rtl::Record` as `rtl::Method` objects. ```cpp From fe885d9607dfe304167eabb5228dc86a99ab3520 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 19:05:04 +0530 Subject: [PATCH 042/102] doc: syns-n-sems, materialize, intro. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 78026ff8..b33aeec3 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -155,7 +155,7 @@ std::optional classPerson = cxx::mirror().getRecord("Person"); std::optional classPerson = cxx::mirror().getRecord("model", "Person"); ``` `rtl::Record` represents any registered C++ type, including user-defined `class` and `struct` types, as well as POD types. -The term *Record* follows the naming convention used in the *LLVM* project (for example, `CXXRecordDecl`). +The term **Record** follows the naming convention used in the **LLVM** project (e.g. `CXXRecordDecl`). `rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. This ID can be generated using `rtl::traits::uid`, where `T` is a compile-time type. @@ -171,18 +171,18 @@ POD types do not have member functions. ### Reflective Invocations with RTL ⚙️ -Once a reflected function or method has been queried, it must be materialized into a callable object before it can be invoked. +`rtl::Method` and `rtl::Function` are metadata descriptors. Functions and methods cannot be directly invoked through these objects. Instead, RTL uses a materialization model to produce callable entities. -RTL does not expose reflected functions as directly callable objects. Instead, querying returns metadata descriptors (such as `rtl::Function` and `rtl::Method`) that must be explicitly materialized into typed callables by specifying the intended call signature. +Callables are materialized by explicitly specifying the argument and return types. This design avoids a single, fully type-erased invocation path for all use cases. By requiring the user to declare the intended call signature, RTL can validate the request and select an invocation path optimized for the available type information. -This design avoids a single, type-erased invocation path for all use cases. By requiring the user to declare the argument and return types they intend to use, RTL can validate the request and select an invocation path that is optimized for the available type information. - -When full type information is provided, materialized callables compile to **direct function-pointer** calls with near-zero overhead. When type erasure is required (for example, for the return/target), invocation proceeds through a lightweight dispatch layer with performance **comparable** to `std::function`. +When full type information is provided, materialized callables compile to **direct function-pointer** calls with near-zero overhead. When type erasure is required (for example, for an unknown return or target type), invocation proceeds through a lightweight dispatch layer with performance **comparable** to `std::function`. ⚖️ **The Idea:** > *In RTL, materialization makes the performance–flexibility trade-off explicit at each call site.* -#### Materializing an `rtl::function` +RTL provides the following callable entities, + +#### `rtl::constructor` **[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** ```cpp From 7105432ae1910bfcb72a1d5c180c1a5263146072 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 20:16:32 +0530 Subject: [PATCH 043/102] doc: syns-n-sems, ctors. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 51 ++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index b33aeec3..80c1ee01 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -21,7 +21,7 @@ This guide walks you step by step through RTL’s reflection syntax. --- -## Building the Mirror 🪞 +## Building the Mirror To set up a runtime reflection system using RTL, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities and provide access to them at runtime. The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...build()` registration statements. @@ -58,7 +58,7 @@ Through the mirror, all registered types, functions, and methods can be queried, --- -## Getting Started with Registration 📝 +## Getting Started with Registration Registration in RTL follows a builder-style composition pattern. Individual components are chained together to describe the reflected entity, and `.build()` finalizes the registration. The builder interface is exposed via the `rtl_builder.h` header. @@ -128,13 +128,13 @@ With these constructs – namespaces, non-member functions, overloads, records ` --- -## Querying the metadata ✨ +## Querying the Metadata Once the Mirror is initialized with metadata references, it can be queried for registered entities and used to introspect types at runtime through RTL’s access interface, which is exposed via the `rtl_access.h` header. `rtl::CxxMirror` provides lookup APIs that return reflection metadata objects. Registered types (`class`, `struct`, or POD) are queried as `rtl::Record`, while non-member functions are queried as `rtl::Function`. -For example – +For example: ```cpp // Function without a namespace std::optional popMessage = cxx::mirror().getFunction("popMessage"); @@ -167,9 +167,7 @@ POD types do not have member functions. --- - - -### Reflective Invocations with RTL ⚙️ +## Reflective Invocations with RTL️ `rtl::Method` and `rtl::Function` are metadata descriptors. Functions and methods cannot be directly invoked through these objects. Instead, RTL uses a materialization model to produce callable entities. @@ -180,24 +178,39 @@ When full type information is provided, materialized callables compile to **dire ⚖️ **The Idea:** > *In RTL, materialization makes the performance–flexibility trade-off explicit at each call site.* -RTL provides the following callable entities, +Every type-erased reflective call returns either `std::pair` or `std::pair>`. -#### `rtl::constructor` +* `rtl::error` indicates whether the call was successful (`rtl::error::None`) or if an error occurred. +* `rtl::RObject` or `std::optional` contains the return value if the function returns something, or is empty if the function returns `void`. -**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** -```cpp -auto [err, retObj] = popMessage->bind().call(); -``` +Fully type-specified callables do not return an error code (except constructors). Once materialized successfully, they are guaranteed to be safe to invoke. -* **`.bind<>()`**: Associates an object for member functions and allows explicit specification of the **signature** of the arguments to be forwarded. For non-member functions, you can simply call `.bind()` without arguments. -* **`.call(args...)`**: Executes the function with the provided arguments. +RTL provides the following callable entities: +### `rtl::constructor` -Every reflective call returns a `std::pair`: +Constructors can be materialized directly from an rtl::Record. +For example, an overloaded constructor can be materialized as follows: +```cpp +// classPerson is of type std::optional. +rtl::constructor personCtor = classPerson->ctorT(); +if (personCtor) { // Constructor successfully materialized + auto [err, person] = personCtor(rtl::alloc::Stack, "Waldo", 42); // Safe to call. +} +``` +If no constructor is registered with the specified signature, the callable is not initialized. Calling it without validation does not throw an exception; instead, it returns `rtl::error::SignatureMismatch` in the `err` variable. -* `rtl::error` indicates whether the call was successful (`rtl::error::None`) or if an error occurred. +A default constructor can be materialized as follows: +```cpp +rtl::constructor<> personCtor = classPerson->ctorT(); +// No validation required +auto [err, person] = personCtor(rtl::alloc::Stack, "Waldo", 42); // Safe to call. +``` +The default constructor for a type `T` is implicitly registered when the type is registered using `rtl::type().record()`. It is guaranteed to be materializable and safe to call. If the default constructor is not publicly accessible or is deleted, +`rtl::error::TypeNotDefaultConstructible` is returned in the `err` variable. +The constructed object is returned as an rtl::RObject, which type-erases the underlying object. - * `rtl::error::SignatureMismatch` → provided arguments/signature don’t match with expected signature or any overload. -* `rtl::RObject` contains the return value if the function returns something, or is empty if the function returns `void`. +* Heap-allocated objects are managed using std::unique_ptr. +* Stack-allocated objects are stored directly in std::any. --- From b6f8a9b1cd144e5dc81272786e517788a88bf020 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 20:23:13 +0530 Subject: [PATCH 044/102] doc: syns-n-sems, corrections. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 80c1ee01..1812a8e2 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -183,12 +183,11 @@ Every type-erased reflective call returns either `std::pair. @@ -203,11 +202,12 @@ A default constructor can be materialized as follows: ```cpp rtl::constructor<> personCtor = classPerson->ctorT(); // No validation required -auto [err, person] = personCtor(rtl::alloc::Stack, "Waldo", 42); // Safe to call. +auto [err, person] = personCtor(rtl::alloc::Heap, "Waldo", 42); // Safe to call. ``` The default constructor for a type `T` is implicitly registered when the type is registered using `rtl::type().record()`. It is guaranteed to be materializable and safe to call. If the default constructor is not publicly accessible or is deleted, `rtl::error::TypeNotDefaultConstructible` is returned in the `err` variable. -The constructed object is returned as an rtl::RObject, which type-erases the underlying object. + +Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Heap` as the first parameter. The constructed object is returned as an rtl::RObject, which type-erases the underlying object. * Heap-allocated objects are managed using std::unique_ptr. * Stack-allocated objects are stored directly in std::any. From 297f7a8e16be99748ff738bae0916defb9bc8f92 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 20:25:45 +0530 Subject: [PATCH 045/102] doc: syns-n-sems, spacing. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 1812a8e2..63134632 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -135,6 +135,7 @@ Once the Mirror is initialized with metadata references, it can be queried for r `rtl::CxxMirror` provides lookup APIs that return reflection metadata objects. Registered types (`class`, `struct`, or POD) are queried as `rtl::Record`, while non-member functions are queried as `rtl::Function`. For example: + ```cpp // Function without a namespace std::optional popMessage = cxx::mirror().getFunction("popMessage"); @@ -142,11 +143,13 @@ std::optional popMessage = cxx::mirror().getFunction("popMessage" // Function registered with a namespace, e.g. "utils" std::optional sendMessage = cxx::mirror().getFunction("utils", "sendMessage"); ``` + * If a function is registered without a namespace, it must be queried without specifying a namespace. * If a function is registered with a namespace, it must be queried using the same namespace. These metadata are returned wrapped in `std::optional<>`, which is empty if the requested entity is not found by the name specified. All registered member functions of a type can be obtained from its corresponding `rtl::Record` as `rtl::Method` objects. + ```cpp // Querying a type without a namespace std::optional classPerson = cxx::mirror().getRecord("Person"); @@ -154,6 +157,7 @@ std::optional classPerson = cxx::mirror().getRecord("Person"); // Querying a type with a namespace, e.g. "model" std::optional classPerson = cxx::mirror().getRecord("model", "Person"); ``` + `rtl::Record` represents any registered C++ type, including user-defined `class` and `struct` types, as well as POD types. The term **Record** follows the naming convention used in the **LLVM** project (e.g. `CXXRecordDecl`). @@ -189,6 +193,7 @@ Fully type-specified callables do not return an error code (except constructors) Constructors can be materialized directly from an `rtl::Record`. For example, an overloaded constructor can be materialized as follows: + ```cpp // classPerson is of type std::optional. rtl::constructor personCtor = classPerson->ctorT(); @@ -196,14 +201,17 @@ if (personCtor) { // Constructor successfully materialized auto [err, person] = personCtor(rtl::alloc::Stack, "Waldo", 42); // Safe to call. } ``` + If no constructor is registered with the specified signature, the callable is not initialized. Calling it without validation does not throw an exception; instead, it returns `rtl::error::SignatureMismatch` in the `err` variable. A default constructor can be materialized as follows: + ```cpp rtl::constructor<> personCtor = classPerson->ctorT(); // No validation required auto [err, person] = personCtor(rtl::alloc::Heap, "Waldo", 42); // Safe to call. ``` + The default constructor for a type `T` is implicitly registered when the type is registered using `rtl::type().record()`. It is guaranteed to be materializable and safe to call. If the default constructor is not publicly accessible or is deleted, `rtl::error::TypeNotDefaultConstructible` is returned in the `err` variable. From 0bcc50ea7271383d37603e16ff30c29d24cfb274 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Wed, 21 Jan 2026 22:31:09 +0530 Subject: [PATCH 046/102] Readme update. --- README.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 3c5b8b2f..d5f6f299 100644 --- a/README.md +++ b/README.md @@ -86,11 +86,10 @@ Lookup the `Person` class by its registered name – std::optional classPerson = cxx::mirror().getRecord("Person"); if (!classPerson) { /* Class not registered. */ } ``` -`rtl::CxxMirror` provides two lookup APIs that return reflection metadata objects: `rtl::Record` for any registered type (class, struct or pod) and `rtl::Function` for non-member functions. +`rtl::CxxMirror` returns two reflection metadata objects: `rtl::Record` for any registered type (class, struct, or POD) and `rtl::Function` for non-member functions. -From `rtl::Record`, registered member functions can be obtained as `rtl::Method`. These are metadata descriptors (not callables) and are returned as `std::optional`, which will be empty if the requested entity is not found. +From `rtl::Record`, registered member functions can be obtained as `rtl::Method`. These are metadata descriptors (not callables). Callable entities are materialized by explicitly providing the argument types we intend to pass. -Callables are materialized by explicitly providing the argument types we intend to pass. If the signature is valid, the resulting callable can be invoked safely. For example, the overloaded constructor `Person(std::string, int)` – ```c++ rtl::constructor personCtor = classPerson->ctorT(); @@ -105,8 +104,7 @@ Instances can be created on the `Heap` or `Stack` with automatic lifetime manage auto [err, robj] = personCtor(rtl::alloc::Stack, "John", 42); if (err != rtl::error::None) { std::cerr << rtl::to_string(err); } // Construction failed. ``` -The constructed object is returned wrapped in `rtl::RObject`, which hides the concrete type of the underlying object. Heap-allocated objects are internally managed via `std::unique_ptr`, while stack-allocated objects are stored directly in `std::any`. - +The constructed object is returned wrapped in `rtl::RObject`. Now, Lookup a member-function by name – ```c++ std::optional oGetName = classPerson->getMethod("getName"); @@ -124,7 +122,7 @@ else { std::string nameStr = getName(person)(); // Returns string 'Alex'. } ``` -The above `getName` invocation is effectively a native function-pointer hop, since all types are known at compile time. +The above `getName` invocation is effectively a **native function-pointer hop**, since all types are known at compile time. If the concrete type `Person` is not accessible at the call site, its member functions can still be invoked by erasing the target type and using `rtl::RObject` instead. The previously constructed instance (`robj`) is passed as the target – ```c++ @@ -164,10 +162,6 @@ RTL provides the following callable entities, designed to be as lightweight and `rtl::static_method<>` – Static member functions -These callable types are regular value types: they can be copied, moved, stored in standard containers, and passed around like any other lightweight object. - -When invoked, only type-erased callables return an `rtl::error`, with results provided as `rtl::RObject` *(when both the return and target types are erased)* or as `std::optional` *(when only the target type is erased)*, while fully type-aware callables return `T` directly with no error (by design). - ### How to Build (Windows / Linux) ```sh mkdir build && cd build From 2f75a2a143999652ee45d0372183c4a848e703de Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 22:42:29 +0530 Subject: [PATCH 047/102] Update README.md --- README.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index d5f6f299..aaa5321c 100644 --- a/README.md +++ b/README.md @@ -75,13 +75,11 @@ rtl::CxxMirror& cxx::mirror() { return cxx_mirror; } ``` -`cxx_mirror` is an immutable, value-type object that allows only explicit copy construction. It does not own reflection metadata. - ### RTL in action: **[Explore the demo code](https://github.com/ReflectCxx/RTL-Demo)** -Lookup the `Person` class by its registered name – +Lookup the `Person` class by its registered name: ```c++ std::optional classPerson = cxx::mirror().getRecord("Person"); if (!classPerson) { /* Class not registered. */ } @@ -90,27 +88,27 @@ if (!classPerson) { /* Class not registered. */ } From `rtl::Record`, registered member functions can be obtained as `rtl::Method`. These are metadata descriptors (not callables). Callable entities are materialized by explicitly providing the argument types we intend to pass. -For example, the overloaded constructor `Person(std::string, int)` – +For example, the overloaded constructor `Person(std::string, int)`: ```c++ rtl::constructor personCtor = classPerson->ctorT(); if (!personCtor) { /* Constructor with expected signature not found. */ } ``` -Or the default constructor – +Or the default constructor: ```c++ rtl::constructor<> personCtor = classPerson->ctorT<>(); ``` -Instances can be created on the `Heap` or `Stack` with automatic lifetime management – +Instances can be created on the `Heap` or `Stack` with automatic lifetime management: ```c++ auto [err, robj] = personCtor(rtl::alloc::Stack, "John", 42); if (err != rtl::error::None) { std::cerr << rtl::to_string(err); } // Construction failed. ``` The constructed object is returned wrapped in `rtl::RObject`. -Now, Lookup a member-function by name – +Now, Lookup a member-function by name: ```c++ std::optional oGetName = classPerson->getMethod("getName"); if (!oGetName) { /* Member function not registered */ } ``` -And materialize a complete type-aware caller – +And materialize a complete type-aware caller: ```c++ rtl::method getName = oGetName->targetT().argsT() .returnT(); @@ -124,7 +122,7 @@ else { ``` The above `getName` invocation is effectively a **native function-pointer hop**, since all types are known at compile time. -If the concrete type `Person` is not accessible at the call site, its member functions can still be invoked by erasing the target type and using `rtl::RObject` instead. The previously constructed instance (`robj`) is passed as the target – +If the concrete type `Person` is not accessible at the call site, its member functions can still be invoked by erasing the target type and using `rtl::RObject` instead. The previously constructed instance (`robj`) is passed as the target: ```c++ rtl::method getName = oGetName->targetT().argsT() .returnT(); @@ -133,7 +131,7 @@ if (err == rtl::error::None && ret.has_value()) { std::string nameStr = ret.value(); } ``` -If the return type is also not known at compile time,`rtl::Return` can be used – +If the return type is also not known at compile time,`rtl::Return` can be used: ```c++ rtl::method getName = oGetName->targetT().argsT().returnT(); @@ -150,7 +148,7 @@ if (err == rtl::error::None && ret.canViewAs()) { At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. -RTL provides the following callable entities, designed to be as lightweight and performant as `std::function` (and in many micro-benchmarks, faster when fully type-aware): +RTL provides the following callable entities, designed to be as lightweight and performant as `std::function`: `rtl::function<>` – Free (non-member) functions From af520d338c31a11d5985153006afd7abff12c79e Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 22:44:58 +0530 Subject: [PATCH 048/102] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index aaa5321c..5f81c88e 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ RTL provides type-safe run-time reflection for C++, combining compile-time guarantees with run-time flexibility. -It enables name-based discovery and invocation of functions, constructors, and object members through a non-intrusive, type-safe reflection system that follows modern C++ idioms. For example, consider the following function – +It enables name-based discovery and invocation of functions, constructors, and object members through a non-intrusive, type-safe reflection system that follows modern C++ idioms. For example, consider the following function: ```c++ std::string complexToStr(float real, float img); ``` -Using RTL, you can discover this function by name and call it dynamically – +Using RTL, you can discover this function by name and call it dynamically: ```c++ rtl::function cToStr = cxx::mirror().getFunction("complexToStr") ->argsT() @@ -48,17 +48,17 @@ RTL’s reflective calls are comparable to `std::function`, and achieve lower ov ## A Quick Preview: Reflection That Looks and Feels Like C++ -First, create an instance of `rtl::CxxMirror` – +First, create an instance of `rtl::CxxMirror`: ```c++ auto cxx_mirror = rtl::CxxMirror({ /* ...register all types here... */ }); ``` -The `cxx_mirror` object provides access to the runtime reflection system. It references metadata for all registered entities and supports name-based lookup. The object may reside in any translation unit. To make it globally accessible while ensuring lazy initialization, a singleton access interface can be used – +The `cxx_mirror` object provides access to the runtime reflection system. It references metadata for all registered entities and supports name-based lookup. The object may reside in any translation unit. To make it globally accessible while ensuring lazy initialization, a singleton access interface can be used: ```c++ // MyReflection.h namespace rtl { class CxxMirror; } // Forward declaration, no includes here! struct cxx { static rtl::CxxMirror& mirror(); }; // The singleton interface. ``` -define and register everything in an isolated translation unit – +define and register everything in an isolated translation unit: ```c++ // MyReflection.cpp rtl::CxxMirror& cxx::mirror() { From 573a74fea3f622619c6265e2028c233146551995 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 22:57:33 +0530 Subject: [PATCH 049/102] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f81c88e..85c0e713 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ rtl::CxxMirror& cxx::mirror() { ``` ### RTL in action: -**[Explore the demo code](https://github.com/ReflectCxx/RTL-Demo)** +**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** Lookup the `Person` class by its registered name: ```c++ From e55d2bc2c0ca00bbe9fb4aff92444e41ba7cc827 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 23:23:44 +0530 Subject: [PATCH 050/102] Update RTL_SYNTAX_AND_SEMANTICS.md --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 63134632..ea72a58c 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -144,11 +144,7 @@ std::optional popMessage = cxx::mirror().getFunction("popMessage" std::optional sendMessage = cxx::mirror().getFunction("utils", "sendMessage"); ``` -* If a function is registered without a namespace, it must be queried without specifying a namespace. -* If a function is registered with a namespace, it must be queried using the same namespace. - These metadata are returned wrapped in `std::optional<>`, which is empty if the requested entity is not found by the name specified. -All registered member functions of a type can be obtained from its corresponding `rtl::Record` as `rtl::Method` objects. ```cpp // Querying a type without a namespace @@ -158,17 +154,21 @@ std::optional classPerson = cxx::mirror().getRecord("Person"); std::optional classPerson = cxx::mirror().getRecord("model", "Person"); ``` +* If a type or function is registered without a namespace, it must be queried without specifying a namespace. +* If a type or function is registered with a namespace, it must be queried using the same namespace. + `rtl::Record` represents any registered C++ type, including user-defined `class` and `struct` types, as well as POD types. The term **Record** follows the naming convention used in the **LLVM** project (e.g. `CXXRecordDecl`). -`rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. -This ID can be generated using `rtl::traits::uid`, where `T` is a compile-time type. -The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. - +All registered member functions of a type can be obtained from its corresponding `rtl::Record` as `rtl::Method` objects. For POD types such as `char`, the type can still be registered as an `rtl::Record`. In this case, only the implicitly supported special members (copy/move constructors and the destructor) are available. POD types do not have member functions. +`rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. +This ID can be generated using `rtl::traits::uid`, where `T` is a compile-time type. +The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. + --- ## Reflective Invocations with RTL️ From c6f7f9219c08362fc1bc71dc9794caf3d2d9f41c Mon Sep 17 00:00:00 2001 From: Neeraj Date: Wed, 21 Jan 2026 23:36:41 +0530 Subject: [PATCH 051/102] Update RTL_SYNTAX_AND_SEMANTICS.md --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index ea72a58c..118e5a68 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -215,10 +215,10 @@ auto [err, person] = personCtor(rtl::alloc::Heap, "Waldo", 42); // Safe to call. The default constructor for a type `T` is implicitly registered when the type is registered using `rtl::type().record()`. It is guaranteed to be materializable and safe to call. If the default constructor is not publicly accessible or is deleted, `rtl::error::TypeNotDefaultConstructible` is returned in the `err` variable. -Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Heap` as the first parameter. The constructed object is returned as an rtl::RObject, which type-erases the underlying object. +Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Heap` as the first parameter. The constructed object is returned as an `rtl::RObject`, which type-erases the underlying object. -* Heap-allocated objects are managed using std::unique_ptr. -* Stack-allocated objects are stored directly in std::any. +* `Heap` allocated objects are managed using `std::unique_ptr`. +* `Stack` allocated objects are stored directly in `std::any`. --- From fc78b265aa175080d3db0fbb8de27df128517456 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 09:02:21 +0530 Subject: [PATCH 052/102] Readme update. --- README.md | 6 ++++-- docs/RTL_SYNTAX_AND_SEMANTICS.md | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 85c0e713..ea5e37e8 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,9 @@ From `rtl::Record`, registered member functions can be obtained as `rtl::Method` For example, the overloaded constructor `Person(std::string, int)`: ```c++ rtl::constructor personCtor = classPerson->ctorT(); -if (!personCtor) { /* Constructor with expected signature not found. */ } +if (!personCtor) { // Constructor with expected signature not found. + std::cerr << rtl::to_string(personCtor.get_init_err()); +} ``` Or the default constructor: ```c++ @@ -112,7 +114,7 @@ And materialize a complete type-aware caller: ```c++ rtl::method getName = oGetName->targetT().argsT() .returnT(); -if (!getName) { +if (!getName) { // Member function with expected signature not found. std::cerr << rtl::to_string(getName.get_init_err()); } else { diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 118e5a68..9e6e3fd2 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -189,7 +189,7 @@ Every type-erased reflective call returns either `std::pair` Constructors can be materialized directly from an `rtl::Record`. For example, an overloaded constructor can be materialized as follows: @@ -220,11 +220,11 @@ Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Hea * `Heap` allocated objects are managed using `std::unique_ptr`. * `Stack` allocated objects are stored directly in `std::any`. ---- +### `rtl::function<>` - +--- -### Extracting Return Values 📤 +### Extracting Return Values ```cpp if (err == rtl::error::None) From 0ae88867a95677f74c111bb9b817cb8342ee285e Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 09:28:16 +0530 Subject: [PATCH 053/102] Readme update. --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index ea5e37e8..6ca11b4b 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,6 @@ From `rtl::Record`, registered member functions can be obtained as `rtl::Method` For example, the overloaded constructor `Person(std::string, int)`: ```c++ rtl::constructor personCtor = classPerson->ctorT(); -if (!personCtor) { // Constructor with expected signature not found. - std::cerr << rtl::to_string(personCtor.get_init_err()); -} ``` Or the default constructor: ```c++ From f2ab77be604a48943d338d3b5605bc75e151015b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 10:08:54 +0530 Subject: [PATCH 054/102] Readme update. --- README.md | 5 +++-- docs/benchmark_summary.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6ca11b4b..e57bd87b 100644 --- a/README.md +++ b/README.md @@ -101,8 +101,9 @@ Instances can be created on the `Heap` or `Stack` with automatic lifetime manage auto [err, robj] = personCtor(rtl::alloc::Stack, "John", 42); if (err != rtl::error::None) { std::cerr << rtl::to_string(err); } // Construction failed. ``` -The constructed object is returned wrapped in `rtl::RObject`. -Now, Lookup a member-function by name: +The constructed object is returned as an `rtl::RObject` in the variable `robj`. + +Looking up a member function by name: ```c++ std::optional oGetName = classPerson->getMethod("getName"); if (!oGetName) { /* Member function not registered */ } diff --git a/docs/benchmark_summary.md b/docs/benchmark_summary.md index 279e1847..a74cda08 100644 --- a/docs/benchmark_summary.md +++ b/docs/benchmark_summary.md @@ -2,7 +2,7 @@ This document provides a concise, evidence-backed overview of the runtime performance characteristics of **RTL**, derived from systematic microbenchmarking across multiple workload scales, CPU frequencies, and typical real-world C++ usage patterns. -## 🧪 Benchmark Overview +## Benchmark Overview The benchmark measures the cost of calling functions that perform simple but realistic `string` work. Two variants are evaluated using the types `std::string_view` and `std::string`. From d246951316ed24d1634e95a49837de4d8b947f3b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 11:06:58 +0530 Subject: [PATCH 055/102] doc corrections. --- README.md | 2 +- docs/DESIGN_PRINCIPLES_AND_FEATURES.md | 10 +++++----- docs/RTL_SYNTAX_AND_SEMANTICS.md | 25 +++++++++++++------------ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index e57bd87b..4fc56507 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ if (err == rtl::error::None && ret.canViewAs()) { [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md)   -[![Design Features](https://img.shields.io/badge/Doc-Design%20Features-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +[![Design Traits](https://img.shields.io/badge/Doc-Design%20Features-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. diff --git a/docs/DESIGN_PRINCIPLES_AND_FEATURES.md b/docs/DESIGN_PRINCIPLES_AND_FEATURES.md index bdfa19a6..436eac68 100644 --- a/docs/DESIGN_PRINCIPLES_AND_FEATURES.md +++ b/docs/DESIGN_PRINCIPLES_AND_FEATURES.md @@ -39,18 +39,18 @@ The lifetime of registered metadata is independent of any individual `rtl::CxxMi ### ⚡ Reflective Call Materialization and Performance -RTL employs a two-phase invocation model. Metadata queries return lightweight descriptors such as `rtl::Function` and `rtl::Method`, which must be explicitly **materialized** into callable objects by specifying the expected signature. +RTL employs a two-phase invocation model. Metadata queries return lightweight descriptors such as `rtl::Function` and `rtl::Method`, which must be explicitly **materialized** into callable entity by specifying the expected signature. This deferred materialization acts as a compile-time contract: the user declares the argument and return types they intend to use, and RTL validates and prepares an optimized invocation path accordingly. Performance depends on how much type information is provided: -* **Fully specified signatures** compile to direct function-pointer calls, faster than `std::function`. -* **Type-erased signatures** invoke through a lightweight dispatch layer whose performance is comparable to `std::function` under real workloads. +* Fully specified signatures compile to **direct function-pointer calls**, faster than `std::function`. +* Type-erased signatures invoke through a lightweight dispatch layer whose performance **is comparable** to `std::function` under real workloads. -By requiring explicit materialization, RTL produces lightweight, reusable callables that behave like ordinary value-type objects and can be stored in standard containers. +By requiring explicit materialization, RTL produces lightweight, reusable callable entity that behave like ordinary value-type objects and can be stored in standard containers. -At call time, RTL performs no dynamic allocations, no RTTI lookups, and no hidden metadata traversals. The runtime cost is explicit, minimal, and comparable to what a developer would implement manually for equivalent type safety and flexibility. +At call time, RTL performs no dynamic allocations, no RTTI lookups, no `void*` stuff, and no hidden metadata traversals. The runtime cost is explicit, minimal, and comparable to what a developer would implement manually for equivalent type safety and flexibility. --- diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 9e6e3fd2..274fea09 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -1,4 +1,4 @@ -# RTL at a Glance: Syntax & Semantics ⚡ +# RTL: Syntax & Semantics ⚡ RTL makes C++ reflection feel like a natural extension of the language. Let’s explore its syntax and the semantics it unlocks. This guide walks you step by step through RTL’s reflection syntax. @@ -24,7 +24,7 @@ This guide walks you step by step through RTL’s reflection syntax. ## Building the Mirror To set up a runtime reflection system using RTL, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities and provide access to them at runtime. -The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...build()` registration statements. +The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...build();` registration expressions. ```cpp auto cxx_mirror = rtl::CxxMirror({ @@ -65,7 +65,7 @@ Registration in RTL follows a builder-style composition pattern. Individual comp ### Non-Member Functions ```cpp -rtl::type().ns("ext").function("fn-name").build(functor); +rtl::type().ns("ext").function("fn-name").build(fn-ptr); ``` * `ns("ext")` – Specifies the namespace under which the function is registered. @@ -74,7 +74,7 @@ rtl::type().ns("ext").function("fn-name").build(functor); * `function("fn-name")` – Declares the function by name. If multiple overloads exist, the template parameter (`function<...>(..)`) disambiguates the selected overload. -* `.build(functor)` – Supplies the function-pointer and completes the registration. +* `.build(fn-ptr)` – Supplies the function-pointer and completes the registration. ### Handling Overloads @@ -108,8 +108,8 @@ rtl::type().ns("ext").record("type-name").build(); rtl::type().member().constructor<...>().build(); ``` -* `.member()`: enters the scope of `T` (pod/class/struct). -* `.constructor<...>()`: registers a user-defined constructor. The template parameter `<..signature..>` must be provided since no function-pointer is available for deduction, and this also disambiguates overloads. +* `.member()`: enters the scope of `T` (POD/class/struct). +* `.constructor<...>()`: registers a user-defined constructor. The template parameter `<..signature..>` must be provided since no function-pointer is available for type deduction, and this also disambiguates overloads. ### Member Functions @@ -117,8 +117,7 @@ rtl::type().member().constructor<...>().build(); rtl::type().member().method<...>("method-name").build(&T::f); ``` -* `.member()`: enters the scope of class/struct `T`. -* `.method<...>(..)`**: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. +* `.method<...>(..)`: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. * Variants exist for const (`.methodConst`) and static (`.methodStatic`) methods. 👉 **Note:** @@ -166,16 +165,16 @@ In this case, only the implicitly supported special members (copy/move construct POD types do not have member functions. `rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. -This ID can be generated using `rtl::traits::uid`, where `T` is a compile-time type. +This ID can be generated using `rtl::traits::uid`, where `T` is a compile time known type. The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. --- ## Reflective Invocations with RTL️ -`rtl::Method` and `rtl::Function` are metadata descriptors. Functions and methods cannot be directly invoked through these objects. Instead, RTL uses a materialization model to produce callable entities. +`rtl::Method` and `rtl::Function` are metadata descriptors. Functions and methods cannot be directly called through these objects. Instead, RTL uses a materialization model to produce callable entities. -Callables are materialized by explicitly specifying the argument and return types. This design avoids a single, fully type-erased invocation path for all use cases. By requiring the user to declare the intended call signature, RTL can validate the request and select an invocation path optimized for the available type information. +Callable entities are materialized by explicitly specifying the argument and return types. This design avoids a single, fully type-erased invocation path for all use cases. By requiring the user to declare the intended call signature, RTL can validate the request and select an invocation path optimized for the available type information. When full type information is provided, materialized callables compile to **direct function-pointer** calls with near-zero overhead. When type erasure is required (for example, for an unknown return or target type), invocation proceeds through a lightweight dispatch layer with performance **comparable** to `std::function`. @@ -187,7 +186,9 @@ Every type-erased reflective call returns either `std::pair` From 3bfb71ad2dbedada19b4a32792d8caa77a89d3a3 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Thu, 22 Jan 2026 11:09:17 +0530 Subject: [PATCH 056/102] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4fc56507..80692554 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ if (err == rtl::error::None && ret.canViewAs()) { [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md)   -[![Design Traits](https://img.shields.io/badge/Doc-Design%20Features-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. From ac81d38b9989c82db347a8574ce78e9bd0d6ebba Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 12:12:48 +0530 Subject: [PATCH 057/102] doc: syns-n-sems, rtl::function. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 54 +++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 274fea09..a415a75a 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -221,7 +221,59 @@ Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Hea * `Heap` allocated objects are managed using `std::unique_ptr`. * `Stack` allocated objects are stored directly in `std::any`. -### `rtl::function<>` +### Type-Aware `rtl::function<>` + +Non-member functions can be materialized directly from an `rtl::Function`: + +```c++ +rtl::function cToStr = cxx::mirror().getFunction("complexToStr") + ->argsT() + .returnT(); +if(cToStr) { // Function successfully materialized + std::string result = cToStr(61, 35); +} +else { + std::cerr << rtl::to_string(cToStr.get_init_err()); +} +``` + +Here, the return type and argument types are fully specified at compile time. +This allows RTL to resolve the function pointer by signature and provide it wrapped in a thin callable layer that effectively reduces to a single function-pointer hop at runtime. The overhead is comparable to a native C-style function pointer call. + +The materialized callable must be validated before invocation. Calling an unvalidated callable may result in undefined behavior. + +If materialization fails, the error can be retrieved using `get_init_err()`. +Possible error values include: + +* `rtl::error::InvalidCaller` +* `rtl::error::SignatureMismatch` +* `rtl::error::ReturnTypeMismatch` + +### Return-Erased `rtl::function<>` + +If the return type is not known at compile time, `rtl::Return` can be used as the return type. +In this case, the `.returnT()` template parameter can be omitted, and `rtl::Return` will be selected automatically. + +```c++ +rtl::function cToStr = cxx::mirror().getFunction("complexToStr") + ->argsT() + .returnT(); +auto [err, robj] = cToStr(61, 35); +if(err != rtl::error::None) { + // Call succeeded, returned std::string inside 'robj' (type: rtl::RObject) +} +else { + std::cerr << rtl::to_string(err); +} +``` + +Validation of the materialized callable is optional in this case. Calling an unvalidated callable does not result in undefined behavior; instead, an appropriate `rtl::error` is returned. If the callable was not successfully materialized, invoking it returns the same error as `get_init_err()` on the callable, typically `rtl::error::SignatureMismatch`. + +If materialization succeeds but the call fails, possible error values include: + +* `rtl::error::InvalidCaller` +* `rtl::error::RefBindingMismatch` +* `rtl::error::ExplicitRefBindingRequired` --- From b905fd571b4e4a3e7f3c8a0cbdf8a7127e7a4b8b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 12:47:33 +0530 Subject: [PATCH 058/102] doc: syns-n-sems, rtl::method. --- README.md | 10 +++---- docs/RTL_SYNTAX_AND_SEMANTICS.md | 50 +++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 80692554..4d03d6c5 100644 --- a/README.md +++ b/README.md @@ -150,15 +150,15 @@ At a high level, every registered C++ type is encapsulated as an `rtl::Record`. RTL provides the following callable entities, designed to be as lightweight and performant as `std::function`: -`rtl::function<>` – Free (non-member) functions +`rtl::function` – Free (non-member) functions -`rtl::constructor<>` – Constructors +`rtl::constructor` – Constructors -`rtl::method<>` – Non-const member functions +`rtl::method` – Non-const member functions -`rtl::const_method<>` – Const-qualified member functions +`rtl::const_method` – Const-qualified member functions -`rtl::static_method<>` – Static member functions +`rtl::static_method` – Static member functions ### How to Build (Windows / Linux) ```sh diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index a415a75a..0b623fe5 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -190,7 +190,7 @@ Fully type-specified callables do not return an error code (except constructors) RTL provides the following callable entities: -### `rtl::constructor<>` +### `rtl::constructor` Constructors can be materialized directly from an `rtl::Record`. For example, an overloaded constructor can be materialized as follows: @@ -221,9 +221,9 @@ Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Hea * `Heap` allocated objects are managed using `std::unique_ptr`. * `Stack` allocated objects are stored directly in `std::any`. -### Type-Aware `rtl::function<>` +### `rtl::function` – Type Aware. -Non-member functions can be materialized directly from an `rtl::Function`: +Non-member functions can be materialized from an `rtl::Function`: ```c++ rtl::function cToStr = cxx::mirror().getFunction("complexToStr") @@ -240,8 +240,7 @@ else { Here, the return type and argument types are fully specified at compile time. This allows RTL to resolve the function pointer by signature and provide it wrapped in a thin callable layer that effectively reduces to a single function-pointer hop at runtime. The overhead is comparable to a native C-style function pointer call. -The materialized callable must be validated before invocation. Calling an unvalidated callable may result in undefined behavior. - +The materialized `rtl::function` must be validated before invocation. Calling it without validation may result in undefined behavior. If materialization fails, the error can be retrieved using `get_init_err()`. Possible error values include: @@ -249,7 +248,7 @@ Possible error values include: * `rtl::error::SignatureMismatch` * `rtl::error::ReturnTypeMismatch` -### Return-Erased `rtl::function<>` +### `rtl::function` – Return Erased. If the return type is not known at compile time, `rtl::Return` can be used as the return type. In this case, the `.returnT()` template parameter can be omitted, and `rtl::Return` will be selected automatically. @@ -267,7 +266,7 @@ else { } ``` -Validation of the materialized callable is optional in this case. Calling an unvalidated callable does not result in undefined behavior; instead, an appropriate `rtl::error` is returned. If the callable was not successfully materialized, invoking it returns the same error as `get_init_err()` on the callable, typically `rtl::error::SignatureMismatch`. +Validation of the materialized `rtl::function` is optional in this case. Calling it without validation does not result in undefined behavior; instead, an appropriate `rtl::error` is returned. If the callable was not successfully materialized, invoking it returns the same error as `get_init_err()` on the callable, typically `rtl::error::SignatureMismatch`. If materialization succeeds but the call fails, possible error values include: @@ -275,6 +274,43 @@ If materialization succeeds but the call fails, possible error values include: * `rtl::error::RefBindingMismatch` * `rtl::error::ExplicitRefBindingRequired` +### `rtl::method` – Type Aware. + +To materialize a member function, the corresponding `rtl::Method` metadata must first be obtained. +This requires querying the `rtl::CxxMirror` for the desired class or struct as an `rtl::Record`. + +```c++ +std::optional classPerson = cxx::mirror().getRecord("Person"); +if (!classPerson) { /* Type not registered. */ } + +// From rtl::Record, fetch the desired method metadata +std::optional oGetName = classPerson->getMethod("getName"); +if (!oGetName) { /* Member function not registered */ } +``` + +Once the `rtl::Method` is available, member functions can be materialized from it. + +```c++ +rtl::method getName = oGetName->targetT().argsT() + .returnT(); +if (!getName) { // Member function with expected signature not found. + std::cerr << rtl::to_string(getName.get_init_err()); +} +else { + Person person("Alex", 23); + std::string nameStr = getName(person)(); // Returns string 'Alex'. +} +``` + +When fully type-specified, the materialized callable reduces to a direct function-pointer invocation. +If materialization fails, calling `rtl::method` without validation results in undefined behavior. The initialization error can be retrieved using `get_init_err()`. + +Possible error values include: + +* `rtl::error::InvalidCaller` +* `rtl::error::SignatureMismatch` +* `rtl::error::ReturnTypeMismatch` + --- ### Extracting Return Values From 99d28014aa925cfdeddfce9ddcbd5bd23cd30a69 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 14:06:04 +0530 Subject: [PATCH 059/102] doc: syns-n-sems, rtl::method. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 41 +++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 0b623fe5..f33b8d3f 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -238,7 +238,7 @@ else { ``` Here, the return type and argument types are fully specified at compile time. -This allows RTL to resolve the function pointer by signature and provide it wrapped in a thin callable layer that effectively reduces to a single function-pointer hop at runtime. The overhead is comparable to a native C-style function pointer call. +This allows RTL to resolve the function pointer by signature and provide it wrapped in a thin callable layer that effectively reduces to a single **function-pointer hop** at runtime. The overhead is comparable to a native C-style function pointer call. The materialized `rtl::function` must be validated before invocation. Calling it without validation may result in undefined behavior. If materialization fails, the error can be retrieved using `get_init_err()`. @@ -277,13 +277,13 @@ If materialization succeeds but the call fails, possible error values include: ### `rtl::method` – Type Aware. To materialize a member function, the corresponding `rtl::Method` metadata must first be obtained. -This requires querying the `rtl::CxxMirror` for the desired class or struct as an `rtl::Record`. +This requires querying the `rtl::CxxMirror` for the desired `class` or `struct` as an `rtl::Record`. ```c++ std::optional classPerson = cxx::mirror().getRecord("Person"); if (!classPerson) { /* Type not registered. */ } -// From rtl::Record, fetch the desired method metadata +// From rtl::Record, fetch the desired member-function metadata std::optional oGetName = classPerson->getMethod("getName"); if (!oGetName) { /* Member function not registered */ } ``` @@ -293,7 +293,7 @@ Once the `rtl::Method` is available, member functions can be materialized from i ```c++ rtl::method getName = oGetName->targetT().argsT() .returnT(); -if (!getName) { // Member function with expected signature not found. +if (!getName) { // Member-function with expected signature not found. std::cerr << rtl::to_string(getName.get_init_err()); } else { @@ -302,14 +302,43 @@ else { } ``` -When fully type-specified, the materialized callable reduces to a direct function-pointer invocation. -If materialization fails, calling `rtl::method` without validation results in undefined behavior. The initialization error can be retrieved using `get_init_err()`. +#### `rtl::const_method` and `rtl::static_method` + +The `rtl::method` can only invoke `mutable` member functions. To invoke a `const` member function, `rtl::const_method` must be used. + +A `const` method is materialized by specifying a `const` target type in the `.targetT<>` call: +```c++ +rtl::const_method getName = oGetName->targetT().argsT() + .returnT(); +if (getName) { + const Person person("Alex", 23); + std::string nameStr = getName(person)(); // Returns string 'Alex'. +} +``` + +Here, the target type is marked `const` via the template argument to `.targetT()`. As a result, `rtl::const_method` only accepts a `const Person` object as its invocation target. + +To invoke a `static` member function, `rtl::static_method` is used. Static methods do not require a target object, so the `.targetT()` call is omitted: + +```c++ +// Assume Person::getName() is a static function registered under the same name. +rtl::static_method getName = oGetName->argsT().returnT(); +if (getName) { + std::string nameStr = getName()(); // Returns some default std::string. +} +``` + +When the return type, target type, and argument types are fully specified, these materialized callables reduce to a **direct function-pointer** invocation at runtime. + +If materialization fails, calling `rtl::method`, `rtl::const_method`, or `rtl::static_method` without validation results in undefined behavior. +The initialization error can be retrieved using `get_init_err()`. Possible error values include: * `rtl::error::InvalidCaller` * `rtl::error::SignatureMismatch` * `rtl::error::ReturnTypeMismatch` +* `rtl::error::InvalidNonStaticMethodCaller` --- From 8a80042dd5ff209bd2eb13b07f02f384bdd8afa2 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 18:11:49 +0530 Subject: [PATCH 060/102] doc: syns-n-sems, rtl::method. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 111 ++++++++++++++++--------------- 1 file changed, 58 insertions(+), 53 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index f33b8d3f..411b9286 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -210,7 +210,7 @@ A default constructor can be materialized as follows: ```cpp rtl::constructor<> personCtor = classPerson->ctorT(); // No validation required -auto [err, person] = personCtor(rtl::alloc::Heap, "Waldo", 42); // Safe to call. +auto [err, person] = personCtor(rtl::alloc::Heap); // Safe to call. ``` The default constructor for a type `T` is implicitly registered when the type is registered using `rtl::type().record()`. It is guaranteed to be materializable and safe to call. If the default constructor is not publicly accessible or is deleted, @@ -306,7 +306,7 @@ else { The `rtl::method` can only invoke `mutable` member functions. To invoke a `const` member function, `rtl::const_method` must be used. -A `const` method is materialized by specifying a `const` target type in the `.targetT<>` call: +A `const` method is materialized by specifying a `const` target type in the `.targetT<>()` call: ```c++ rtl::const_method getName = oGetName->targetT().argsT() .returnT(); @@ -340,6 +340,61 @@ Possible error values include: * `rtl::error::ReturnTypeMismatch` * `rtl::error::InvalidNonStaticMethodCaller` +`rtl::error::InvalidNonStaticMethodCaller` is returned when a non-static member function is materialized without specifying a target type using `.targetT<>()`, causing it to be treated as a static function. + +### `rtl::method` – Type Erased. + +When the concrete target type is not available at compile time, `rtl::method` can be materialized without specifying a target type. +Calling `.targetT()` without a template parameter defaults the target type to `rtl::RObject`. + +```c++ + +// Create a type-erased instance +rtl::constructor<> personCtor = classPerson->ctorT(); + +// No validation required +auto [err0, personObj] = personCtor(rtl::alloc::Stack); // Safe to call + +rtl::method getName = oGetName->targetT().argsT() + .returnT(); +auto [err1, ret] = getName(personObj)(); // Invoke and receive return as std::optional. +if (err1 == rtl::error::None && ret.has_value()) { + std::string nameStr = ret.value(); +} +``` + +In this case, the typed return value is wrapped in `std::optional`. If the member function returns `void`, the optional is empty (`std::nullopt`). + +#### Const and Mutable Member Functions with Type-Erased Targets + +There is no separate callable entity such as `rtl::const_method` for type-erased targets. +The same `rtl::method` with `rtl::RObject` as the target type is used for both `const` and `mutable` member functions. +To invoke a `const` member function, the target must be passed as a `const reference`: + +```c++ +auto [err, ret] = getName(std::cref(personObj))(); +``` +This call will succeed only if `Person::getName()` is a `const` member function. If no matching `const` overload exists, the call returns `rtl::error::ConstOverloadMissing` and if only a `mutable` overload exists and a `const` target is provided, the call returns `rtl::error::NonConstOverloadMissing`. + +When both `const` and `mutable` overloads are registered, the following rules apply: + +* Passing a `const` target (`std::cref(personObj)`) binds to the `const` overload. +* Passing a non-const target binds to the mutable overload. + +👉 **Note:** +> *RTL does not perform automatic `const`/`mutable` overload resolution. The intended overload must be selected explicitly by the user through the target’s `const` qualification.* + +As with `rtl::function`, validation of the materialized `rtl::method` is optional in this case. +Calling it without validation does not result in undefined behavior; instead, an appropriate `rtl::error` is returned. If the callable was not successfully materialized, invoking it returns the same error as `get_init_err()` on the callable, typically `rtl::error::SignatureMismatch`. + +If materialization succeeds but the call fails, possible error values include: + +* `rtl::error::InvalidCaller` +* `rtl::error::ConstOverloadMissing` +* `rtl::error::NonConstOverloadMissing` +* `rtl::error::RefBindingMismatch` +* `rtl::error::ExplicitRefBindingRequired` + --- ### Extracting Return Values @@ -372,60 +427,10 @@ When dealing with `rtl::RObject` results: --- - - -### Querying Member Functions 👤 - -Member functions require an instance of the class to call upon. RTL provides a two-step process: first retrieve the `rtl::Record` for the type, then get the `rtl::Method` from that record. - -```cpp -// Retrieve the record for the class -std::optional classPerson = cxx::mirror().getRecord("Person"); - -if (classPerson) -{ - // Retrieve a specific method from the record - std::optional setProfile = classPerson->getMethod("setProfile"); - - if (setProfile) - { - // You can now bind an object and call the method - } -} -``` - -* `getRecord("TypeName")` returns the registered class/struct as `rtl::Record`. -* `getMethod("methodName")` retrieves a member function from the record. Returns `std::optional`. -* An empty optional indicates the method was not found. - ---- - - - -### Binding an Object and Calling 🔗 - -**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** - -```cpp -auto [err, retObj] = setProfile->bind(targetObj).call(std::string("Developer")); -``` - -* **`.bind(targetObj)`**: binds the target instance for the method. - - * `targetObj` is an `rtl::RObject` instance representing the object. - * You can create this instance reflectively using the `rtl::Record`’s constructor (we’ll cover this shortly). -* **`.call(args...)`**: executes the method on the bound object with the provided arguments. - -Errors specific to member function calls: - -* `rtl::error::TargetMismatch` → when the bound `RObject` does not represent the same type as the method’s owning class. -* `rtl::error::EmptyTarget` → when attempting to bind an empty `RObject`. -* `rtl::error::SignatureMismatch` → provided arguments/signature don’t match with expected signature or any overload. +**[OLD DOCUMENTATION ONWARDS EXPLAINING DEPRECATED APIS, DOCS BIENG UPDATED]** --- - - ### Binding Signatures and Perfect Forwarding 🎯 **[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** From 3560ab30aa1ed20b450ae0952c2780d5cfbf2424 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 19:59:57 +0530 Subject: [PATCH 061/102] doc: syns-n-sems, rtl::method done. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 63 ++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 411b9286..df4688d5 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -221,7 +221,7 @@ Objects can be constructed by specifying `rtl::alloc::Stack` or `rtl::alloc::Hea * `Heap` allocated objects are managed using `std::unique_ptr`. * `Stack` allocated objects are stored directly in `std::any`. -### `rtl::function` – Type Aware. +### `rtl::function` – Type Aware Non-member functions can be materialized from an `rtl::Function`: @@ -248,7 +248,7 @@ Possible error values include: * `rtl::error::SignatureMismatch` * `rtl::error::ReturnTypeMismatch` -### `rtl::function` – Return Erased. +### `rtl::function` – Return Erased If the return type is not known at compile time, `rtl::Return` can be used as the return type. In this case, the `.returnT()` template parameter can be omitted, and `rtl::Return` will be selected automatically. @@ -274,7 +274,7 @@ If materialization succeeds but the call fails, possible error values include: * `rtl::error::RefBindingMismatch` * `rtl::error::ExplicitRefBindingRequired` -### `rtl::method` – Type Aware. +### `rtl::method` – Type Aware To materialize a member function, the corresponding `rtl::Method` metadata must first be obtained. This requires querying the `rtl::CxxMirror` for the desired `class` or `struct` as an `rtl::Record`. @@ -302,11 +302,11 @@ else { } ``` -#### `rtl::const_method` and `rtl::static_method` +#### `rtl::const_method` and `rtl::static_method`: The `rtl::method` can only invoke `mutable` member functions. To invoke a `const` member function, `rtl::const_method` must be used. -A `const` method is materialized by specifying a `const` target type in the `.targetT<>()` call: +An `rtl::const_method` is materialized by specifying a `const` target type in the `.targetT<>()` call: ```c++ rtl::const_method getName = oGetName->targetT().argsT() .returnT(); @@ -324,7 +324,7 @@ To invoke a `static` member function, `rtl::static_method` is used. Static metho // Assume Person::getName() is a static function registered under the same name. rtl::static_method getName = oGetName->argsT().returnT(); if (getName) { - std::string nameStr = getName()(); // Returns some default std::string. + std::string nameStr = getName()(); // Returns a default std::string. } ``` @@ -342,34 +342,65 @@ Possible error values include: `rtl::error::InvalidNonStaticMethodCaller` is returned when a non-static member function is materialized without specifying a target type using `.targetT<>()`, causing it to be treated as a static function. -### `rtl::method` – Type Erased. +### `rtl::method` – Type Erased When the concrete target type is not available at compile time, `rtl::method` can be materialized without specifying a target type. Calling `.targetT()` without a template parameter defaults the target type to `rtl::RObject`. ```c++ -// Create a type-erased instance +// Materializing a default constructor rtl::constructor<> personCtor = classPerson->ctorT(); // No validation required -auto [err0, personObj] = personCtor(rtl::alloc::Stack); // Safe to call +auto [err, personObj] = personCtor(rtl::alloc::Stack); // Safe to call rtl::method getName = oGetName->targetT().argsT() .returnT(); -auto [err1, ret] = getName(personObj)(); // Invoke and receive return as std::optional. -if (err1 == rtl::error::None && ret.has_value()) { +auto [err0, ret] = getName(personObj)(); // Invoke and receive return as std::optional. +if (err0 == rtl::error::None && ret.has_value()) { std::string nameStr = ret.value(); } ``` +In this case, the typed return value is wrapped in `std::optional`. If the member function returns `void`, the optional is empty. -In this case, the typed return value is wrapped in `std::optional`. If the member function returns `void`, the optional is empty (`std::nullopt`). +#### Return-Erased Variants: -#### Const and Mutable Member Functions with Type-Erased Targets +Along with the target type, the return type can also be erased. Leaving the `.returnT()` template parameter empty defaults the return type to `rtl::Return`. -There is no separate callable entity such as `rtl::const_method` for type-erased targets. +```c++ + +rtl::method getName = oGetName->targetT().argsT().returnT(); + +auto [err0, ret] = getName(personObj)(); // Invoke and receive return as rtl::RObject. +if (err0 == rtl::error::None && ret.canViewAs()) { + std::string nameStr = ret.view()->get(); // Safely view the returned std::string. +} +``` + +#### Mixed Variants: + +If the target type is known but the return type is erased: + +```c++ +rtl::method getName = oGetName->targetT().argsT().returnT(); +``` +For static methods, `rtl::static_method` is used and `.targetT()` is omitted: + +```c++ +rtl::static_method getName = oGetName->targetT().argsT().returnT(); +``` + +All of these variants follow the same invocation semantics. The only difference is the return representation: + +* Known return types are returned as `std::optional` +* Erased return types are returned as `rtl::RObject` + +#### `const` and `mutable` Member Functions with Type-Erased Targets: + +There is no separate callable entity such as `rtl::const_method` for type-erased invocations. The same `rtl::method` with `rtl::RObject` as the target type is used for both `const` and `mutable` member functions. -To invoke a `const` member function, the target must be passed as a `const reference`: +To invoke a `const` member function, the target must be passed as a `const` reference: ```c++ auto [err, ret] = getName(std::cref(personObj))(); @@ -378,8 +409,8 @@ This call will succeed only if `Person::getName()` is a `const` member function. When both `const` and `mutable` overloads are registered, the following rules apply: +* Passing a `mutable` target binds to the `mutable` overload. * Passing a `const` target (`std::cref(personObj)`) binds to the `const` overload. -* Passing a non-const target binds to the mutable overload. 👉 **Note:** > *RTL does not perform automatic `const`/`mutable` overload resolution. The intended overload must be selected explicitly by the user through the target’s `const` qualification.* From 63ad3eecd86716269f1f97569ce3f05cb603020f Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 20:33:47 +0530 Subject: [PATCH 062/102] doc: syns-n-sems, rtl::RObject. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 218 ++++--------------------------- 1 file changed, 29 insertions(+), 189 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index df4688d5..0e986db5 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -167,6 +167,32 @@ POD types do not have member functions. `rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. This ID can be generated using `rtl::traits::uid`, where `T` is a compile time known type. The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. +--- + +## The `rtl::RObject` + +`rtl::RObject` exists to wrap values or objects of any type in a type-erased form while providing safe access interfaces. +It can be returned from reflective function calls, member-function calls, and constructor calls. +It can also be created directly from a known value or object. + +Objects constructed on the heap via a reflective constructor call are returned as an `rtl::RObject` and are internally managed using `std::unique_ptr` for automatic lifetime management. + +Objects returned from reflective function or member-function calls, as well as values directly wrapped in an `rtl::RObject`, are stored on the stack using `std::any`. + +### Accessing Values from `rtl::RObject` + +When working with `rtl::RObject`, the following interfaces provide safe access to the stored value: + +| Function | Purpose | +| ------------------ | ---------------------------------------------------------------------- | +| `isEmpty()` | Checks whether the object contains a value. | +| `canViewAs()` | Returns `true` if the stored type is `T` or safely convertible to `T`. | +| `view()` | Returns a typed view of the stored value, or an empty `std::optional`. | +| `view()->get()` | Accesses the stored value as a `const T&`. | + +**Tip** + +> Use `canViewAs()` for a lightweight boolean check when branching, and `view()` when you need to access the value. --- @@ -383,12 +409,12 @@ if (err0 == rtl::error::None && ret.canViewAs()) { If the target type is known but the return type is erased: ```c++ -rtl::method getName = oGetName->targetT().argsT().returnT(); +rtl::method getName = oGetName->targetT().argsT().returnT(); ``` For static methods, `rtl::static_method` is used and `.targetT()` is omitted: ```c++ -rtl::static_method getName = oGetName->targetT().argsT().returnT(); +rtl::static_method getName = oGetName->argsT().returnT(); ``` All of these variants follow the same invocation semantics. The only difference is the return representation: @@ -399,7 +425,7 @@ All of these variants follow the same invocation semantics. The only difference #### `const` and `mutable` Member Functions with Type-Erased Targets: There is no separate callable entity such as `rtl::const_method` for type-erased invocations. -The same `rtl::method` with `rtl::RObject` as the target type is used for both `const` and `mutable` member functions. +The same `rtl::method` is used for both `const` and `mutable` member functions. To invoke a `const` member function, the target must be passed as a `const` reference: ```c++ @@ -428,40 +454,6 @@ If materialization succeeds but the call fails, possible error values include: --- -### Extracting Return Values - -```cpp -if (err == rtl::error::None) -{ - if (!retObj.isEmpty() && retObj.canViewAs()) - { - std::optional> viewStr = retObj.view(); - std::string retStr = viewStr->get(); // fully-typed returned string - } -} -``` - -* Return Handling Summary - -When dealing with `rtl::RObject` results: - -| Function | Purpose | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| `isEmpty()` | Checks if the function returned anything (i.e., non-`void`). | -| `canViewAs()` | Quick type check: returns `true` if the stored type is exactly `T` or safely convertible. | -| `view()` | Retrieves a typed **view** of the stored value if possible. Returns an empty `std::optional` if the type doesn’t match. | -| `view()->get()` | Extracts a const reference or value of `T` from the view, safely typed. | - -👉 **Tip** - -> ***Use `canViewAs()` for a cheap boolean check when branching, and `view()` when you actually need the value.*** - ---- - -**[OLD DOCUMENTATION ONWARDS EXPLAINING DEPRECATED APIS, DOCS BIENG UPDATED]** - ---- - ### Binding Signatures and Perfect Forwarding 🎯 **[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** @@ -481,158 +473,6 @@ setProfile->bind(targetObj).call(10); // compile-time error --- - - -### Const vs Non-Const Method Binding ⚡ - -**[THIS SECTION NEEDS TO BE UPDATED AS PER THE NEW CALLABLES]** - -When binding methods reflectively, RTL enforces const-correctness in a way that mirrors C++ itself, but with an extra layer of runtime safety. Let’s walk through how this works. - -#### Default Behavior - -Whenever both `const` and `non-const` overloads of a method exist, RTL prefers the **const overload**. This is consistent with RTL’s *const-by-default* philosophy: reflective calls always begin from the safest stance possible. - -```cpp -Person john("John"); -rtl::RObject robj = rtl::type(john); // Reflect object with statically-type; details covered later. - -// If both overloads exist, RTL selects the const one. -auto [err, ret] = someMethod->bind(robj).call(); -``` - -#### Choosing the Non-Const Path - -[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] -Sometimes you really do want the non-const overload. RTL requires you to be explicit in that case, by using `rtl::constCast()`: - -```cpp -auto [err, ret] = someMethod->bind(rtl::constCast(robj)).call(); -``` - -This signals intent clearly: *“Treat this object as non-const for this call.”* If the object is safe to cast, RTL allows it. - -#### Fallback to Non-Const - -If a class only defines a non-const method and no const variant exists, RTL will safely fall back and bind to the non-const overload. No extra steps are required, and this remains safe so long as the object wasn’t originally declared `const`. - -#### Declared-Const Objects - -Things change when the reflected object itself was declared `const` in the first place: - -```cpp -const Person constSam("Const-Sam"); // Reflect 'const' with statically-type; details covered later. -rtl::RObject robj = rtl::type(constSam); -``` - -Here, RTL preserves that constness strictly. Non-const methods cannot be invoked on such an object. Attempts to do so will result in `rtl::error::IllegalConstCast`. - -If you attempt a method where **no const overload exists**, RTL reports `rtl::error::ConstOverloadMissing`. - -#### Checking Provenance - -Because reflective calls may hand back new `RObject`s, you may sometimes wonder whether an object is safe to cast. That’s what `isConstCastSafe()` is for: - -```cpp -bool safe = robj.isConstCastSafe(); -``` - -* `false` → The object was originally declared const; treating it as mutable is unsafe. -* `true` → The object wasn’t originally const; RTL may relax constness internally if needed. - -#### Error Codes - -* **None** → Success; call resolved safely. -* **ConstOverloadMissing** → A const-qualified overload was required but not found. -* **NonConstOverloadMissing** → A non-const overload was explicitly requested but not found. -* **IllegalConstCast** → Attempted to cast away `const` from a true-const object. - -#### Summary - -* RTL defaults to the const overload when both exist. -* Explicitly request the non-const overload with `rtl::constCast()`. -* If only non-const exists, RTL uses it safely (unless the object was declared const). -* Declared-const objects reject non-const calls (`rtl::error::IllegalConstCast`) and fail if no const overload is present (`rtl::error::ConstOverloadMissing`). -* `isConstCastSafe()` tells you whether relaxation is permitted. -* Reflective objects are always const-first; declared-const objects are strictly immutable. - ---- - - -## Reflective Construction and Destruction 🏗️ - -Reflection in RTL doesn’t stop at functions and methods – you can also create full-fledged objects at runtime, directly through their reflected constructors. Cleanup, on the other hand, is fully automatic thanks to C++’s RAII. - -### Constructing Objects - -To construct a reflected object, first grab the `Record` that represents the type, then call one of its `create` helpers: - -```cpp -std::optional classPerson = cxx::mirror().getRecord("Person"); - -// Default constructor – create on heap - -[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] -auto [err, person] = classPerson->create(); - -if (err == rtl::error::None) -{ - // construction successful, use object to call methods now... -} - -// Overloaded constructor – this time create on stack - -[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET] -auto [err, person] = classPerson->create( - std::string("John Doe"), - 42 -); -``` - -Key takeaways: - -* Allocation policy is always explicit – you decide `Heap` or `Stack`. -* Creation returns `[rtl::error, rtl::RObject]`. -* If construction fails, `error != rtl::error::None` and the `RObject` will be empty. -* `rtl::error::SignatureMismatch` if provided arguments/signature don’t match with expected signature or any overload. -* `RObject` is the type-erased container that can hold either: - - * An instance created via a reflected constructor. - * A return value from any reflected call (as we have already seen earlier). - -### Destruction Semantics - -RTL does **not** give you a “destroy” API. All lifetime management is pure **RAII**: - -* **Heap objects** → wrapped in `std::unique_ptr`, destroyed automatically when the owning `RObject` goes out of scope. -* **Stack objects** → destroyed at scope exit like any local variable. -* **Return values** → temporary values that follow normal C++ value semantics. - -This design is intentional: - -* No risk of manual double-free or dangling references. -* Mirrors idiomatic C++ usage – you never call destructors explicitly in regular code, and you don’t here either. - -**Bottom line:** you never destroy a reflected object yourself – RAII does it for you. - -### Creating Reflected Objects With Static-Type - -Besides constructing objects via reflective calls (`create()` or `create()`), RTL also lets you create an `RObject` by **reflecting an existing object**: - -```cpp -Person mutableSam("Mutable-Sam"); -const Person constSam("Const-Sam"); - -rtl::RObject robj1 = rtl::type(mutableSam); -rtl::RObject robj2 = rtl::type(constSam); -``` - -* This always creates a **copy on the stack** inside the `RObject`. -* These stack-based reflections are **scope bound** and never heap-managed. -* Useful for **testing**, since you can quickly reflect arbitrary statically-typed objects. - ---- - ## Move Semantics in RTL 🔀 From 1618d26fe8bc56c21b48ccdb89800cad8d4e1d82 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 21:23:31 +0530 Subject: [PATCH 063/102] doc: correction. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 0e986db5..b1f5b035 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -167,6 +167,7 @@ POD types do not have member functions. `rtl::CxxMirror` also provides an overload of `getRecord()` that accepts an `std::uintptr_t` instead of a string identifier. This ID can be generated using `rtl::traits::uid`, where `T` is a compile time known type. The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. + --- ## The `rtl::RObject` From 9ee99be6dd9b1930587d37f3b6df5272e0ac7e84 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 21:44:36 +0530 Subject: [PATCH 064/102] doc: move semantics. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 81 +++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 17 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index b1f5b035..7a8259fe 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -176,11 +176,11 @@ The generated ID may be cached and reused for runtime lookups without requiring It can be returned from reflective function calls, member-function calls, and constructor calls. It can also be created directly from a known value or object. -Objects constructed on the heap via a reflective constructor call are returned as an `rtl::RObject` and are internally managed using `std::unique_ptr` for automatic lifetime management. +Objects constructed on the **Heap** via a reflective constructor call are returned as an `rtl::RObject` and are internally managed using `std::unique_ptr` for automatic lifetime management. -Objects returned from reflective function or member-function calls, as well as values directly wrapped in an `rtl::RObject`, are stored on the stack using `std::any`. +Objects returned from reflective function or member-function calls, as well as values directly wrapped in an `rtl::RObject`, are stored on the **Stack** using `std::any`. -### Accessing Values from `rtl::RObject` +#### Accessing Values from `rtl::RObject`: When working with `rtl::RObject`, the following interfaces provide safe access to the stored value: @@ -191,9 +191,65 @@ When working with `rtl::RObject`, the following interfaces provide safe access t | `view()` | Returns a typed view of the stored value, or an empty `std::optional`. | | `view()->get()` | Accesses the stored value as a `const T&`. | -**Tip** +👉 **Tip** -> Use `canViewAs()` for a lightweight boolean check when branching, and `view()` when you need to access the value. +> *Use `canViewAs()` for a lightweight boolean check when branching, and `view()` when you need to access the value.* + +### Move Semantics with `rtl::RObject` + +`rtl::RObject` is a **move-only** type. Copying is disallowed, and ownership transfer is performed exclusively through move semantics. +The behavior differs depending on whether the underlying object is stored on the **Stack** or on the **Heap**. + +#### Stack-Allocated Objects: + +When an object is created on **Stack**, the underlying instance is stored directly inside `rtl::RObject` using `std::any`. + +```cpp +rtl::RObject obj1 = rtl::RObject(std::string_view("Hello")); +rtl::RObject obj2 = std::move(obj1); +``` + +**Behavior:** + +* The reflected type’s **move constructor** is invoked. +* Ownership transfers to `obj2`. +* The moved-from object (`obj1`) becomes empty. +* No duplication occurs. + +👉 **Key idea:** +> *Stack move semantics invoke the reflected type’s move constructor.* + +### Heap-Allocated Objects: + +Objects on the **Heap** can only be created through a reflective constructor call. The returned instance is managed internally using `std::unique_ptr`. +Moving such an rtl::RObject transfers ownership of the pointer. + +**Behavior:** + +* The internal `std::unique_ptr` is moved. +* The reflected type’s move constructor is **not** invoked. +* Ownership transfers to the destination object. +* The moved-from object becomes empty. +* The underlying heap object remains valid until the final owner is destroyed. + +👉 **Key idea:** +> *Heap move semantics transfer the `unique_ptr` without moving the underlying object.* + +Across both **Stack** and **Heap** moves: + +* The moved-from `rtl::RObject` becomes empty. +* The destination `rtl::RObject` becomes the sole owner. +* Object destruction occurs exactly once. +* Cloning or invoking a moved-from object results in `rtl::error::EmptyRObject`. + +**Summary** + +When an `rtl::RObject` is moved, RTL either: + +* Invokes the reflected type’s move constructor (stack allocation), or +* Transfers ownership of the internal `std::unique_ptr` (heap allocation). + +In both cases, the source object is invalidated and ownership remains well-defined. --- @@ -474,17 +530,14 @@ setProfile->bind(targetObj).call(10); // compile-time error --- - -## Move Semantics in RTL 🔀 +#### Move Semantics with `rtl::RObject` Let’s walk you through how **move semantics** work in RTL. Since `rtl::RObject` is **move-only** (copying is disallowed), moving objects is the primary way ownership is transferred. The behavior differs depending on whether the object was created on the **stack** or the **heap**. -### Moving Stack-Allocated Objects - -When you create an object reflectively with `alloc::Stack`, the underlying instance lives directly inside the `RObject`. Moving such an `RObject` looks just like a regular C++ move: +When you create an object reflectively with `alloc::Stack`, the underlying instance lives inside the `RObject` wrapped directlty in `std::any`. Moving such an `RObject` looks just like a regular C++ move: ```cpp -RObject obj1 = /* created on stack */; +RObject obj1 = RObject(std::string_view("Hello")); RObject obj2 = std::move(obj1); ``` **What happens here:** @@ -497,14 +550,8 @@ RObject obj2 = std::move(obj1); 👉 **Key idea:** > *Stack move = reflected type’s move constructor is called.* -### Moving Heap-Allocated Objects - When you create an object reflectively with `alloc::Heap`, the instance is managed inside a **`std::unique_ptr`**. Moving such an `RObject` also uses standard C++ move semantics: -```cpp -RObject obj1 = /* created on heap */; -RObject obj2 = std::move(obj1); -``` **What happens here:** * The internal `unique_ptr` is moved. From c2fbeb5b606c55bfcf5697720fd60289bc45aafb Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 21:56:11 +0530 Subject: [PATCH 065/102] doc: corrections. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 74 +++----------------------------- 1 file changed, 6 insertions(+), 68 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 7a8259fe..973dc328 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -205,7 +205,7 @@ The behavior differs depending on whether the underlying object is stored on the When an object is created on **Stack**, the underlying instance is stored directly inside `rtl::RObject` using `std::any`. ```cpp -rtl::RObject obj1 = rtl::RObject(std::string_view("Hello")); +rtl::RObject obj1 = rtl::RObject(std::string_view("Hello")); // No internal heap allocation, stored on the stack. rtl::RObject obj2 = std::move(obj1); ``` @@ -222,7 +222,7 @@ rtl::RObject obj2 = std::move(obj1); ### Heap-Allocated Objects: Objects on the **Heap** can only be created through a reflective constructor call. The returned instance is managed internally using `std::unique_ptr`. -Moving such an rtl::RObject transfers ownership of the pointer. +Moving such an `rtl::RObject` transfers ownership of the pointer. **Behavior:** @@ -246,8 +246,8 @@ Across both **Stack** and **Heap** moves: When an `rtl::RObject` is moved, RTL either: -* Invokes the reflected type’s move constructor (stack allocation), or -* Transfers ownership of the internal `std::unique_ptr` (heap allocation). +* Invokes the reflected type’s move constructor (**Stack** allocation), or +* Transfers ownership of the internal `std::unique_ptr` (**Heap** allocation). In both cases, the source object is invalidated and ownership remains well-defined. @@ -511,70 +511,8 @@ If materialization succeeds but the call fails, possible error values include: --- -### Binding Signatures and Perfect Forwarding 🎯 - -**[THIS API IS REMOVED, NOW CALLABLES ARE USED. DOC NOT UPDATED YET]** - -```cpp -setProfile->bind(targetObj).call(10); // 10 forwarded as int -setProfile->bind(targetObj).call(10); // 10 forwarded as double (10.0) -setProfile->bind(targetObj).call(10); // compile-time error -``` - -* The template parameter in `bind<..signature..>()` tells RTL how to perceive and forward the arguments. -* RTL uses the template signature to ***figure out*** which method (and which overload, if multiple exist) to select from the registration. -* All arguments are forwarded as universal references (`&&`), enabling **perfect forwarding** with **no copies**. Arguments are ultimately received exactly as the registered function expects (`lvalue`, `rvalue`, `const-lvalue-ref`). -* `rtl::RObject` contains the return value, or is empty if the method returns `void`. - -> ***By retrieving a `Method` from a `Record`, binding a target instance, and specifying the signature as needed, RTL allows safe, perfectly-forwarded reflective calls on member functions.*** - ---- - -#### Move Semantics with `rtl::RObject` - -Let’s walk you through how **move semantics** work in RTL. Since `rtl::RObject` is **move-only** (copying is disallowed), moving objects is the primary way ownership is transferred. The behavior differs depending on whether the object was created on the **stack** or the **heap**. - -When you create an object reflectively with `alloc::Stack`, the underlying instance lives inside the `RObject` wrapped directlty in `std::any`. Moving such an `RObject` looks just like a regular C++ move: - -```cpp -RObject obj1 = RObject(std::string_view("Hello")); -RObject obj2 = std::move(obj1); -``` -**What happens here:** - -* The reflected type’s **move constructor** is invoked. -* Ownership of the object transfers into `obj2`. -* The moved-from object (`obj1`) becomes **empty**. -* No duplication or destruction happens – the object is simply relocated. - -👉 **Key idea:** -> *Stack move = reflected type’s move constructor is called.* - -When you create an object reflectively with `alloc::Heap`, the instance is managed inside a **`std::unique_ptr`**. Moving such an `RObject` also uses standard C++ move semantics: - -**What happens here:** - -* The internal `unique_ptr` is moved. -* No move constructor of the reflected type is called. -* Ownership transfers to `obj2`. -* The moved-from object (`obj1`) becomes **empty**. -* The underlying heap object remains untouched and alive until its final owner is destroyed. - -👉 **Key idea** -> ***Heap move = `unique_ptr` move semantics (cheap pointer transfer).*** - -### Consistent Guarantees 🟨 - -Across both stack and heap moves: - -* The moved-from `RObject` is always **empty**. -* The destination `RObject` becomes the sole owner. -* RAII ensures proper cleanup – objects are destroyed once and only once. -* Cloning or invoking a moved-from object results in `rtl::error::EmptyRObject`. - -✅ Bottom Line -> ***“When you move an `RObject`, RTL either calls your type’s move constructor (stack) or transfers ownership of its `unique_ptr` (heap). In both cases, the source is emptied and ownership remains safe.”*** +## Perfect Forwarding – The References --- -***More to come...*** +***More to come...*** \ No newline at end of file From 60c95aec248f6e8e1fc2c6d5bbe50ccf1c6e8ba0 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 23:06:22 +0530 Subject: [PATCH 066/102] doc: perfect forwarding. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 105 ++++++++++++++++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 973dc328..7edc97a6 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -511,7 +511,110 @@ If materialization succeeds but the call fails, possible error values include: --- -## Perfect Forwarding – The References +## Reference Binding and Overload Resolution + +RTL applies a safety-oriented overload resolution strategy when invoking reflected functions and methods. +The goal is to avoid implicit mutation of user data and require explicit intent whenever a call may modify its arguments. + +This reference-based overload resolution is applied only to type-erased or partially type-erased callables. +Fully type-aware callables are materialized by explicitly specifying the target, argument, and return types at compile time, so no ambiguity or safety-based resolution is required. + +#### Implicit Resolution Rules: + +When multiple reference based overloads of same function signature exists, + +```c++ +std::string reverse(std::string); // (1) by value +std::string reverse(std::string&); // (2) lvalue ref +std::string reverse(const std::string&); // (3) const lvalue ref +std::string reverse(std::string&&); // (4) rvalue ref + +``` +While calling such functions with any type erased callables, RTL prefers non-mutating call paths by default: + +| Available Overloads | Call binds to | +| ------------------- | ------------------- | +| `T` + `const T&` | `T` (by value) | +| `T` + `T&` | `T` (by value) | +| `T` only | `T` | +| `const T&` only | `const T&` | + +By-value and `const` reference bindings cannot mutate the caller’s object, so they are considered safe and are selected implicitly. + +#### Explicit Binding for Mutating Overloads: + +Overloads that may mutate the caller’s data require explicit user intent: + +* Non-const lvalue reference (`T&`) +* Rvalue reference (`T&&`) + +To invoke these overloads, the user must explicitly specify the reference type using `.bind<...>()`: + +```cpp +rtl::function reverseString = cxx::mirror().getFunction("reverse") + .argsT().returnT(); +// explicitly call the lvalue ref overload. +auto [err0, ret0] = reverseString.bind()(str); +// explicitly call the rvalue ref overload. +auto [err1, ret1] = reverseString.bind()(std::string(str)); +``` + +If a mutating overload exists but no explicit binding is provided, RTL returns `rtl::error::ExplicitRefBindingRequired`. + +#### Ambiguous Reference Overloads: + +If both `T&` and `const T&` overloads exist, RTL treats the situation as ambiguous and refuses to guess the user’s intent regarding mutability. + +In such cases, implicit invocation is rejected and explicit selection is required: + +```cpp +reverseString.bind()(str); // Allows mutation +reverseString.bind()(str); // Disallows mutation +``` + +Without explicit binding, RTL returns `rtl::error::ExplicitRefBindingRequired` + +#### Const-Reference Only Overloads: + +If a function provides only a `const T&` overload, RTL resolves the call implicitly. Since `const` references cannot mutate the caller, no explicit binding is required. + +#### Rvalue Reference Overloads: + +Overloads taking `T&&` always require explicit binding: + +```cpp +reverseString.bind()(std::string(str)); +``` +Without explicit binding, RTL returns `rtl::error::ExplicitRefBindingRequired` + +#### Binding Mismatches: + +If the explicitly bound reference type does not match the function signature, RTL returns`rtl::error::RefBindingMismatch`. This indicates a hard type mismatch rather than an ambiguity. + +#### Design Rationale: + +RTL does not follow C++ overload resolution rules directly. Instead, it enforces a reflection-specific policy: + +* Prefer non-mutating call paths +* Avoid implicit mutation +* Require explicit intent for mutation +* Reject ambiguous reference overloads +* Never guess user intent + +This ensures that reflective calls remain predictable, safe, and explicit in their side effects. + +### Summary + +| Situation | RTL Behavior | +| ------------------------ | --------------------------- | +| Safe overload exists | Implicitly selected | +| Mutating overload exists | Requires explicit binding | +| `T&` + `const T&` | Explicit selection required | +| Only `const T&` | Implicitly allowed | +| `T&&` overload | Explicit binding required | +| Wrong binding | `RefBindingMismatch` | + +This policy guarantees that reflective invocation never mutates user data without explicit consent. --- From a94a2fe419edf6288b85685705cdc348100f66c8 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 23:15:17 +0530 Subject: [PATCH 067/102] doc: index updated. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 7edc97a6..eac6542f 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -1,23 +1,21 @@ -# RTL: Syntax & Semantics ⚡ +# RTL: Syntax & Semantics 🔍 RTL makes C++ reflection feel like a natural extension of the language. Let’s explore its syntax and the semantics it unlocks. This guide walks you step by step through RTL’s reflection syntax. ### 📖 Index -1. [Building the Mirror 🪞](#building-the-mirror-) -2. [Getting Started with Registration 📝](#getting-started-with-registration-) -3. [Reflective Invocations with RTL ✨](#reflective-invocations-with-rtl-) - - * [Querying C-Style Functions 🔍](#querying-c-style-functions) - * [Performing Reflective Calls ⚙️](#performing-reflective-calls) - * [Extracting Return Values 📤](#extracting-return-values) - * [Querying Member Functions 👤](#querying-member-functions) - * [Binding an Object and Calling 🔗](#binding-an-object-and-calling) - * [Binding Signatures and Perfect Forwarding 🎯](#binding-signatures-and-perfect-forwarding) - * [Const vs Non-Const Method Binding ⚡](#const-vs-non-const-method-binding) -4. [Reflective Construction and Destruction 🏗️](#reflective-construction-and-destruction) -5. [Move Semantics in RTL 🔀](#move-semantics-in-rtl) +1. [Building the Mirror](#building-the-mirror) +2. [Getting Started with Registration](#getting-started-with-registration) +3. [Querying the Metadata](#querying-the-metadata) +4. [The `rtl::RObject`](#the-rtlrobject) +5. [Reflective Invocations with RTL](#reflective-invocations-with-rtl) + - [`rtl::constructor`](#rtlconstructor) + - [`rtl::function` – Type Aware](#rtlfunction--type-aware) + - [`rtl::function` – Return Erased](#rtlfunction--return-erased) + - [`rtl::method` – Type Aware](#rtlmethod--type-aware) + - [`rtl::method` – Type Erased](#rtlmethod--type-erased) +6. [Reference Binding and Overload Resolution](#reference-binding-and-overload-resolution) --- @@ -603,7 +601,7 @@ RTL does not follow C++ overload resolution rules directly. Instead, it enforces This ensures that reflective calls remain predictable, safe, and explicit in their side effects. -### Summary +#### Summary | Situation | RTL Behavior | | ------------------------ | --------------------------- | From 7b5c7400cc3a6a1c8953dddf866cd50e09804109 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 23:17:21 +0530 Subject: [PATCH 068/102] doc: index correction. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index eac6542f..a3dbd366 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -8,13 +8,13 @@ This guide walks you step by step through RTL’s reflection syntax. 1. [Building the Mirror](#building-the-mirror) 2. [Getting Started with Registration](#getting-started-with-registration) 3. [Querying the Metadata](#querying-the-metadata) -4. [The `rtl::RObject`](#the-rtlrobject) +4. [The rtl::RObject](#the-rtlrobject) 5. [Reflective Invocations with RTL](#reflective-invocations-with-rtl) - - [`rtl::constructor`](#rtlconstructor) - - [`rtl::function` – Type Aware](#rtlfunction--type-aware) - - [`rtl::function` – Return Erased](#rtlfunction--return-erased) - - [`rtl::method` – Type Aware](#rtlmethod--type-aware) - - [`rtl::method` – Type Erased](#rtlmethod--type-erased) + - [rtl::constructor](#rtlconstructor) + - [rtl::function – Type Aware](#rtlfunction--type-aware) + - [rtl::function – Return Erased](#rtlfunction--return-erased) + - [rtl::method – Type Aware](#rtlmethod--type-aware) + - [rtl::method – Type Erased](#rtlmethod--type-erased) 6. [Reference Binding and Overload Resolution](#reference-binding-and-overload-resolution) --- From 2c8d26e85c6cb0e8b115c4c07e689e7697509f19 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Thu, 22 Jan 2026 23:18:29 +0530 Subject: [PATCH 069/102] undo last commit. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index a3dbd366..eac6542f 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -8,13 +8,13 @@ This guide walks you step by step through RTL’s reflection syntax. 1. [Building the Mirror](#building-the-mirror) 2. [Getting Started with Registration](#getting-started-with-registration) 3. [Querying the Metadata](#querying-the-metadata) -4. [The rtl::RObject](#the-rtlrobject) +4. [The `rtl::RObject`](#the-rtlrobject) 5. [Reflective Invocations with RTL](#reflective-invocations-with-rtl) - - [rtl::constructor](#rtlconstructor) - - [rtl::function – Type Aware](#rtlfunction--type-aware) - - [rtl::function – Return Erased](#rtlfunction--return-erased) - - [rtl::method – Type Aware](#rtlmethod--type-aware) - - [rtl::method – Type Erased](#rtlmethod--type-erased) + - [`rtl::constructor`](#rtlconstructor) + - [`rtl::function` – Type Aware](#rtlfunction--type-aware) + - [`rtl::function` – Return Erased](#rtlfunction--return-erased) + - [`rtl::method` – Type Aware](#rtlmethod--type-aware) + - [`rtl::method` – Type Erased](#rtlmethod--type-erased) 6. [Reference Binding and Overload Resolution](#reference-binding-and-overload-resolution) --- From b1757f4f959466e0b39b2a9761fd12662f0e143e Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 09:15:42 +0530 Subject: [PATCH 070/102] doc: improvements. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index eac6542f..2855f074 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -1,7 +1,6 @@ # RTL: Syntax & Semantics 🔍 RTL makes C++ reflection feel like a natural extension of the language. Let’s explore its syntax and the semantics it unlocks. -This guide walks you step by step through RTL’s reflection syntax. ### 📖 Index @@ -41,7 +40,7 @@ Through the mirror, all registered types, functions, and methods can be queried, * **Duplicate registration is harmless** – Identical registrations always resolve to the same metadata. If a canonical function-pointer is already registered, it is not inserted again; subsequent registrations simply reference the existing entry. -* **Thread-safety guaranteed by RTL** – Regardless of how mirrors are managed (singleton, multiple, or transient), RTL ensures synchronized, race-free registration and access across threads. +* **Thread-safety guaranteed by RTL** – Regardless of how mirrors are managed (singleton, multiple, or transient), RTL ensures synchronized, race-free registration and access threads. * **Registration overhead is deliberate** – Each registration incurs a small, one-time cost in memory and initialization time: @@ -67,7 +66,7 @@ rtl::type().ns("ext").function("fn-name").build(fn-ptr); ``` * `ns("ext")` – Specifies the namespace under which the function is registered. - Omitting `.ns()` or passing an empty string (`.ns("")`) registers the function in the global namespace. + Omitting `.ns()` or passing an empty string (`.ns("")`) registers the function under `rtl::global`. This is not a declared C++ namespace; rather, it is a logical, string-based grouping used to prevent naming conflicts. * `function("fn-name")` – Declares the function by name. If multiple overloads exist, the template parameter (`function<...>(..)`) disambiguates the selected overload. @@ -85,7 +84,8 @@ namespace ext { bool sendMessage(const char*); void sendMessage(int, std::string); } - +``` +```c++ rtl::type().ns("ext").function("sendMessage").build(ext::sendMessage); rtl::type().ns("ext").function("sendMessage").build(ext::sendMessage); ``` @@ -137,11 +137,11 @@ For example: // Function without a namespace std::optional popMessage = cxx::mirror().getFunction("popMessage"); -// Function registered with a namespace, e.g. "utils" -std::optional sendMessage = cxx::mirror().getFunction("utils", "sendMessage"); +// Function registered with a namespace, e.g. "ext" +std::optional sendMessage = cxx::mirror().getFunction("ext", "sendMessage"); ``` -These metadata are returned wrapped in `std::optional<>`, which is empty if the requested entity is not found by the name specified. +These metadata are returned wrapped in `std::optional`, which is empty if the requested entity is not found by the name specified. ```cpp // Querying a type without a namespace @@ -166,6 +166,18 @@ POD types do not have member functions. This ID can be generated using `rtl::traits::uid`, where `T` is a compile time known type. The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. +The rtl::Method and rtl::Function metadata objects can be further queried to determine whether a specific call signature is valid for a given function or method. This allows callers to validate argument compatibility before attempting materialization or invocation. + +```c++ +// Obtain metadata for the registered function. +std::optional sendMessage = + cxx::mirror().getFunction("ext", "sendMessage"); + +// Query supported call signatures. +bool isSignature0 = sendMessage->hasSignature(); // true +bool isSignature1 = sendMessage->hasSignature(); // true +bool isSignature2 = sendMessage->hasSignature<>(); // false (no parameters) +``` --- ## The `rtl::RObject` @@ -251,7 +263,7 @@ In both cases, the source object is invalidated and ownership remains well-defin --- -## Reflective Invocations with RTL️ +## Reflective Invocations with RTL `rtl::Method` and `rtl::Function` are metadata descriptors. Functions and methods cannot be directly called through these objects. Instead, RTL uses a materialization model to produce callable entities. From 608eb008dfe7f7326a8bd3660aafede56451f182 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 10:24:18 +0530 Subject: [PATCH 071/102] doc: improvements. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 2855f074..d2bbbf36 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -166,12 +166,11 @@ POD types do not have member functions. This ID can be generated using `rtl::traits::uid`, where `T` is a compile time known type. The generated ID may be cached and reused for runtime lookups without requiring a namespace or string-based queries. -The rtl::Method and rtl::Function metadata objects can be further queried to determine whether a specific call signature is valid for a given function or method. This allows callers to validate argument compatibility before attempting materialization or invocation. +The `rtl::Method` and `rtl::Function` metadata objects can be further queried to determine whether a specific call signature is valid for a given function or method. This allows callers to validate argument compatibility before attempting materialization or invocation. ```c++ // Obtain metadata for the registered function. -std::optional sendMessage = - cxx::mirror().getFunction("ext", "sendMessage"); +std::optional sendMessage = cxx::mirror().getFunction("ext", "sendMessage"); // Query supported call signatures. bool isSignature0 = sendMessage->hasSignature(); // true @@ -183,12 +182,12 @@ bool isSignature2 = sendMessage->hasSignature<>(); // false (n ## The `rtl::RObject` `rtl::RObject` exists to wrap values or objects of any type in a type-erased form while providing safe access interfaces. -It can be returned from reflective function calls, member-function calls, and constructor calls. +It can be returned from reflective function calls, method calls, and constructor calls. It can also be created directly from a known value or object. Objects constructed on the **Heap** via a reflective constructor call are returned as an `rtl::RObject` and are internally managed using `std::unique_ptr` for automatic lifetime management. -Objects returned from reflective function or member-function calls, as well as values directly wrapped in an `rtl::RObject`, are stored on the **Stack** using `std::any`. +Objects returned from reflective function or method calls, as well as values directly wrapped in an `rtl::RObject`, are stored on the **Stack** using `std::any`. #### Accessing Values from `rtl::RObject`: @@ -208,7 +207,7 @@ When working with `rtl::RObject`, the following interfaces provide safe access t ### Move Semantics with `rtl::RObject` `rtl::RObject` is a **move-only** type. Copying is disallowed, and ownership transfer is performed exclusively through move semantics. -The behavior differs depending on whether the underlying object is stored on the **Stack** or on the **Heap**. +The behavior differs internally based on whether the underlying object is stored on the **Stack** or on the **Heap**, without any impact on the public interface or user-visible behavior. #### Stack-Allocated Objects: From b3291f8f78986734b032e14014443e39da054697 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 11:39:28 +0530 Subject: [PATCH 072/102] doc: improvements. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index d2bbbf36..624ba845 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -228,7 +228,11 @@ rtl::RObject obj2 = std::move(obj1); 👉 **Key idea:** > *Stack move semantics invoke the reflected type’s move constructor.* -### Heap-Allocated Objects: +`rtl::RObject` itself does not perform heap allocation when wrapping stack-stored values. Any dynamic allocation that occurs is solely an implementation detail of `std::any`, dependent on the stored type’s size, alignment, and move characteristics. While many standard library implementations apply a small-object optimization (SSO), this behavior is not guaranteed by the C++ standard. + +RTL uses controlled, type-erased storage with retained runtime type information as a safe alternative to `void*`, enforcing validated access and well-defined semantics while avoiding unchecked casts and undefined behavior. + +#### Heap-Allocated Objects: Objects on the **Heap** can only be created through a reflective constructor call. The returned instance is managed internally using `std::unique_ptr`. Moving such an `rtl::RObject` transfers ownership of the pointer. From 62b0e02f6d1c68f98af7477fee30263e3cfe661f Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 13:10:01 +0530 Subject: [PATCH 073/102] doc: improvements. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 624ba845..fcd4b900 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -118,7 +118,7 @@ rtl::type().member().method<...>("method-name").build(&T::f); * `.method<...>(..)`: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. * Variants exist for const (`.methodConst`) and static (`.methodStatic`) methods. -👉 **Note:** +👉 Note > *The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.* With these constructs – namespaces, non-member functions, overloads, records `(pod/class/struct)`, constructors, and methods – you now have the full registration syntax for RTL. Together, they allow you to build a complete reflective model of your C++ code. @@ -228,9 +228,7 @@ rtl::RObject obj2 = std::move(obj1); 👉 **Key idea:** > *Stack move semantics invoke the reflected type’s move constructor.* -`rtl::RObject` itself does not perform heap allocation when wrapping stack-stored values. Any dynamic allocation that occurs is solely an implementation detail of `std::any`, dependent on the stored type’s size, alignment, and move characteristics. While many standard library implementations apply a small-object optimization (SSO), this behavior is not guaranteed by the C++ standard. - -RTL uses controlled, type-erased storage with retained runtime type information as a safe alternative to `void*`, enforcing validated access and well-defined semantics while avoiding unchecked casts and undefined behavior. +`rtl::RObject` itself does not perform heap allocation when wrapping stack-stored values. Any dynamic allocation that occurs is solely an implementation detail of `std::any`. By leveraging `std::any`, RTL provides controlled, type-erased storage with retained runtime type information as a safe alternative to `void*`, enforcing validated access and well-defined semantics while avoiding unchecked casts and undefined behavior. #### Heap-Allocated Objects: @@ -370,6 +368,9 @@ If materialization succeeds but the call fails, possible error values include: * `rtl::error::RefBindingMismatch` * `rtl::error::ExplicitRefBindingRequired` +👉 Mental Note +> *Fully type-specified callables must be validated before invocation to avoid undefined behavior; type-erased callables are safe to invoke without prior validation and report errors at runtime.* + ### `rtl::method` – Type Aware To materialize a member function, the corresponding `rtl::Method` metadata must first be obtained. From b6a1607e675313045dab5e8e99fa39ab0e717422 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 17:01:05 +0530 Subject: [PATCH 074/102] doc: improvements. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index fcd4b900..554098a4 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -118,7 +118,7 @@ rtl::type().member().method<...>("method-name").build(&T::f); * `.method<...>(..)`: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. * Variants exist for const (`.methodConst`) and static (`.methodStatic`) methods. -👉 Note +👉 Mental Note > *The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.* With these constructs – namespaces, non-member functions, overloads, records `(pod/class/struct)`, constructors, and methods – you now have the full registration syntax for RTL. Together, they allow you to build a complete reflective model of your C++ code. @@ -200,7 +200,7 @@ When working with `rtl::RObject`, the following interfaces provide safe access t | `view()` | Returns a typed view of the stored value, or an empty `std::optional`. | | `view()->get()` | Accesses the stored value as a `const T&`. | -👉 **Tip** +👉 Tip > *Use `canViewAs()` for a lightweight boolean check when branching, and `view()` when you need to access the value.* @@ -225,7 +225,7 @@ rtl::RObject obj2 = std::move(obj1); * The moved-from object (`obj1`) becomes empty. * No duplication occurs. -👉 **Key idea:** +👉 Mental Note > *Stack move semantics invoke the reflected type’s move constructor.* `rtl::RObject` itself does not perform heap allocation when wrapping stack-stored values. Any dynamic allocation that occurs is solely an implementation detail of `std::any`. By leveraging `std::any`, RTL provides controlled, type-erased storage with retained runtime type information as a safe alternative to `void*`, enforcing validated access and well-defined semantics while avoiding unchecked casts and undefined behavior. @@ -243,7 +243,7 @@ Moving such an `rtl::RObject` transfers ownership of the pointer. * The moved-from object becomes empty. * The underlying heap object remains valid until the final owner is destroyed. -👉 **Key idea:** +👉 Mental Note > *Heap move semantics transfer the `unique_ptr` without moving the underlying object.* Across both **Stack** and **Heap** moves: @@ -253,7 +253,7 @@ Across both **Stack** and **Heap** moves: * Object destruction occurs exactly once. * Cloning or invoking a moved-from object results in `rtl::error::EmptyRObject`. -**Summary** +**Summary:** When an `rtl::RObject` is moved, RTL either: @@ -272,7 +272,7 @@ Callable entities are materialized by explicitly specifying the argument and ret When full type information is provided, materialized callables compile to **direct function-pointer** calls with near-zero overhead. When type erasure is required (for example, for an unknown return or target type), invocation proceeds through a lightweight dispatch layer with performance **comparable** to `std::function`. -⚖️ **The Idea:** +⚖️ The Idea > *In RTL, materialization makes the performance–flexibility trade-off explicit at each call site.* Every type-erased reflective call returns either `std::pair` or `std::pair>`. @@ -461,8 +461,6 @@ if (err0 == rtl::error::None && ret.has_value()) { ``` In this case, the typed return value is wrapped in `std::optional`. If the member function returns `void`, the optional is empty. -#### Return-Erased Variants: - Along with the target type, the return type can also be erased. Leaving the `.returnT()` template parameter empty defaults the return type to `rtl::Return`. ```c++ @@ -475,9 +473,7 @@ if (err0 == rtl::error::None && ret.canViewAs()) { } ``` -#### Mixed Variants: - -If the target type is known but the return type is erased: +And finally, If the target type is known but the return type is erased: ```c++ rtl::method getName = oGetName->targetT().argsT().returnT(); @@ -509,7 +505,7 @@ When both `const` and `mutable` overloads are registered, the following rules ap * Passing a `mutable` target binds to the `mutable` overload. * Passing a `const` target (`std::cref(personObj)`) binds to the `const` overload. -👉 **Note:** +👉 Note > *RTL does not perform automatic `const`/`mutable` overload resolution. The intended overload must be selected explicitly by the user through the target’s `const` qualification.* As with `rtl::function`, validation of the materialized `rtl::method` is optional in this case. From 5e23073686a6836728ea521ed0edbe876ad6e3c0 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 17:47:26 +0530 Subject: [PATCH 075/102] doc: improvements. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 554098a4..224ae1aa 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -399,9 +399,9 @@ else { } ``` -#### `rtl::const_method` and `rtl::static_method`: +#### `rtl::const_method`: -The `rtl::method` can only invoke `mutable` member functions. To invoke a `const` member function, `rtl::const_method` must be used. +The `rtl::method` can only invoke non-`const` member functions. To invoke a `const` qualified member function, `rtl::const_method` must be used. An `rtl::const_method` is materialized by specifying a `const` target type in the `.targetT<>()` call: ```c++ @@ -415,6 +415,8 @@ if (getName) { Here, the target type is marked `const` via the template argument to `.targetT()`. As a result, `rtl::const_method` only accepts a `const Person` object as its invocation target. +#### `rtl::static_method`: + To invoke a `static` member function, `rtl::static_method` is used. Static methods do not require a target object, so the `.targetT()` call is omitted: ```c++ @@ -489,24 +491,24 @@ All of these variants follow the same invocation semantics. The only difference * Known return types are returned as `std::optional` * Erased return types are returned as `rtl::RObject` -#### `const` and `mutable` Member Functions with Type-Erased Targets: +#### `const` and non-`const` Member Functions with Type-Erased Targets: -There is no separate callable entity such as `rtl::const_method` for type-erased invocations. -The same `rtl::method` is used for both `const` and `mutable` member functions. +There is no separate callable entity such as `rtl::const_method` for type-erased invocation of `const`-qualified member function overloads. +The same `rtl::method` is used for both `const` and non-`const` member functions. To invoke a `const` member function, the target must be passed as a `const` reference: ```c++ auto [err, ret] = getName(std::cref(personObj))(); ``` -This call will succeed only if `Person::getName()` is a `const` member function. If no matching `const` overload exists, the call returns `rtl::error::ConstOverloadMissing` and if only a `mutable` overload exists and a `const` target is provided, the call returns `rtl::error::NonConstOverloadMissing`. +This call will succeed only if a `const`-qualified overload of `Person::getName()` exists. If it does not, the call returns `rtl::error::ConstOverloadMissing`. If only a `const` overload exists and a non-`const` target is provided, the call returns `rtl::error::NonConstOverloadMissing`. -When both `const` and `mutable` overloads are registered, the following rules apply: +When both `const` and non-`const` overloads are registered, the following rules apply: -* Passing a `mutable` target binds to the `mutable` overload. +* Passing a non-`const` target binds to the non-`const` overload. * Passing a `const` target (`std::cref(personObj)`) binds to the `const` overload. 👉 Note -> *RTL does not perform automatic `const`/`mutable` overload resolution. The intended overload must be selected explicitly by the user through the target’s `const` qualification.* +> *RTL does not perform automatic `const`/non-`const` overload resolution. The intended overload must be selected explicitly by the user through the target’s `const` qualification.* As with `rtl::function`, validation of the materialized `rtl::method` is optional in this case. Calling it without validation does not result in undefined behavior; instead, an appropriate `rtl::error` is returned. If the callable was not successfully materialized, invoking it returns the same error as `get_init_err()` on the callable, typically `rtl::error::SignatureMismatch`. From 0110db4d0e1353c3ec171f29c9402d455f92e64b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 18:18:10 +0530 Subject: [PATCH 076/102] doc: corrections. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 224ae1aa..1f019c5d 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -118,7 +118,7 @@ rtl::type().member().method<...>("method-name").build(&T::f); * `.method<...>(..)`: registers a non-const member function. The template parameter `<..signature..>` disambiguates overloads. * Variants exist for const (`.methodConst`) and static (`.methodStatic`) methods. -👉 Mental Note +👉 Note > *The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.* With these constructs – namespaces, non-member functions, overloads, records `(pod/class/struct)`, constructors, and methods – you now have the full registration syntax for RTL. Together, they allow you to build a complete reflective model of your C++ code. @@ -351,9 +351,9 @@ In this case, the `.returnT()` template parameter can be omitted, and `rtl::Retu rtl::function cToStr = cxx::mirror().getFunction("complexToStr") ->argsT() .returnT(); -auto [err, robj] = cToStr(61, 35); -if(err != rtl::error::None) { - // Call succeeded, returned std::string inside 'robj' (type: rtl::RObject) +auto [err, ret] = cToStr(61, 35); +if(err != rtl::error::None && ret.canViewAs()) { + std::string resultStr = ret.view()->get(); // Safely view the returned std::string. } else { std::cerr << rtl::to_string(err); @@ -470,7 +470,7 @@ Along with the target type, the return type can also be erased. Leaving the `.re rtl::method getName = oGetName->targetT().argsT().returnT(); auto [err0, ret] = getName(personObj)(); // Invoke and receive return as rtl::RObject. -if (err0 == rtl::error::None && ret.canViewAs()) { +if (err0 == rtl::error::None && ret.canViewAs()) { std::string nameStr = ret.view()->get(); // Safely view the returned std::string. } ``` @@ -520,6 +520,7 @@ If materialization succeeds but the call fails, possible error values include: * `rtl::error::NonConstOverloadMissing` * `rtl::error::RefBindingMismatch` * `rtl::error::ExplicitRefBindingRequired` +* `rtl::error::EmptyRObject` --- From 442c53c1f2925c8581d9125f47b0f70ba7bddc36 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 20:19:23 +0530 Subject: [PATCH 077/102] doc: corrections. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 57 ++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 1f019c5d..c0675d8d 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -500,7 +500,9 @@ To invoke a `const` member function, the target must be passed as a `const` refe ```c++ auto [err, ret] = getName(std::cref(personObj))(); ``` -This call will succeed only if a `const`-qualified overload of `Person::getName()` exists. If it does not, the call returns `rtl::error::ConstOverloadMissing`. If only a `const` overload exists and a non-`const` target is provided, the call returns `rtl::error::NonConstOverloadMissing`. +This call will succeed only if a `const`-qualified overload of `Person::getName()` exists. If it does not, the call returns `rtl::error::ConstOverloadMissing`. + +If only a `const` overload exists and a non-`const` target is provided, the call returns `rtl::error::NonConstOverloadMissing`. When both `const` and non-`const` overloads are registered, the following rules apply: @@ -526,15 +528,7 @@ If materialization succeeds but the call fails, possible error values include: ## Reference Binding and Overload Resolution -RTL applies a safety-oriented overload resolution strategy when invoking reflected functions and methods. -The goal is to avoid implicit mutation of user data and require explicit intent whenever a call may modify its arguments. - -This reference-based overload resolution is applied only to type-erased or partially type-erased callables. -Fully type-aware callables are materialized by explicitly specifying the target, argument, and return types at compile time, so no ambiguity or safety-based resolution is required. - -#### Implicit Resolution Rules: - -When multiple reference based overloads of same function signature exists, +When multiple reference-based overloads of the same function signature exist, for example: ```c++ std::string reverse(std::string); // (1) by value @@ -543,6 +537,49 @@ std::string reverse(const std::string&); // (3) const lvalue ref std::string reverse(std::string&&); // (4) rvalue ref ``` + +In standard C++, invoking `reverse` by name with such an overload set results in a compile-time ambiguity error. +This occurs because the pass-by-value overload conflicts with every reference-based overload, and overload resolution cannot establish a single best match. + +If these functions are not invoked by name, but instead referenced through explicitly typed function-pointers, each overload can be selected unambiguously: + +```c++ +auto fptr0 = static_cast(reverseString); +auto fptr1 = static_cast(reverseString); +auto fptr3 = static_cast(reverseString); +auto fptr2 = static_cast(reverseString); +``` +Here, the explicit function-pointer type fully specifies the intended overload, bypassing overload resolution ambiguity. +Since RTL requires only a distinct function-pointer to register a function or method, all of the above overloads can be registered without ambiguity. + +During invocation, where the compiler would reject a direct call due to pass-by-value overload ambiguity, RTL instead deterministically defaults to the pass-by-value overload unless a more specific intent is explicitly expressed by the user. +Meaning, if all such overloads are registered and an `rtl::function` is materialized and invoked, the call will unambiguously bind to the pass-by-value overload. + +This behavior follows directly from the fact that RTL invocation is equivalent to calling through a fully specified function pointer, which is explicitly permitted by standard C++. + +#### Perferct Forwarding: + +Each overload shown above can be invoked by explicitly providing the intended call signature as a template parameter to `bind<>()`. RTL then perfect-forwards the arguments to the selected overload: + +```c++ +rtl::function reverseStr = cxx::mirror().getFunction("reverseString") + .argsT().returnT(); + +auto [err0, ret0] = reverseStr("Hello"); // calls by-value overload (1) +auto [err1, ret1] = reverseStr.bind()("Hello"); // calls lvalue-ref overload (2) +auto [err2, ret2] = reverseStr.bind()("Hello"); // calls const lvalue-ref overload (3) +auto [err3, ret3] = reverseStr.bind()("Hello"); // calls rvalue-ref overload (4) +``` + +If no pass-by-value overload is registered, explicit binding is required to invoke the desired overload. Otherwise, the call results in `rtl::error::RefBindingMismatch`. + + + + + + + + While calling such functions with any type erased callables, RTL prefers non-mutating call paths by default: | Available Overloads | Call binds to | From f5cf78b436b76dcb7a7c0c8f60eb42664de7adf0 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 20:58:36 +0530 Subject: [PATCH 078/102] doc: ref-binding done. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 105 +++++++------------------------ 1 file changed, 22 insertions(+), 83 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index c0675d8d..0c898664 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -552,8 +552,9 @@ auto fptr2 = static_cast(reverseString); Here, the explicit function-pointer type fully specifies the intended overload, bypassing overload resolution ambiguity. Since RTL requires only a distinct function-pointer to register a function or method, all of the above overloads can be registered without ambiguity. -During invocation, where the compiler would reject a direct call due to pass-by-value overload ambiguity, RTL instead deterministically defaults to the pass-by-value overload unless a more specific intent is explicitly expressed by the user. -Meaning, if all such overloads are registered and an `rtl::function` is materialized and invoked, the call will unambiguously bind to the pass-by-value overload. +During invocation, where the compiler would reject a direct call due to pass-by-value overload ambiguity, RTL instead deterministically defaults to the **pass-by-value** overload unless a more specific intent is explicitly expressed by the user. + +Meaning, if all such overloads are registered and an `rtl::function` is materialized and invoked, the call will unambiguously bind to the **pass-by-value** overload. This behavior follows directly from the fact that RTL invocation is equivalent to calling through a fully specified function pointer, which is explicitly permitted by standard C++. @@ -571,100 +572,38 @@ auto [err2, ret2] = reverseStr.bind()("Hello"); // calls con auto [err3, ret3] = reverseStr.bind()("Hello"); // calls rvalue-ref overload (4) ``` -If no pass-by-value overload is registered, explicit binding is required to invoke the desired overload. Otherwise, the call results in `rtl::error::RefBindingMismatch`. - - - - - - - - -While calling such functions with any type erased callables, RTL prefers non-mutating call paths by default: +If no pass-by-value overload is registered, explicit binding is required to invoke the desired overload. Otherwise, the call results in `rtl::error::ExplicitRefBindingRequired`. -| Available Overloads | Call binds to | -| ------------------- | ------------------- | -| `T` + `const T&` | `T` (by value) | -| `T` + `T&` | `T` (by value) | -| `T` only | `T` | -| `const T&` only | `const T&` | +Now consider a case where only overloads (2) and (3) are registered: -By-value and `const` reference bindings cannot mutate the caller’s object, so they are considered safe and are selected implicitly. - -#### Explicit Binding for Mutating Overloads: - -Overloads that may mutate the caller’s data require explicit user intent: - -* Non-const lvalue reference (`T&`) -* Rvalue reference (`T&&`) - -To invoke these overloads, the user must explicitly specify the reference type using `.bind<...>()`: - -```cpp -rtl::function reverseString = cxx::mirror().getFunction("reverse") - .argsT().returnT(); -// explicitly call the lvalue ref overload. -auto [err0, ret0] = reverseString.bind()(str); -// explicitly call the rvalue ref overload. -auto [err1, ret1] = reverseString.bind()(std::string(str)); +```c++ +std::string reverse(std::string&); // (2) +std::string reverse(const std::string&); // (3) ``` -If a mutating overload exists but no explicit binding is provided, RTL returns `rtl::error::ExplicitRefBindingRequired`. - -#### Ambiguous Reference Overloads: +Both overloads can be invoked explicitly using `bind<>()`. However, if the user attempts to bind a signature that has not been registered, for example: -If both `T&` and `const T&` overloads exist, RTL treats the situation as ambiguous and refuses to guess the user’s intent regarding mutability. - -In such cases, implicit invocation is rejected and explicit selection is required: - -```cpp -reverseString.bind()(str); // Allows mutation -reverseString.bind()(str); // Disallows mutation +```c++ +auto [err, ret] = reverseStr.bind()("Hello"); ``` -Without explicit binding, RTL returns `rtl::error::ExplicitRefBindingRequired` - -#### Const-Reference Only Overloads: +the invocation fails with `rtl::error::RefBindingMismatch`, as no rvalue-reference overload exists in the registered overload set. Now consider the case where only overload (3) is registered: -If a function provides only a `const T&` overload, RTL resolves the call implicitly. Since `const` references cannot mutate the caller, no explicit binding is required. - -#### Rvalue Reference Overloads: - -Overloads taking `T&&` always require explicit binding: - -```cpp -reverseString.bind()(std::string(str)); +```c++ +std::string reverse(const std::string&); // (3) ``` -Without explicit binding, RTL returns `rtl::error::ExplicitRefBindingRequired` - -#### Binding Mismatches: - -If the explicitly bound reference type does not match the function signature, RTL returns`rtl::error::RefBindingMismatch`. This indicates a hard type mismatch rather than an ambiguity. - -#### Design Rationale: -RTL does not follow C++ overload resolution rules directly. Instead, it enforces a reflection-specific policy: +In this case, no explicit binding is required, as there is no overload ambiguity and the function guarantees that the argument will not be modified. If only overload (2) or only overload (4) is registered: -* Prefer non-mutating call paths -* Avoid implicit mutation -* Require explicit intent for mutation -* Reject ambiguous reference overloads -* Never guess user intent - -This ensures that reflective calls remain predictable, safe, and explicit in their side effects. - -#### Summary +```c++ +std::string reverse(std::string&); // (2) +std::string reverse(std::string&&); // (4) +``` -| Situation | RTL Behavior | -| ------------------------ | --------------------------- | -| Safe overload exists | Implicitly selected | -| Mutating overload exists | Requires explicit binding | -| `T&` + `const T&` | Explicit selection required | -| Only `const T&` | Implicitly allowed | -| `T&&` overload | Explicit binding required | -| Wrong binding | `RefBindingMismatch` | +explicit binding is required, even when these overloads exist in isolation. This is because both signatures permit mutation of the argument, and RTL requires such intent to be expressed explicitly by the user. -This policy guarantees that reflective invocation never mutates user data without explicit consent. +👉 Rationale +> *RTL’s philosophy is to make mutating calls loud and explicit, as reflection inherently hides type information.* --- From 0400ef949770b82f72ccc71d0330d8deefe0696d Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 22:20:51 +0530 Subject: [PATCH 079/102] doc: corrections. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 0c898664..ecb9cfb5 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -14,7 +14,7 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s - [`rtl::function` – Return Erased](#rtlfunction--return-erased) - [`rtl::method` – Type Aware](#rtlmethod--type-aware) - [`rtl::method` – Type Erased](#rtlmethod--type-erased) -6. [Reference Binding and Overload Resolution](#reference-binding-and-overload-resolution) +6. [Perferct Forwarding](#perferct-forwarding) --- @@ -526,7 +526,7 @@ If materialization succeeds but the call fails, possible error values include: --- -## Reference Binding and Overload Resolution +## Perferct Forwarding When multiple reference-based overloads of the same function signature exist, for example: @@ -558,7 +558,7 @@ Meaning, if all such overloads are registered and an `rtl::function()`. RTL then perfect-forwards the arguments to the selected overload: From 5b2c0a067b96877c6e8ce214c9789e3c065462bf Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 22:48:53 +0530 Subject: [PATCH 080/102] doc: ploishing --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 37 +++++++++++++++++--------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index ecb9cfb5..dfd81dc6 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -20,38 +20,41 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s ## Building the Mirror -To set up a runtime reflection system using RTL, a `rtl::CxxMirror` instance is created to aggregate references to the registered entities and provide access to them at runtime. -The `rtl::CxxMirror` is constructed using a collection of metadata descriptors produced by `rtl::type()...build();` registration expressions. +`rtl::CxxMirror` is the runtime entry point for querying reflection metadata registered with RTL. +It aggregates references to metadata descriptors produced by `rtl::type()...build()` registration expressions and exposes them through a unified lookup interface. ```cpp auto cxx_mirror = rtl::CxxMirror({ - // registration expressions, comma separated + // registration expressions }); ``` -Each registration expression contributes references to the underlying metadata objects, which are created by RTL only if they do not already exist. -`rtl::CxxMirror` does not own or duplicate this metadata; it encapsulates references to it and acts as a lightweight access interface. +Each registration expression contributes references to metadata objects that are lazily created on first use. +`rtl::CxxMirror` **does not own** this metadata and never duplicates it; it merely provides structured access to already-registered entities. -Through the mirror, all registered types, functions, and methods can be queried, inspected, and instantiated at runtime. The mirror serves as a single entry point for reflection operations without introducing centralized global state. +Through the mirror, all registered types, functions, and methods can be queried, inspected, and materialized at runtime. The mirror itself is a lightweight facade and does not introduce centralized global state. -#### Managing `rtl::CxxMirror` +### Managing `rtl::CxxMirror` -* **Dispensable by design** – `rtl::CxxMirror` carries no hidden global state. You may define a single central mirror, create multiple mirrors in different scopes, or rebuild mirrors on demand. RTL imposes no restrictions on how its lifetime is managed. +* **No hidden global state** + `rtl::CxxMirror` is dispensable by design. You may use a single global mirror, multiple mirrors, or construct mirrors on demand. All mirrors reference the same underlying metadata cache. -* **Duplicate registration is harmless** – Identical registrations always resolve to the same metadata. If a canonical function-pointer is already registered, it is not inserted again; subsequent registrations simply reference the existing entry. +* **Duplicate registration is benign** + Re-registering the same function pointer or type is safe. If matching metadata already exists, RTL reuses it; no duplicate entries are created. -* **Thread-safety guaranteed by RTL** – Regardless of how mirrors are managed (singleton, multiple, or transient), RTL ensures synchronized, race-free registration and access threads. +* **Thread-safe by construction** + Metadata registration and access are internally synchronized. Thread safety is guaranteed regardless of how many mirrors exist or where they are constructed. -* **Registration overhead is deliberate** – Each registration incurs a small, one-time cost in memory and initialization time: +* **Registration cost is one-time** + Each registration performs: - * A lock is acquired on the metadata cache. - * Existing entries are checked for a function-pointer. - * If no match is found, a new entry is inserted. + * a synchronized lookup in the metadata cache + * conditional insertion if no match exists - This ensures thread safety and prevents redundant metadata. While negligible for typical usage, the cost can accumulate if registrations are repeatedly performed in hot paths or tight loops. + This cost is incurred only during registration and is negligible for normal initialization paths. Repeated registration in hot paths should be avoided. 👉 Bottom Line -> *Manage `rtl::CxxMirror` according to your design needs– singleton, multiple, or transient. Registration involves a lock and a lookup, but the cost is incurred only during initialization and remains negligible for normal usage.* +> *`rtl::CxxMirror` is a lightweight, non-owning access layer over RTL’s metadata.* --- @@ -526,7 +529,7 @@ If materialization succeeds but the call fails, possible error values include: --- -## Perferct Forwarding +## Perfect Forwarding When multiple reference-based overloads of the same function signature exist, for example: From 5eaab586e536fbbadec83355bb3d2075d4e63819 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Fri, 23 Jan 2026 23:16:42 +0530 Subject: [PATCH 081/102] doc: rtl::errors --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 37 ++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index dfd81dc6..48ec9388 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -15,13 +15,14 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s - [`rtl::method` – Type Aware](#rtlmethod--type-aware) - [`rtl::method` – Type Erased](#rtlmethod--type-erased) 6. [Perferct Forwarding](#perferct-forwarding) +7. [Error Taxonomy](#error-taxonomy) --- ## Building the Mirror `rtl::CxxMirror` is the runtime entry point for querying reflection metadata registered with RTL. -It aggregates references to metadata descriptors produced by `rtl::type()...build()` registration expressions and exposes them through a unified lookup interface. +It aggregates references to metadata descriptors produced by `rtl::type()...build();` registration expressions and exposes them through a unified lookup interface. ```cpp auto cxx_mirror = rtl::CxxMirror({ @@ -34,18 +35,18 @@ Each registration expression contributes references to metadata objects that are Through the mirror, all registered types, functions, and methods can be queried, inspected, and materialized at runtime. The mirror itself is a lightweight facade and does not introduce centralized global state. -### Managing `rtl::CxxMirror` +#### Managing `rtl::CxxMirror` -* **No hidden global state** +* **No hidden global state** – `rtl::CxxMirror` is dispensable by design. You may use a single global mirror, multiple mirrors, or construct mirrors on demand. All mirrors reference the same underlying metadata cache. -* **Duplicate registration is benign** +* **Duplicate registration is benign** – Re-registering the same function pointer or type is safe. If matching metadata already exists, RTL reuses it; no duplicate entries are created. -* **Thread-safe by construction** +* **Thread-safe by construction** – Metadata registration and access are internally synchronized. Thread safety is guaranteed regardless of how many mirrors exist or where they are constructed. -* **Registration cost is one-time** +* **Registration cost is one-time** – Each registration performs: * a synchronized lookup in the metadata cache @@ -54,7 +55,7 @@ Through the mirror, all registered types, functions, and methods can be queried, This cost is incurred only during registration and is negligible for normal initialization paths. Repeated registration in hot paths should be avoided. 👉 Bottom Line -> *`rtl::CxxMirror` is a lightweight, non-owning access layer over RTL’s metadata.* +> *`rtl::CxxMirror` is a lightweight, non-owning access layer over RTL’s metadata. Its lifetime and multiplicity are entirely user-controlled, and its overhead is limited to initialization-time lookups.* --- @@ -610,4 +611,26 @@ explicit binding is required, even when these overloads exist in isolation. This --- +## Error Taxonomy + +The table below lists RTL errors with brief, intent-focused descriptions, providing a direct mapping from failure conditions to their semantic meaning. + +| Error | semantic meaning | +| ------------------------------ | ------------------------------------------------------------------------------- | +| `None` | Operation completed successfully; no error occurred. | +| `EmptyRObject` | The `RObject` is empty, typically due to a move or invalidation. | +| `InvalidCaller` | The callable was never successfully materialized or is otherwise invalid. | +| `SignatureMismatch` | No registered overload matches the requested call signature. | +| `TargetTypeMismatch` | The bound target object type is incompatible with the method’s expected target. | +| `ReturnTypeMismatch` | The specified return type does not match the function’s actual return type. | +| `RefBindingMismatch` | Reference qualifiers of the arguments do not match any registered overload. | +| `ExplicitRefBindingRequired` | Overload set allows mutation; binding intent must be stated explicitly. | +| `InvalidNonStaticMethodCaller` | A non-static method was invoked without providing a valid target object. | +| `ConstOverloadMissing` | A const-qualified overload does not exist for the given invocation. | +| `NonConstOverloadMissing` | A non-const overload does not exist as explicitly requested. | +| `InvalidCallOnConstTarget` | A non-const method was invoked on an object reflecting const state. | +| `TypeNotCopyConstructible` | The reflected type cannot be copy-constructed due to access or deletion. | +| `TypeNotDefaultConstructible` | The reflected type cannot be default-constructed. | + +--- ***More to come...*** \ No newline at end of file From 15da0529a4f10cdb8861f23e7221e7b4a15bb8a7 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Fri, 23 Jan 2026 23:55:45 +0530 Subject: [PATCH 082/102] Update RTL_SYNTAX_AND_SEMANTICS.md --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 48ec9388..e0c0c41d 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -14,7 +14,7 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s - [`rtl::function` – Return Erased](#rtlfunction--return-erased) - [`rtl::method` – Type Aware](#rtlmethod--type-aware) - [`rtl::method` – Type Erased](#rtlmethod--type-erased) -6. [Perferct Forwarding](#perferct-forwarding) +6. [Perfect Forwarding](#perfect-forwarding) 7. [Error Taxonomy](#error-taxonomy) --- @@ -633,4 +633,4 @@ The table below lists RTL errors with brief, intent-focused descriptions, provid | `TypeNotDefaultConstructible` | The reflected type cannot be default-constructed. | --- -***More to come...*** \ No newline at end of file +***More to come...*** From 2386223208abd1a744672a42298f1624bf461c5c Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sat, 24 Jan 2026 00:29:24 +0530 Subject: [PATCH 083/102] Update RTL_SYNTAX_AND_SEMANTICS.md --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index e0c0c41d..7006dd1e 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -125,8 +125,6 @@ rtl::type().member().method<...>("method-name").build(&T::f); 👉 Note > *The `function<..signature..>` and `method<..signature..>` template parameters are primarily for overload resolution. They tell RTL exactly which overload of a function or method you mean to register.* -With these constructs – namespaces, non-member functions, overloads, records `(pod/class/struct)`, constructors, and methods – you now have the full registration syntax for RTL. Together, they allow you to build a complete reflective model of your C++ code. - --- ## Querying the Metadata @@ -560,7 +558,7 @@ During invocation, where the compiler would reject a direct call due to pass-by- Meaning, if all such overloads are registered and an `rtl::function` is materialized and invoked, the call will unambiguously bind to the **pass-by-value** overload. -This behavior follows directly from the fact that RTL invocation is equivalent to calling through a fully specified function pointer, which is explicitly permitted by standard C++. +This behavior follows directly from the fact that RTL invocation is equivalent to calling through a fully specified function-pointer, which is explicitly permitted by standard C++. #### Reference Binding: From 44d2e41a503cdec0f6d93964162fb9c660640e7b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 11:55:16 +0530 Subject: [PATCH 084/102] docs: rtl::view --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 88 ++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 7006dd1e..9911e2de 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -11,7 +11,7 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s 5. [Reflective Invocations with RTL](#reflective-invocations-with-rtl) - [`rtl::constructor`](#rtlconstructor) - [`rtl::function` – Type Aware](#rtlfunction--type-aware) - - [`rtl::function` – Return Erased](#rtlfunction--return-erased) + - [`rtl::function` – Type Erased](#rtlfunction--type-erased) - [`rtl::method` – Type Aware](#rtlmethod--type-aware) - [`rtl::method` – Type Erased](#rtlmethod--type-erased) 6. [Perfect Forwarding](#perfect-forwarding) @@ -204,7 +204,7 @@ When working with `rtl::RObject`, the following interfaces provide safe access t 👉 Tip -> *Use `canViewAs()` for a lightweight boolean check when branching, and `view()` when you need to access the value.* +> *Use `.canViewAs()` for a lightweight boolean check when branching, and `.view()` when you need to access the value.* ### Move Semantics with `rtl::RObject` @@ -266,6 +266,86 @@ In both cases, the source object is invalidated and ownership remains well-defin --- +## The `rtl::view` + +`rtl::view` is a lightweight, immutable handle that provides safe, read-only access to a value stored inside an `rtl::RObject`. + +It exists to bridge the gap between: + +* type-erased storage (`rtl::RObject`), and +* typed access (`const T&`). + +A `rtl::view` never exposes ownership. It only exposes **observation**. + +#### Properties: + +* **Read-only** – + A `rtl::view` only provides access as `const T&`. + +* **Non-owning abstraction** – + Whether the underlying value is owned or referenced is intentionally hidden. + +* **Non-copyable and non-movable** – + A `rtl::view` cannot be copied or moved. It must be consumed immediately. + +* **Lifetime-bound** – + A `rtl::view` is only valid as long as the originating `rtl::RObject` remains alive. + Using a `rtl::view` after the `rtl::RObject` is destroyed results in undefined behavior. + +#### Access Pattern: + +```cpp +auto view = robj.view(); +if (view) { + const T& value = view->get(); +} +``` + +This contract is uniform across all reflected types, including PODs, user-defined types & `std` wrappers and smart pointers. + +👉 Ongoing +> *RTL aims to support seamless and transparent access to all `std` wrappers (like `std::optional`, `std::variant`, `std::weak_ptr` and so on), with their proper defined semantics. Currently it is done and tested for `std::shared_ptr` & `std::unique_ptr`. + +### Smart Pointer Semantics with `rtl::view` + +RTL treats smart pointers as **first-class reflected values** while preserving their native ownership rules. +No implicit deep copies are ever performed. +The behavior differs intentionally between `std::shared_ptr` and `std::unique_ptr`. + +#### `std::shared_ptr`: + +When an `rtl::RObject` reflects a `std::shared_ptr`, it can be viewed either as `T` directly or as `std::shared_ptr`. + +While viewing directly as `T`, a `const T&` access is provided. The user may either observe the value or create copies, depending on what liberties are provided by `T`’s copy semantics. + +```cpp +rtl::RObject robj = rtl::reflect(std::make_shared(20438)); // std::shared_ptr is on Stack. + +if (robj.canViewAs()) { // true + int viewCpy = robj.view(); // Creates a copy of int. + const int& viewCRef = robj.view(); // References the underlying value. +} +``` +The same object can also be accessed as `std::shared_ptr`, in which case native shared ownership semantics are preserved: + +```cpp +if (robj.canViewAs>()) { // true + auto view = robj.view>(); + { + const std::shared_ptr& sptrRef = view->get(); + bool hasSingleOwner = (sptrRef.use_count() == 1); // true + } { + std::shared_ptr sptrCopy = view->get(); + bool hasTwoOwners = (sptrCopy.use_count() == 2); // true + } +} +// After temporary copies go out of scope, ownership returns to robj alone. +bool backToSingleOwner = (view->get().use_count() == 1); // true (robj is still alive) +``` +Accessing a reflected `std::shared_ptr` through `rtl::RObject` preserves native shared ownership semantics: observing it does not change the reference count, and copying it produces a shallow, ref-counted copy exactly as in normal C++. + +--- + ## Reflective Invocations with RTL `rtl::Method` and `rtl::Function` are metadata descriptors. Functions and methods cannot be directly called through these objects. Instead, RTL uses a materialization model to produce callable entities. @@ -274,7 +354,7 @@ Callable entities are materialized by explicitly specifying the argument and ret When full type information is provided, materialized callables compile to **direct function-pointer** calls with near-zero overhead. When type erasure is required (for example, for an unknown return or target type), invocation proceeds through a lightweight dispatch layer with performance **comparable** to `std::function`. -⚖️ The Idea +👉 The Idea > *In RTL, materialization makes the performance–flexibility trade-off explicit at each call site.* Every type-erased reflective call returns either `std::pair` or `std::pair>`. @@ -344,7 +424,7 @@ Possible error values include: * `rtl::error::SignatureMismatch` * `rtl::error::ReturnTypeMismatch` -### `rtl::function` – Return Erased +### `rtl::function` – Type Erased If the return type is not known at compile time, `rtl::Return` can be used as the return type. In this case, the `.returnT()` template parameter can be omitted, and `rtl::Return` will be selected automatically. From 80bf3cd7f2781556e4fe09ed8f4dc7611e5d9d74 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 12:01:52 +0530 Subject: [PATCH 085/102] docs: rtl::view --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 9911e2de..6cf09473 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -301,10 +301,10 @@ if (view) { } ``` -This contract is uniform across all reflected types, including PODs, user-defined types & `std` wrappers and smart pointers. +This contract is uniform across all reflected types, including PODs, user-defined types, and standard library wrappers and smart pointers. 👉 Ongoing -> *RTL aims to support seamless and transparent access to all `std` wrappers (like `std::optional`, `std::variant`, `std::weak_ptr` and so on), with their proper defined semantics. Currently it is done and tested for `std::shared_ptr` & `std::unique_ptr`. +> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated for `std::shared_ptr` and `std::unique_ptr`. ### Smart Pointer Semantics with `rtl::view` From 43647eeec639b0ce7c99c3873e9ded2aedb2542b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 12:12:07 +0530 Subject: [PATCH 086/102] docs: rtl::view corrections --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 39 +++++++++++--------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 6cf09473..24fc1edc 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -4,7 +4,7 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s ### 📖 Index -1. [Building the Mirror](#building-the-mirror) +1. [The `rtl::CxxMirror`](#the-rtlcxxmirror) 2. [Getting Started with Registration](#getting-started-with-registration) 3. [Querying the Metadata](#querying-the-metadata) 4. [The `rtl::RObject`](#the-rtlrobject) @@ -19,7 +19,7 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s --- -## Building the Mirror +## The `rtl::CxxMirror` `rtl::CxxMirror` is the runtime entry point for querying reflection metadata registered with RTL. It aggregates references to metadata descriptors produced by `rtl::type()...build();` registration expressions and exposes them through a unified lookup interface. @@ -37,18 +37,13 @@ Through the mirror, all registered types, functions, and methods can be queried, #### Managing `rtl::CxxMirror` -* **No hidden global state** – - `rtl::CxxMirror` is dispensable by design. You may use a single global mirror, multiple mirrors, or construct mirrors on demand. All mirrors reference the same underlying metadata cache. +* **No hidden global state** – `rtl::CxxMirror` is dispensable by design. You may use a single global mirror, multiple mirrors, or construct mirrors on demand. All mirrors reference the same underlying metadata cache. -* **Duplicate registration is benign** – - Re-registering the same function pointer or type is safe. If matching metadata already exists, RTL reuses it; no duplicate entries are created. +* **Duplicate registration is benign** – Re-registering the same function pointer or type is safe. If matching metadata already exists, RTL reuses it; no duplicate entries are created. -* **Thread-safe by construction** – - Metadata registration and access are internally synchronized. Thread safety is guaranteed regardless of how many mirrors exist or where they are constructed. - -* **Registration cost is one-time** – - Each registration performs: +* **Thread-safe by construction** – Metadata registration and access are internally synchronized. Thread safety is guaranteed regardless of how many mirrors exist or where they are constructed. +* **Registration cost is one-time** – Each registration performs: * a synchronized lookup in the metadata cache * conditional insertion if no match exists @@ -279,18 +274,10 @@ A `rtl::view` never exposes ownership. It only exposes **observation**. #### Properties: -* **Read-only** – - A `rtl::view` only provides access as `const T&`. - -* **Non-owning abstraction** – - Whether the underlying value is owned or referenced is intentionally hidden. - -* **Non-copyable and non-movable** – - A `rtl::view` cannot be copied or moved. It must be consumed immediately. - -* **Lifetime-bound** – - A `rtl::view` is only valid as long as the originating `rtl::RObject` remains alive. - Using a `rtl::view` after the `rtl::RObject` is destroyed results in undefined behavior. +* **Read-only** – A `rtl::view` only provides access as `const T&`. +* **Non-owning abstraction** – Whether the underlying value is owned or referenced is intentionally hidden. +* **Non-copyable and non-movable** – A `rtl::view` cannot be copied or moved. It must be consumed immediately. +* **Lifetime-bound** – A `rtl::view` is only valid as long as the originating `rtl::RObject` remains alive. Using a `rtl::view` after the `rtl::RObject` is destroyed results in undefined behavior. #### Access Pattern: @@ -304,7 +291,7 @@ if (view) { This contract is uniform across all reflected types, including PODs, user-defined types, and standard library wrappers and smart pointers. 👉 Ongoing -> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated for `std::shared_ptr` and `std::unique_ptr`. +> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated for `std::shared_ptr` and `std::unique_ptr`.* ### Smart Pointer Semantics with `rtl::view` @@ -335,8 +322,8 @@ if (robj.canViewAs>()) { // true const std::shared_ptr& sptrRef = view->get(); bool hasSingleOwner = (sptrRef.use_count() == 1); // true } { - std::shared_ptr sptrCopy = view->get(); - bool hasTwoOwners = (sptrCopy.use_count() == 2); // true + std::shared_ptr sptrCpy = view->get(); + bool hasTwoOwners = (sptrCpy.use_count() == 2); // true } } // After temporary copies go out of scope, ownership returns to robj alone. From 6fe7b59d6ed1278df31bf36c2054e329ec4d1384 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 13:06:41 +0530 Subject: [PATCH 087/102] docs: rtl::view corrections --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 24fc1edc..a8f09569 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -8,14 +8,15 @@ RTL makes C++ reflection feel like a natural extension of the language. Let’s 2. [Getting Started with Registration](#getting-started-with-registration) 3. [Querying the Metadata](#querying-the-metadata) 4. [The `rtl::RObject`](#the-rtlrobject) -5. [Reflective Invocations with RTL](#reflective-invocations-with-rtl) +5. [The `rtl::view`](#the-rtlview) +6. [Reflective Invocations with RTL](#reflective-invocations-with-rtl) - [`rtl::constructor`](#rtlconstructor) - [`rtl::function` – Type Aware](#rtlfunction--type-aware) - [`rtl::function` – Type Erased](#rtlfunction--type-erased) - [`rtl::method` – Type Aware](#rtlmethod--type-aware) - [`rtl::method` – Type Erased](#rtlmethod--type-erased) -6. [Perfect Forwarding](#perfect-forwarding) -7. [Error Taxonomy](#error-taxonomy) +7. [Perfect Forwarding](#perfect-forwarding) +8. [Error Taxonomy](#error-taxonomy) --- @@ -291,7 +292,7 @@ if (view) { This contract is uniform across all reflected types, including PODs, user-defined types, and standard library wrappers and smart pointers. 👉 Ongoing -> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated for `std::shared_ptr` and `std::unique_ptr`.* +> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated for `std::shared_ptr` and `std::unique_ptr` only.* ### Smart Pointer Semantics with `rtl::view` From f02593dd852de7d06e90dc4fe07d8874e748ee5c Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 16:00:10 +0530 Subject: [PATCH 088/102] docs: rtl::view update. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 34 +++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index a8f09569..0369181f 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -277,7 +277,7 @@ A `rtl::view` never exposes ownership. It only exposes **observation**. * **Read-only** – A `rtl::view` only provides access as `const T&`. * **Non-owning abstraction** – Whether the underlying value is owned or referenced is intentionally hidden. -* **Non-copyable and non-movable** – A `rtl::view` cannot be copied or moved. It must be consumed immediately. +* **Non-copyable and non-movable** – A `rtl::view` cannot be copied or moved and must be consumed immediately. * **Lifetime-bound** – A `rtl::view` is only valid as long as the originating `rtl::RObject` remains alive. Using a `rtl::view` after the `rtl::RObject` is destroyed results in undefined behavior. #### Access Pattern: @@ -292,15 +292,15 @@ if (view) { This contract is uniform across all reflected types, including PODs, user-defined types, and standard library wrappers and smart pointers. 👉 Ongoing -> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated for `std::shared_ptr` and `std::unique_ptr` only.* + +> *RTL is designed to support seamless and transparent access to standard library wrapper types (such as `std::optional`, `std::variant`, `std::weak_ptr`, and others) while preserving their native semantics. At present, this behavior is fully implemented and validated only for `std::shared_ptr` and `std::unique_ptr`.* ### Smart Pointer Semantics with `rtl::view` RTL treats smart pointers as **first-class reflected values** while preserving their native ownership rules. No implicit deep copies are ever performed. -The behavior differs intentionally between `std::shared_ptr` and `std::unique_ptr`. -#### `std::shared_ptr`: +#### `std::shared_ptr`: When an `rtl::RObject` reflects a `std::shared_ptr`, it can be viewed either as `T` directly or as `std::shared_ptr`. @@ -314,23 +314,43 @@ if (robj.canViewAs()) { // true const int& viewCRef = robj.view(); // References the underlying value. } ``` + The same object can also be accessed as `std::shared_ptr`, in which case native shared ownership semantics are preserved: ```cpp if (robj.canViewAs>()) { // true auto view = robj.view>(); { - const std::shared_ptr& sptrRef = view->get(); + const std::shared_ptr& sptrRef = view->get(); bool hasSingleOwner = (sptrRef.use_count() == 1); // true } { - std::shared_ptr sptrCpy = view->get(); + std::shared_ptr sptrCpy = view->get(); bool hasTwoOwners = (sptrCpy.use_count() == 2); // true } } // After temporary copies go out of scope, ownership returns to robj alone. bool backToSingleOwner = (view->get().use_count() == 1); // true (robj is still alive) ``` -Accessing a reflected `std::shared_ptr` through `rtl::RObject` preserves native shared ownership semantics: observing it does not change the reference count, and copying it produces a shallow, ref-counted copy exactly as in normal C++. + +Accessing a reflected `std::shared_ptr` through `rtl::RObject` preserves native shared ownership semantics: observing it does not change the reference count, and copying it produces a shallow, ref-counted copy exactly as in normal C++. + +#### `std::unique_ptr`: + +The behavior of `std::unique_ptr` differs from `std::shared_ptr` only in its ownership model. + +When an `rtl::RObject` reflects a `std::unique_ptr`, it can likewise be viewed as `T` directly or as `std::unique_ptr`. Viewing it as `T` provides the same `const T&` access as described earlier, and the user may observe or copy the value according to `T`’s copy semantics. + +However, unlike `std::shared_ptr`, a reflected `std::unique_ptr` does **not** permit ownership transfer through a view: + +* Access is always provided as `const std::unique_ptr&`. +* No move operation is possible through `rtl::view`. +* Ownership remains exclusively with the `rtl::RObject`. +* The pointee can still be accessed safely via `view()`. + +In other words, within RTL: + +* `std::shared_ptr` exposes shared-ownership semantics because it is copy-constructible and reference-counted. +* `std::unique_ptr` is treated as an exclusive-ownership wrapper whose lifetime is managed entirely by rtl::RObject, because it is not copy-constructible and represents unique ownership. --- From 517dd14892724071f7a515d4b263d7fd9b674d3b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 16:47:20 +0530 Subject: [PATCH 089/102] docs: rtl::view update. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 0369181f..d9bf7ec1 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -342,6 +342,19 @@ When an `rtl::RObject` reflects a `std::unique_ptr`, it can likewise be viewe However, unlike `std::shared_ptr`, a reflected `std::unique_ptr` does **not** permit ownership transfer through a view: +```c++ + +// This is NOT possible (unique_ptr is move-only) +auto view = robj.view>(); +std::unique_ptr uptrCpy = view->get(); // ERROR: cannot copy unique_ptr + +// But you CAN access the pointee +if (robj.canViewAs()) { + int value = robj.view()->get(); // Works! value = 42 +} + +``` + * Access is always provided as `const std::unique_ptr&`. * No move operation is possible through `rtl::view`. * Ownership remains exclusively with the `rtl::RObject`. From 3ca464a8429f8ca5ac1eab55a34f2571cd148f76 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 19:58:58 +0530 Subject: [PATCH 090/102] docs: correction. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index d9bf7ec1..56d01a02 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -327,9 +327,9 @@ if (robj.canViewAs>()) { // true std::shared_ptr sptrCpy = view->get(); bool hasTwoOwners = (sptrCpy.use_count() == 2); // true } + // After temporary copies go out of scope, ownership returns to robj alone. + bool backToSingleOwner = (view->get().use_count() == 1); // true (robj is still alive) } -// After temporary copies go out of scope, ownership returns to robj alone. -bool backToSingleOwner = (view->get().use_count() == 1); // true (robj is still alive) ``` Accessing a reflected `std::shared_ptr` through `rtl::RObject` preserves native shared ownership semantics: observing it does not change the reference count, and copying it produces a shallow, ref-counted copy exactly as in normal C++. From c324f97d90d143f6151dc5812493fec2d7f285bc Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 20:30:21 +0530 Subject: [PATCH 091/102] doc update. --- docs/RTL_SYNTAX_AND_SEMANTICS.md | 8 +- docs/WHY_CPP_REFLECTION_MATTERS.md | 133 ----------------------------- docs/flat-overhead-analysis.md | 75 ---------------- 3 files changed, 4 insertions(+), 212 deletions(-) delete mode 100644 docs/WHY_CPP_REFLECTION_MATTERS.md delete mode 100644 docs/flat-overhead-analysis.md diff --git a/docs/RTL_SYNTAX_AND_SEMANTICS.md b/docs/RTL_SYNTAX_AND_SEMANTICS.md index 56d01a02..3f16e07b 100644 --- a/docs/RTL_SYNTAX_AND_SEMANTICS.md +++ b/docs/RTL_SYNTAX_AND_SEMANTICS.md @@ -344,13 +344,13 @@ However, unlike `std::shared_ptr`, a reflected `std::unique_ptr` does **no ```c++ -// This is NOT possible (unique_ptr is move-only) +// This is NOT allowed, std::unique_ptr is move-only auto view = robj.view>(); std::unique_ptr uptrCpy = view->get(); // ERROR: cannot copy unique_ptr -// But you CAN access the pointee +// the pointee can be accessed if (robj.canViewAs()) { - int value = robj.view()->get(); // Works! value = 42 + int value = robj.view()->get(); // Creates a copy of int. } ``` @@ -363,7 +363,7 @@ if (robj.canViewAs()) { In other words, within RTL: * `std::shared_ptr` exposes shared-ownership semantics because it is copy-constructible and reference-counted. -* `std::unique_ptr` is treated as an exclusive-ownership wrapper whose lifetime is managed entirely by rtl::RObject, because it is not copy-constructible and represents unique ownership. +* `std::unique_ptr` is treated as an exclusive-ownership wrapper whose lifetime is managed entirely by `rtl::RObject`, because it is not copy-constructible and represents unique ownership. --- diff --git a/docs/WHY_CPP_REFLECTION_MATTERS.md b/docs/WHY_CPP_REFLECTION_MATTERS.md deleted file mode 100644 index 58d7a1b6..00000000 --- a/docs/WHY_CPP_REFLECTION_MATTERS.md +++ /dev/null @@ -1,133 +0,0 @@ -# 🎯 Why Runtime Reflection in C++ (with RTL) Matters - -> **Position**: Runtime reflection is not “anti‑C++.” It’s an opt‑in capability that, when scoped and engineered correctly, unlocks workflows that are painful or impossible with templates alone—without betraying C++’s zero‑cost ethos. RTL makes this practical, safe, and tooling‑friendly. - ---- - -C++ culture favors compile‑time solutions, but not all problems are compile‑time problems. Static metaprogramming has costs too: binary/code size, compile times, and readability. - -RTL’s design (⚡ macro‑free, 🧩 external registration, ⏳ lazy/immutable `CxxMirror`, 🛠️ error‑code surfaces, 🔒 const‑by‑default, ♻️ deterministic lifetimes) reduces the classic risks of runtime reflection while preserving type safety where it matters. - -The philosophy is simple: use reflection at the edges (tooling, glue, scripting, plugins, serialization) and keep hot code paths static. - ---- - -## 🚧 Why Some C++ Developers Say “No” - -1. **Zero‑cost ideology** – Fear of paying for metadata you don’t use. -2. **Static‑first mindset** – Preference for templates/constexpr over any runtime mechanism. -3. **ABI/portability concerns** – Lack of a stable C++ ABI across platforms/compilers. -4. **Safety/predictability worries** – Fear of “stringly‑typed” APIs, hidden costs, harder debugging. -5. **Cultural inertia** – The ecosystem grew up without runtime reflection. - -These instincts are valid—but not disqualifiers. Instead, they set requirements for a responsible design. - ---- - -## ✨ RTL’s Philosophical Response - -* **Opt‑in, pay‑as‑you‑go** – Metadata is externally defined and lazy‑loaded via an immutable `CxxMirror`. If you don’t access reflection, you don’t pay. -* **No hidden global state** – No static registries, macros, or preprocessor hacks. Developers control what’s exposed and when. -* **Type‑safety discipline** – - - * 🚫 Exception‑free surfaces (errors via codes). - * 🔒 Const‑by‑default to avoid accidental mutation. - * 🎯 Conservative parameter matching (safe widenings, string‑like conversions, smart‑pointer transparencies) with clear rules. -* **Deterministic lifetimes** – `RObject` is a type‑erased, lifetime‑aware handle. It preserves `Heap`/`Stack` ownership and never hides deep copies. -* **Tooling‑friendly split** – Metadata providers and runtime consumers are decoupled; the mirror is swappable per build/mode and load‑on‑touch. - -📌 **Bottom line:** RTL preserves the values of C++ (control, performance, explicitness) while offering runtime shape where it’s needed. - ---- - -## 🚀 What Becomes Possible (Parity With Java/C#‑style Workflows) - -1. **📦 Generic Serialization/Deserialization** – Walk members/methods at runtime to build serializers without hand‑rolled boilerplate. -2. **🐍 Scripting Bridges (Lua/Python/JS)** – Expose app objects dynamically to scripts; invoke methods by name with safe conversions. -3. **🖼️ Inspector UIs & Editors** – Auto‑generate property panels (Qt/ImGui) from metadata; bind widgets to fields. -4. **🔌 Plugin & Module Systems** – Load `.so`/`.dll`, query its `CxxMirror`, discover callable endpoints. -5. **🧪 Test Discovery & Orchestration** – Enumerate test functions by convention at runtime—no macro registries. -6. **📡 RPC/IPC & Data Pipelines** – Reflective marshalling, schema introspection, versioned message handling. -7. **⚙️ Live Tooling/Automation** – Logging, telemetry, app consoles, REPLs, hot‑reloadable metadata providers. - -💡 These are exactly why ecosystems like Java/C# leaned on reflection—and with RTL, C++ can enjoy the same benefits while keeping hot paths static and optimized. - ---- - -## 📝 Minimal, Concrete Patterns With RTL - -**Reflective Call (method invoke)** - -```c++ -const rtl::CxxMirror& m = MyReflection(); - -auto cls = m.record("engine::Audio"); -auto [err, inst] = cls->create(/* args */); // heap or stack as requested -auto setVolume = cls->getMethod("setVolume"); -auto [err, vol] = setVolume->bind(inst).call(0.75); // conservative conversions apply -``` - -**Serializer Sketch (pseudo‑code)** - -```c++ -json to_json(const rtl::RObject& obj) { - auto t = obj.record(); - json j; - for (auto& field : t.fields()) { // planned field/property reflection - j[field.name()] = to_json(obj.get(field)); - } - return j; -} -``` - -**Plugin Mirror Boundary** - -```c++ -extern "C" const rtl::CxxMirror& PluginReflection(); -// Host loads plugin, inspects its mirror, and queries callable endpoints. -``` - ---- - -## 🛡️ Performance & Safety Guardrails - -* Keep reflection at the boundaries: UI, scripting, serialization, plugins. -* Cache lookups: Resolve handles once, reuse them. -* Avoid string dispatch in hot loops. -* Prefer `rtl::view` for const refs instead of materializing copies. -* Benchmark reflective sections separately. -* Prototype with reflection → specialize hotspots with templates later. - ---- - -## ❓ Addressing Common Objections - -**“Zero‑cost means no runtime reflection.”** - -> Zero‑cost means no *mandatory* cost. With RTL’s lazy mirror and external registration, unused metadata is never touched. - -**“Just use templates.”** - -> Templates can’t solve runtime shape problems (dynamic plugins, scripts, external schemas). Reflection shifts cost only where runtime shape is unavoidable. - -**“Reflection is unsafe and stringly‑typed.”** - -> RTL APIs are explicit and exception‑free. Conversions are conservative, and lifetimes are deterministic. - -**“ABI will bite you.”** - -> RTL treats the mirror as the stable boundary. Metadata is authored explicitly—not guessed from compiler ABI. - -**“It will bloat my binary.”** - -> You register only what you expose. Metadata is lazy and link‑time selectable. You can strip it in production builds. - -**“What about fields/enums/inheritance?”** - -> They’re on the roadmap. Current function/constructor focus already unlocks major workflows; adoption can be incremental. - ---- - -## 🔚 Final Take - -*C++ can do runtime reflection responsibly. The choice is not “templates or chaos.” With RTL’s explicit, lazy, exception‑free design and deterministic lifetimes, you get the power of runtime shape when you want it, and zero cost when you don’t. That is the C++ way.* diff --git a/docs/flat-overhead-analysis.md b/docs/flat-overhead-analysis.md deleted file mode 100644 index 21690c7d..00000000 --- a/docs/flat-overhead-analysis.md +++ /dev/null @@ -1,75 +0,0 @@ -# RTL Reflection Call Overhead Analysis - -## Overview - -This document summarizes the flat overhead cost associated with using RTL's reflective call paths across all benchmarked call types. It categorizes overhead into **non-erased** and **erased** call paths and establishes upper and lower bounds observed across the entire test suite. - ---- - -## Non-Erased RTL Calls (Fast Path) - -### Summary - -Non-erased calls (`rtl::function` / `rtl::method`) exhibit near-zero overhead in all realistic workloads and only minimal overhead in microbenchmarks. - -### Overhead Range - -* **Best case (real workloads):** Effectively *0 ns* overhead. Measurements match direct calls within noise. -* **Worst case (scale = 0):** - - * set: ~+0.4 ns overhead - * get: ~+1.1 ns overhead - * Relative cost: ~1.6×–1.8× direct call cost in pure overhead tests. - -### Practical Interpretation - -Non-erased RTL calls are effectively *free* for practical purposes and safe even for ultra-hot loops. - ---- - -## Erased RTL Calls (Most Expensive Path) - -### Absolute Worst Case (All Benchmarks) - -The highest overhead observed occurs in fully erased `get` calls on trivial functions. - -* **Fully Erased get:** ~+15–16 ns overhead -* **Relative:** ~12×–13× slower than direct -* **Condition:** Function body is trivial (scale = 0) - -This is the *maximum possible overhead* identified. - -### Typical Hotpath Overhead (Real Workload) - -When the function performs meaningful computation (scale ≥ 5): - -* **set:** +3–6% overhead -* **get:** +5–10% overhead -* **Erased target only:** +1–3% overhead, often nearly at parity with direct - -### Practical Interpretation - -Erased calls introduce a measurable cost in pure overhead scenarios, but once real work exists, the relative overhead becomes small and predictable. - ---- - -## Flat Overhead Price Card - -### Non-Erased RTL - -* **Realistic Overhead:** 0–1 ns -* **Pathological Worst Case:** ~1.2 ns -* **Use Case:** Safe for ultra-hot loops; equivalent to direct calls and often faster than `std::function`. - -### Erased RTL - -* **Maximum Overhead Across All Tests:** ~16 ns -* **Realistic Overhead:** +3–10% per call -* **Target-Only Erasure:** +1–3% -* **Use Case:** Suitable for high-performance code unless the function body is trivial. - ---- - -## One-Line Summary - -Across all callables, RTL's overhead ranges from **effectively zero** (non-erased) to a **maximum of ~16 ns** (fully erased trivial calls), with real-world workloads sitting comfortably at **+3–10%** overhead for erased calls. From 86a3febc866745d9d7f62629eb254cd1218dc16b Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sat, 24 Jan 2026 21:01:51 +0530 Subject: [PATCH 092/102] Update README.md --- README.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/README.md b/README.md index 4d03d6c5..9c10b284 100644 --- a/README.md +++ b/README.md @@ -148,18 +148,6 @@ if (err == rtl::error::None && ret.canViewAs()) { At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. -RTL provides the following callable entities, designed to be as lightweight and performant as `std::function`: - -`rtl::function` – Free (non-member) functions - -`rtl::constructor` – Constructors - -`rtl::method` – Non-const member functions - -`rtl::const_method` – Const-qualified member functions - -`rtl::static_method` – Static member functions - ### How to Build (Windows / Linux) ```sh mkdir build && cd build From 8c07786365f551b771c888aca7e4f5a225c6037e Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 21:40:04 +0530 Subject: [PATCH 093/102] Readme update. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9c10b284..aedcd017 100644 --- a/README.md +++ b/README.md @@ -142,12 +142,12 @@ if (err == rtl::error::None && ret.canViewAs()) { ``` ### How RTL Fits Together -[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) -  -[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) - At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. +[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +  +[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) + ### How to Build (Windows / Linux) ```sh mkdir build && cd build From c4fac7a4f0f0dd3c16cc7b4b3333c3614c0bbfde Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 21:42:58 +0530 Subject: [PATCH 094/102] Readme update. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aedcd017..55a58d94 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,6 @@ rtl::CxxMirror& cxx::mirror() { ``` ### RTL in action: -**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** - Lookup the `Person` class by its registered name: ```c++ std::optional classPerson = cxx::mirror().getRecord("Person"); @@ -148,6 +146,8 @@ At a high level, every registered C++ type is encapsulated as an `rtl::Record`.   [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) +**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** + ### How to Build (Windows / Linux) ```sh mkdir build && cd build From 91b99834c78ea2f69da1df30e2c4d19b9e8532da Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sat, 24 Jan 2026 21:54:19 +0530 Subject: [PATCH 095/102] Readme update. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55a58d94..d4080b24 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ auto cxx_mirror = rtl::CxxMirror({ /* ...register all types here... */ }); The `cxx_mirror` object provides access to the runtime reflection system. It references metadata for all registered entities and supports name-based lookup. The object may reside in any translation unit. To make it globally accessible while ensuring lazy initialization, a singleton access interface can be used: ```c++ // MyReflection.h -namespace rtl { class CxxMirror; } // Forward declaration, no includes here! +namespace rtl { class CxxMirror; } // Forward declaration, no includes here. struct cxx { static rtl::CxxMirror& mirror(); }; // The singleton interface. ``` define and register everything in an isolated translation unit: From 52e60e5405b109e6530556b340fec5e50a76445e Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sun, 25 Jan 2026 07:37:41 +0530 Subject: [PATCH 096/102] Update badge color for Design Traits in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4080b24..3aceb01f 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ if (err == rtl::error::None && ret.canViewAs()) { At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. -[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-teal)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md)   [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) From 76286cead39020b4ce267dda1a6558e3d80e5f8d Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sun, 25 Jan 2026 07:39:44 +0530 Subject: [PATCH 097/102] Update badge color for RTL Syntax & Semantics --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3aceb01f..b5777814 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ At a high level, every registered C++ type is encapsulated as an `rtl::Record`. [![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-teal)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md)   -[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) +[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-064F8C)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) **[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** From 180c1c89e44279eb90be6eb6b8478b3045ac8191 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sun, 25 Jan 2026 07:41:35 +0530 Subject: [PATCH 098/102] Revise documentation badges in README.md Updated badge links and added a new benchmark summary badge. --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b5777814..bb88cdb8 100644 --- a/README.md +++ b/README.md @@ -142,12 +142,16 @@ if (err == rtl::error::None && ret.canViewAs()) { At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. -[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-teal)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) -  -[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-064F8C)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) - **[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** +👉 Deep Dive + +[![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md) +  +[![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) +  +[![Benchmark Summary](https://img.shields.io/badge/Doc-Benchmark%20Summary-teal)](./docs/benchmark_summary.md) + ### How to Build (Windows / Linux) ```sh mkdir build && cd build From 36fdc3215bb2ae7fec4f845f42487f183f61d84c Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sun, 25 Jan 2026 07:42:18 +0530 Subject: [PATCH 099/102] Update demo code link formatting in README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb88cdb8..48d956e3 100644 --- a/README.md +++ b/README.md @@ -142,10 +142,10 @@ if (err == rtl::error::None && ret.canViewAs()) { At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. -**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** - 👉 Deep Dive +**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** + [![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md)   [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md) From 8efb9a24e81b3f76a742ade4ca1d9c0059593832 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sun, 25 Jan 2026 07:43:55 +0530 Subject: [PATCH 100/102] Add 'Try RTL Online' badge to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 48d956e3..d6d8b4ef 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,8 @@ At a high level, every registered C++ type is encapsulated as an `rtl::Record`. [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md)   [![Benchmark Summary](https://img.shields.io/badge/Doc-Benchmark%20Summary-teal)](./docs/benchmark_summary.md) +  +[![Try RTL Online](https://img.shields.io/badge/Try-RTL%20Online-f48024?logo=github&logoColor=white)](https://github.com/codespaces/new?repo=ReflectCxx/RTL-Demo&quickstart=1) ### How to Build (Windows / Linux) ```sh From 90fb07f252dc46949ad5aeca37a663a8a39c199c Mon Sep 17 00:00:00 2001 From: Neeraj Date: Sun, 25 Jan 2026 18:19:55 +0530 Subject: [PATCH 101/102] Remove 'Try RTL Online' badge from README Removed the 'Try RTL Online' badge from the README. --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index d6d8b4ef..48d956e3 100644 --- a/README.md +++ b/README.md @@ -151,8 +151,6 @@ At a high level, every registered C++ type is encapsulated as an `rtl::Record`. [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md)   [![Benchmark Summary](https://img.shields.io/badge/Doc-Benchmark%20Summary-teal)](./docs/benchmark_summary.md) -  -[![Try RTL Online](https://img.shields.io/badge/Try-RTL%20Online-f48024?logo=github&logoColor=white)](https://github.com/codespaces/new?repo=ReflectCxx/RTL-Demo&quickstart=1) ### How to Build (Windows / Linux) ```sh From d1783075ecbfb23c7b03b23ea8305f9d1a210470 Mon Sep 17 00:00:00 2001 From: Neeraj Date: Tue, 27 Jan 2026 10:26:45 +0530 Subject: [PATCH 102/102] Update demo code link in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 48d956e3..f03bbf21 100644 --- a/README.md +++ b/README.md @@ -138,14 +138,14 @@ if (err == rtl::error::None && ret.canViewAs()) { std::string nameStr = ret.view()->get(); // Safely view the returned std::string. } ``` +**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** + ### How RTL Fits Together At a high level, every registered C++ type is encapsulated as an `rtl::Record`. Callable entities (functions, member functions and constructors) are materialized through `rtl::Function`, `rtl::Method` and `rtl::Record`, all of which are discoverable via `rtl::CxxMirror`. 👉 Deep Dive -**[Explore the demo code here](https://github.com/ReflectCxx/RTL-Demo)** - [![Design Traits](https://img.shields.io/badge/Doc-Design%20Traits-blue)](./docs/DESIGN_PRINCIPLES_AND_FEATURES.md)   [![RTL Syntax & Semantics](https://img.shields.io/badge/Doc-Syntax_&_Semantics-blueviolet)](./docs/RTL_SYNTAX_AND_SEMANTICS.md)

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%0Am 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 bsb8aT?|9hKCNnKZ;7jw+v4c4WY=Zt5$6b8h literal 167200 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

JY{P;Psv57&Vh0ZlT zF;Oh=`{z$(HK=EhJ9kr3QZ{5FPLB&cGIECdA?>|S8J&~(DKsX!w`FBelfl;YjQPQ! zkS>9VX)OjVhmnE7M1Y~dP@SI`6OWG~zMZP-?lRZlM^Wk%5z0ps;5~^S+{@Q~RU8M) z$;O5IR@ifB&(0E)OS-z2;s*`*>G^c?^x^Vzi5$G|Q)xzQ(!CBI)R+YPbU80KH;S~( z6p}o#%O2zBw-#gOvt+7sEQNG%?@kc);q{q<`)fOn4FB6Y1KQW5%k zdK^14c+nMED1zlde{95z5%-V1X(}Yl&kwbp^7aR*_+%&*daAt!Mn=3lT6?*;&? z)sEA`PvILf)l{+Bag;Wg? z1|3gw0|mPEo{cN@k!@@5c(lHK$-8%%fEbtx;>t5EQg7m#$h>U)2GKh1_`W8!X3B6T z<<{Ra8fPqD-|;GFrDM^u{CMp~_OLT0`ED1QVh|^#+frM-)Tgc`AXi~mmepVtBP*&+1 zy#3mwL7}xiQz0&Tp8Ri*D=^*V;8>4xVt*3Ft55w>R{OZstMwp8r#w-CX2dFd8=}}f zmjq?^*n6|qpt>*!n?;D$G3D#?Pvk+Bz1ErCf@wkotdQENwD0DJFN8oI%DVK*76rSj zaG7t1A6nY(qm;+|wkJC$0|Pe(Oyn<6i#(Mt9ZZnlKA(b89G(HUVWJ}mb7#g1%bd}p zwHS5+PLB)^59T=sdwe?tuL`x)N|Pl9*&+QD_sZP(r8ChwfKlD70Cb)?)kCOW{bVJ{ zFSlXn7YSUGNJ4gDcsc;}_HkE74l&?>xDK#rFx%&3sp5d|&~Bcvc8L@2WI)-egT+O{ zegh^H9GHBx@}({z)Y%oIk_)6qL&(oiP*QTZ$jb*cT0e{D#wX?OL$gAY?(AHES)y_n{4G0YaR zk07DE)GJ0jQ2mmN1aMEJ_=rNion2n-hz@@&TFU?H|H*=?tG5xhJ^$Yf=%gp`pb%+Kaa?^OKOp@X?g_jam@}fz#!j(IFez&6R!8jCC&Py;}g2l5{1a!mZ7O4 z3qO)7@gEp?WF1YPMLL!8pk`L0}${t$%!)fi4HHco!Lea{QeeWcM;W9 zgqV?YOxO9Gcp@L!s{iL!II~R5%xF4Ntf580aCuW@f)5x@&9`HWQb-4@_{aqIH$SH8 z_06f)TKu40qL8pKG}4vjW$0*pd~Hol!JWY*|I!SBnBWg+VE_WLNpVf2G~eJ;SXtn+ zVJweNNC?S|2CNgIfxXTEqR`FW7HX0a`twY71_34Q1wcX^1(N&ow4FD1g~PeUga>!{ zWfPO{#PN~Gk5!tG!OHJcNT783KUsjuS*Jb%!7~>Z4G|2nq!x@?o^~FVcXf3I9+A-j z+pBjW4r(IAA$$px%_?HfDj&b`BJNfVBx$5eT_jnAEB+wrwKwj60xA4tKYxE{zz-ii z3b7zA19QP$H!E7zQ2?=H5lkB2Ten=T0#2iP=)Rejf47HrtG} zw6ujZOc+#^>?Sy$#7?n@K##)IK_OcRMl+E5K6v23sNNOy^NVjBFrQ?Ej1;VJpy#HA z3iZQYk8#Uog6t0xc*Cc@7W843fr*ZeZvXzjID!i=j$7632@DJ*4iCTJ4TswSOD!gQ zUPd^kF*9W+iig3?1=>tl{OQ|~M-1ZhQ&T>cnv{J-a=~@n#&9Ll-pHcmT6WR9>Z=9r z4yy61{SJyfOK*bQLk?HGyX5QrH0Yi9(wjr(@g+C6E=>rfT^g4@krUM%;hs<#-tAhh zYOvb!_0RHey|Tz_b6T=uoX!wg8(wiV@ySzIEw-7yb>!L>BDt5FNPqEct^Gg#6V4^m zq^@pmXDKF$13ZOOQ;7A4Uq;wYqz)FDQ^nspc$JNrZ{JFWXTZqr&Qga=J^5c;@#qe~ zS~fPeW5?99^iJ4!@t!($kvnF`u3cAbZTacKpFDYjk&QA_Rwky$DJd-?8b(G&K0fbE zh4vwK+th?C94y__r!R5Gz$mn_wiY4g5~DE(Aqtbv1)~!Q$BrGNV#kHWDmtU954*s} zM_RKJ18s1WgW2E`Aaiq`4rA+Dwh!*yX=rK!twGI$Ko2`MEDQtDQY?}1`EeL|Arq@$ z7Z@Q8tKHAcoRE~%yx@leg5^Enh+k%N$EX>Gq9h}!_U;uF60$Xx5D<9&_U$*vQe=U# z|GzuD`SRrpg1vDzh!=xYz}s?mc2-il-EF^@lCtCX5+??u818Y2h?`MUAM0;xY5-892U8LhLuZFgMI(^4}Ra@Gb*gyTNXZp-V?)oq^IHXW+EO$lze~wR4e0*RZ)doh8ZM`;bqZA>vNW? z=&AB?#y7*`6gz%gmGa?q_?;TXQxxqGn^D(3K2ob=cWN zI^1lv!@9Ai!4fPZkDnvz$F6w=hWT|^XqiJ_HqJ;VE2XUJ$*Cc}@wAp+O2h`Nn zii?r#P|I@F;!n}SoZio5eT+!vbYjo|<3K|*X_EVPJ^SeJHskc75#(!Oy9B^UZ?l4-^w-02M#NKJMB&_cuqboHsH5C_-Vy8Ggr- zMp=c9rj{)vYMAcJo(vWFqv6lkYw~hVmzo=%{yx7|b;`NgNIONOsy&5rM&DO&Gti?u zT3?0cC41ZTx|MhT3BN{h18@T2o6fHFZJ1w}VUSl-Q|rvu1atpf^js}#>Pz~q+L7F% z>=xUnyi*v=LPQw}8YDwaITR)KTM)cNEF(mp%DaA&3p~E9WwCYtSKscJl<$o*_A)Ee z8Ln={?DOQyqiL~F_C7Rmq?WI_JMYbTAgPnRo^nouG9fzHoV^eAdLcRENg3Q)$xN)Q zLh;RV5C?p_4ACS#bs86xqn##1}8 z^dMTBAbkcO46{>TuQU?~rD`k@+=Zj>(h8G%xgu^%F-;it9(mK+Q=T_8?FiE+NZ8~0}caZ3t0F!|%f?NbtT-lX= zH>4skuz{zvfK>iQ8@X{~antdrmpq8A$eyE{kAkkro*{F=ST=@v-#8Aef$54QXkhvb zy_vQg|KCgqKnbfS;)GRlXyuhqEZ|oum&VB7zYg`6C=T;mDX`Kh=`mwGn2*BJJ7V> zWn_@De{|_bP5?hJ*3)zCQ(sYltYCQ#0$9*3wL6?+$s7dn(6W_Dqk<4yj2xkW+< z+NL2VVSf$V6``+(2UxbyzYt^>!a@bJE3N#7nFd5rv-G5_>LL*Qh&gmECjSa7IPKZu z8$8#4dK1UCu)?0&N%Qc8Wl!QB$Y3z3d*DNUWW(-9pdDi-5*$#Wk$Ki)pkk##-~4mr z;C=4n#}}|lkPL5YZQZI~o|Taf=l5m#=U@0NzdZlcSbq7)~#;%$VW05fx*Kj%7@ zkg0pO0f9|b4{;ahMR?*!{nlqGLBW=B*S$w%{Q!_4f}l_mbc~IqFuS_7=c2heCIVh3 zCMG&nt!87a7;y}O&c%!67=y%6n5WS0U!=E(Xykv9pB%VxfKahEmH)ljcdn9=!0Pws z{nmr$&+rBD@CTR(1^fN`_gNnh2PTUIAaRw+9liEoibc}-$+DiWp_|;wCJCFEm@9}< zk-(69&n1kw_WefmCQZ~z+01M(uZl5Jh|P;U=!>v5^bfojCP>gOL2r>vMMeZcIZQfM zjD#L)U7CK!9-iTG=tNE@T4wKG7X?jCO}xiT%i7kNMV;-D{RD;TC`doINcspq!arMLUGJ@gp`lLOk1@6WyPBEV%aH{VD4 z{0+G9RKYJDdd1?Kxtiy3R5zpt@CcTJhYtPy@Z=tWfk0=nd|1xIbH?OJ9ovI^>E(lI z(&{_pJ9IB)KB1y=B^l<=Sro6Q|DIxj{XbaNe)$!-C-*PY_oP7z_f*KAWVd(G^jrFq zuGSB(y&a{Gc-blJ&n?MCMiqH3fnwjX6q|y|pSEM^RFn*akl-5mhHV+j{C&>Pc6yF6 zs7;i0T~!MXJZD9koJWW#W@8joP_p2s@pleWI)jriB;g+oRdc)2} zPwUtNhA-KA1PGK(qHNhi1X=nY8=-iu&Llh)|_SGGa$p{Eo9fAJb*4#{#ghQzhW7)p5>*Ow|tg5QQqnfJE z%k5y8?kuNBzqgYi=zxwI+Ls66s=d7!5#D6w=28$OCx8o;kqSphYF*|Zo`0aI`?;-6 z8x2QQwYNI3`s)@(RKO644|Zrfiig0QM7D172JxXb+iN}5(oK!w^v7g37dsKmUh%dL z`J%Lks-}@nX(ZWG=A3HZZzl(bit)IMj?g_J2P}JA8yHAU9FA}Mwd6x^mSn+v&A!u% zi0B)por}D4M~BV^WCw-I4~jIfNXasyhJ!x83o!RIz0iOYVG5w|6H}m=@WZvhQ(s`- znBfUR@X};3v4XXI^jsv+<>D3R>LKDr#t4zTK{xV0{?Gyr@MsC}^3o{jmM{4Y?O_(< z1ULJ=WG{S}I*cLr+1i7^jnVJd3TN7q_bV{wQo*~%6{W-S&%k~|KCrH0oB`Zk>^+a2rog_<=Ot= z5dvwyy_Xby9byEUP1-xmNaf{*Hc2cn!i06t-1Cr8IOCIv+TRKYYwr93RBJOl_=>lp}9sj1WiO!wjW79C~D z3<|$wJV+RW0{xv<-a8|t`#eZ=!V>($%sozy9cLK( zznVMmK&t<@|G&?%4x(e9%#%&F?8u7DjB}6`X`yt?gg9~P6B$|IV`gNPQuZhmii~7s zL?K&4l&t$Y-~0aO_uuco`}UV3a^BwKx?a!c^Lo5QRPzf=ugfO(+FXH*<;dTS+e&cK zz~zU(9~D&=vA;d#arW#(^Ngg_)VYn2xQ^U!wQ`uY(`6{oHu@Kpho<&6Yn!*E(63R1 zuXwh#c?!(}!)-j7P4F+|^g$K(7 zlmc>|*8Q_+e-|B_x`g?zMjjf;;>YR}=BiM^eIMj;SW~hBeZMIV!KrVs8zBd>{$gkl z?P7_*z$=Rmf98=E2E3m%irLi0guVw!(OBpr#8f%wd*A)Fdj29+p`q5-d3Nyuk|`hKgbu^{~p3fO==5ni*#Uk2pty zgXEpFUZ$qjzLk=gsH9{tLFdEXh#AB%#n4)xG_kDtcv<%(%!&D0SGwl&2fS1sVWP~2 z6coR)5O)8#R=3;}h&+A8p?$(9pRzw4UGM0F#ccNqXbllgF|PbHJas=)EZ--n(^5qR zLzxfBj}TEaGn`zE-in(rH|el>Ndbw2J8UHGk$LP+4v$eWrc z*i3j4n)dR{OajUkeg7H=wlCRud?_?=RcS5l=rA?DAu~`a`r5S9@pPdDX`El#kIDgSp}T(4KNJV7kKYZDWK^`# zBWF0KpcMbM+4*0d87gH9oHLj3G-)rHj;*~tUQYHhA<`l76x8SHpteEo<(8)nyk)eG zmf3_J6Dje~^LYS|6bMW9nwagxu=j9Cz4eLeOCCY8rU+O%U`OgOk z;e{!d=?W-BFm$C7Ry|&6^F@5(BMNNaDH;@*sOZJZ@3t>odXvxBDUBrqJ)hmT) zDdLf=rIuRHs-Ml~0ZcrG2;NJc21O3=d|=2zl17T|y;K%n&kH{{^~6WZOs9M_ICQlk z(Qp%Mgo<@0aipSgb<<+fC~9bxbR6ZZ{yXx(TBqwk*yLSw-aqbn!DG zw>cs?8XCljBP(ao6X(3^W*ulgBrBVi<@}68UCfhg`?DA-&sS||9hE_#AjNt7hgKrw znPkw2MA_KL%2En}!miTdSZ2QeJ7o0H$BVzres4ie`E>L39lw&rtHg7$*N^4EI7#2X zD$Bri)B?x|g^@$^S>|_lK2Bi?3kV^xpG$z zL{m#4oF?7-F^uq~gv{0S;HzltxM0tqMH*s=#;y|>|+XVJhe3;L? z?*ecJzkbv`WivQ(3q%;PzDeVb@XzAKx#p2PQonyQik1~|zOO)MRlYH# z8ILB>w}kQ`G~qGaZY?xW^Jk4~fO%^RUF5WHfna zei03|hZyTD)FifOV5e!xksa{>uepM{-I1*QL_)24hkx}19t(>Y)mP4^P(j!8CAxdqt<@Sm ziZgg6KiB6hOud2E*Fw&Qi>PrVGCM2A+vw3=ec*P|o$%$8N51b<(|`#lJTB?bkpGzn zcrit<=@+}DJ{;V>DOe8Acn|dt? zMeYA`+SwbV>YAOkak%k#`l_~$+r9b+mcOpYA2e4~8(u!P_R#vJ4N+`j?wP$k#MMsU zUkz$(KMOpbp`jsY4Z!yI$3mYVDCkNg0%%ZJL!JA}yx5J8d(!5D_M*U6+5P098%bJttaf<_0`dsK7}%XB&`jwgPV zSYq`Lye)F#u-AV&fqeFwkMMQH(NihT)UO{xRB!)xXRy~?zawreEpn{WSz{=}T>Whg z=R3D>pNj5{6Rxsq)@?8SJDsmqFp&ALy*ui!?b#=n_!Jrg&##&TIRwqNng$Oga~5HD zjkVFY59tLyHy(TMF?T`RTJ5^W%wxF%lOLSXw>gc(zJF!zIGVapr*=l6P)YjclRKu+ z43OZ|_a~K|>~{?BEviAnRLkyOjC`kkVphF!bmDjW600WKQ;@q5rJ)Kb(fabn zK*yN#@H^eQ1P)d_$J%Gwv4eDf`cR7OU$uNkRtPS{$fvVzrwb>0Fo%UnTx0`z8mpVR zgKgyJH7z6gnR_ifKNzq2eOebhJ>v3wQ~Q|@8r@RL+LUQjKGkhlOwyyBHYC>L(TH`b zAT$P9SSu7p%!_P`lDxH(&6dHiA!1A?))=|)JSMJoq=L_6)>aHkyyguXRQk!5GvUb& zDuZ}Q0jb&56awO=uF+_j3r{e{S#hUVVx7F{Ilp8}8yImU`WRvJ^cTMetj#z#U~(Eu zUP~_P_Sut4ios5ErieuCelya8uAr}|!epqZNW0O&tY~q6k4x2i^U&_V4IN;|4#TRR zcaYG4qkSw*1-Sxx1Nav}KLdX0jd{5f);N!gjtGXF%B+Mz+`dK*<0xciT3zu27zRYd zvpm8t)a}^eX%|P!k6acwgp8q}k$amKrtW_?0++G{h>f{7yLR~v z<(BFOYtG6ojL}q{(i?yH^@1Bo=SwUNkL2N2b7_QH_=hYRvc*e7Fb!|j)Q}?n0HiR% zWXJ-Ku#rnzbhWxg4MOd{*F+$@U2?aga`+D5NeiKJfypk;M>pJaRUDw~=jLS>H*X9( z!PqJ&1)DH@XOhJE$Xy=Kb0H?X`t+If%!1?k-y*^+r!TNRbj#u4J02c}H8#K;4zSBE zo*LAJPip=Tl=J_mmuQtiU{SvhNpSwxC^mhVtc0>fWy_4O){L(LqvybII`D^j1r;R= zfTRHw7%IaPA%R#50dfdG=8k|G8{Bb3SUB+R>yu;}EJB{9&0?3sq{Qe3pV=!f{#uYi z)~#>RSnT;pVebu5Vd$b2ptD9S9sjCz${D(e>ZYTcGflqvas@T5l2}3T-oIAq{N`DFhQ=2NMu53Yu^zor*`GOa-F7q%AM)U zX#kG^0>_n4Zgdj#l&1zT9e*&$Q{aK|XbVV0JcrHUxn4jf`-8p>)YZ8t20 z6Cl~-Ws%w#5n72nrlaAO=n#CCzbS@>{E3c&{bXQv^zc8t*?)BrGKp1}j8xIls%t&C z#Z*{7z^0*)RlYNOYn+B$qlV+U^x>;!K^WIe3Yvtll8p2^-6X0Jx@u=PO%w*(s{uWo zIs@{_1<6XbtwI#**X0pBG^g=x2Y_Ds%k9=+gPeh5mK{nF=Wb7q)-AF=Vz4?jznsN~C3{TzFiL z9;)llEnMQY>KZb#PNZWhK2;_-@W}Q>^%ZtZT3}}F$vNT`X8%u_&Obw%fta+oWg&C4 zdUxozt)5;hL}CC`K!X7Nk;<(CmVf`gySxuzg1*xHJ|0|g@ur;W)tBqTyT7$b)E5U@ zw+^_0pbI1exM~1t0~2+B)~5L6inpPGaG^}d_0{K~8{BB;VXWQJ$q7sp`Is*-t_Ny} zRYy~uMs_bmPyDr+11eja^qYCA&}6LsLR%zH(b2r?(Pi_4-1Bbz8nCO=_mOK z+1l~ui2c2A*2rGL+VM$)nt(tEU)cuw_7aJ!bLy}{hjn}NnX9$bR7M|L{}v6i?r+HN zLw1rny$zC$R(5Z4$T~P?OG}!rRHhdsTw$Ub0;BSX8+?ykTKW1xpTK!w+1z<1|ybofzT{Czkz#{H{kvW(#^=<0e zd9%)L0DCvCHFyKTe0{!;fee~8=yHLs;qa@#$7pum1{YR_yZc+je(35P*gHb7OzmYZ zDGTWoxc2K9=CCN(ifP`4^IGu@RLO5;<#KO*=ZtUTWY#*&G=ir#w!G2cTmeIgyX(38 zRpYB;ZGeES(nv$9d>A%aPBv6tC zjs;sS|Ahnhe*RH?9>nCB{3cNOBlgyF0cq#$1JCdFZTiP^Fy#v*dY1Vez@ZMAM z&yxIMb^_jkm7`-Biwby!&tDYv%cB#J2KeIBM~@!CE(Wg_1G=8=z)+u>swzaI0Z%vs z#SGHwFhT(mem{3OP`rTV-U}IdK(*Yybt?|12$^Y@`*VsO9aS|o;^N|a@Oa(a3WK@m zU*OBhz1;D;Qo9V0dOn@7y7!lW8@#L@^Q5c{as(oj!lI)3$u+oA00n+0{}0fzU4uTJ z&zG!ltTrwF5S?EKfAys$FNC_;!=w-RkQL?S0NGlBY1Gm(FUUi|joUjkY%ocs+5qHY zlZ&x-+ycW$i-xmKeV>IU$-@;cPIh*xa5Z)L~sd5fa-2nJc70eZY^$%10 zFtkkqBY~=m16l)8t1uFI1DqJZ&w4_bj_R*?c)*kE#@7H%2>wBse+^{$D-myK#>Q}7V)E7DpbgZ_j>ob?&JRc_5Y2?%J3l`k_&y-j z0!zdTQi)Bw1%DP6F3F~YqzlCYT0uAz76g1mDlZ$(Bf-Jpq}0%b5<1On%i<3(lRY@| z1Mt*D;t&LFkQQ6r`NOL`k0rZcW(~M^>R`4~M<|SquZ~rjBozX-%;E7cq*u6`^l z3;*@r7#zID%`tDV9tx^2xd=prHtm+3=)e^btT`b?^ZaAgC!qGS4FsL{xpGBzJ`1Y^ zuq9)`>!Pr^0~i=^Z-bu(0nZ2dk^t|e1g#AF)?c=;=mBajTt*k)r60z$5$#>L`1qDd z>fmyPx3b)}lm`as)rjqJ7<&gs{kQPnjUe#>q3CYA5&+JD+@h6jxtgwPof0qf7RIID zyum?)0;p*)D1a3b>eF&TjaNDtt9qrq3<^6){n?rPEU<{H%F3jLh4rx%xZkM$HWiYG z9E0o!kj_9!ghx1evoNr65}78cBVdSu?tcO9exF*W%yGy{aLYLd57+W&Za+l=zCG)f z3;hx;0TGfvRMQ3ONKa2s#8&s2j(7nl8=IfNFs7oMq9t-1o}GIOfDwRQn49k`pV{Z- z;wqYC0qBeg;M@j*`ZHdsbrtYJ^W1k&gnAz3eQdW3XkVZkyDQ){ysBNLd@7opxE z3J|<4A7VoCC8_^6C<{;zfZvMMml8N0z9Y2%rxWgN2m%3vZY$$r&S}Vra@jju!`peM z+!qGDx!MHjm3;G1|6&uIQlM!Gs9tu!V_}}dp&>xZ<1!>k?VWv3SX%bNwh%%*JQr)n zp>`klhUr5b`~rwpYC=dA%ya7Y2gp;%dd$ww#v9O@mIgg}96zH^B*NQPgd_+Qv~T0J zr?!9L5OCjqwK2;dgX9WA0;0Cp2|5J24WK@o!Z@<6tpNt|@DTHXumU_(d>|nU+rmI* z;5S4cAUgLA4joE0lnHy+>vI|(LnQx%ZzTxG;lZ^Nu_IQmcPG=LZ$h`A%zI2t&7PTR z5Z3R)(`ngVDYmlLcB#pxBfTaT%v3lHhb-uKlc2Di>bfszvs~5e0$I~HGe1bZ)Bq5m z9O5_Q6H>s$ozj}l+TIO6VIAV?+1cHGm&ZG*;4b2d3F?L8-I+hWpD5}HJKVs9uRZcX zk0)VlYz*=^ya==k4<{cmKk)gVzJCg>|NpJ#?F%`Ugvwr!F{N&bg_xYMG_25fi~KJr C-o}6c literal 0 HcmV?d00001 From 614d7744612b958c6d6f2eb5b695137cc7e13271 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Tue, 20 Jan 2026 16:25:41 +0530 Subject: [PATCH 020/102] better res bm images. --- docs/images/1768905617178.jpg | Bin 27191 -> 0 bytes docs/images/1768905625451.jpg | Bin 33551 -> 0 bytes docs/images/1768905631690.jpg | Bin 35098 -> 0 bytes docs/images/1768905639254.jpg | Bin 27433 -> 0 bytes docs/images/string_micro_bm.png | Bin 0 -> 100402 bytes docs/images/string_view_micro_bm.png | Bin 0 -> 98069 bytes docs/images/string_view_workload_bm.png | Bin 0 -> 162119 bytes docs/images/string_workload_bm.png | Bin 0 -> 167200 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/1768905617178.jpg delete mode 100644 docs/images/1768905625451.jpg delete mode 100644 docs/images/1768905631690.jpg delete mode 100644 docs/images/1768905639254.jpg create mode 100644 docs/images/string_micro_bm.png create mode 100644 docs/images/string_view_micro_bm.png create mode 100644 docs/images/string_view_workload_bm.png create mode 100644 docs/images/string_workload_bm.png diff --git a/docs/images/1768905617178.jpg b/docs/images/1768905617178.jpg deleted file mode 100644 index 8cf03f9f5f97e6dfa4c53be446a36386bd5fd046..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27191 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 diff --git a/docs/images/1768905625451.jpg b/docs/images/1768905625451.jpg deleted file mode 100644 index 1211f3c5922f5c45fae6b31da316548940cc47b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33551 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 diff --git a/docs/images/1768905639254.jpg b/docs/images/1768905639254.jpg deleted file mode 100644 index d5c0090c87c0a1d04bc8a2166d7d77fd6468749e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27433 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