<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Dear AspectC++ users!<br>
    <br>
    The new release, AspectC++ 2.4, is now available for download at <a
      class="moz-txt-link-abbreviated" href="http://www.aspectc.org"
      moz-do-not-send="true">www.aspectc.org</a> ...<br>
    <pre>Version 2.4 (2025-01-22)

This is an overview about the most important improvements. It is mostly a maintenance
release without changes on the language level. For details refer to the subversion log
and the bug tracker.

 * Added a new manual "First Steps", which describes the installation on AspectC++ on
   all supported platforms, important command line options, and a "Hello, World"
   example.

 * The ag++ frontend tool has been improved to handle dependency file generation with
   "-M..." correctly. It works nicely in combination with 'cmake' now.

 * Fixed various bugs in ac++, e.g. ...

   - a segfault on 32 bit machines, which was caused by a bug in the pointcut
     expression evaluation for attributes.

   - a segfault that could be caused under specific circumstances if a wrapped function
     threw an exception.

   - the problem that annotations with empty argument list caused the generation of
     invalid code.

   - bug 792: Execution advice for functions with GNU attribute noreturn

 * Support for more recent Clang library versions with Clang 19.1.6 being the latest.
   ac++ now also works with Clang libraries that are compiled in the Debug configuration.

 * Support for more recent back-end compilers, different platforms, and language standards

   - Avoid error message related to C++ 17 nested namespaces

   - Support for g++-13 and newer: clang does not support _Float* types natively, which
     caused parse problems in gcc header files. Now we check the gcc/clang version
     combination and inject type definitions into the generated code, which are parsed by
     clang while weaving.

   - Added optional module_name attribute to TUnit elements in the project model for
     future use.

   - Match expressions and signatures can now handle rvalue references

   - Implemented workaround to avoid parse errors in gnu system header files when new C23
     floating point suffixes in literals, such as 0.0bf16, are used.

   - Fix for aarch64 problem for error while parsing math.h, which includes math-vector.h;
     in this file the aarch64-gcc-builtins __Float64x2_t and __Float32x4_t are used, as we
     run clang with gcc's preprocessor configuration; the fix defines these types as typedefs when needed.

   - Improved Phase1 parser: fixes problem with using declarations for operator functions,
     e.g. in boost headers.

 * Revived Windows port and added *experimental* support for MacOS/arm64

   - Fixed code generation and test cases to improve MacOS compatibility

   - Code and Makefile fixes needed for successful Windows build.

   - Test programs are now compatible with Windows/MinGW, e.g. 'CallBuiltinOperator'
     now behaves deterministically

   - Added Makefile variable COMPILE_TARGET for optionally passing a target triple

   - Modified example 'profiling': it now uses <a class="moz-txt-link-freetext" href="std::chrono">std::chrono</a> for nano second scale measurements
     instead of the non-portable inline assembler statement that created an rdtsc x86
     instruction

 * Internal Refactoring

   - Handling transformation of advice code during token scanning of phase 2 instead of
     phase 1. This improves error messages.

   - Separated Phase 1 syntax and semantic analysis.

   - Avoid dependencies in classes that should be front-end-agnostic.

   - Moved some functions into the ACModel library that could be useful for other tools.

   - Simplified implementation of the diagnostics for problems related to the 'args'
     pointcut function and short-circuit evaluation of built-in operators.

   - Split the huge CodeWeaver class into two.

   - Added configurable helper functions to ACFileID in order to reduce the number of
     #ifdefs related to clang version differences.

   - Modernized dependency file generation in the Makefiles.

 * Reduced implementation dependencies on the Puma library (not maintained).

   - Completely avoid dependency to Puma in ACModel.

   - <a class="moz-txt-link-freetext" href="Puma::SysCall">Puma::SysCall</a> is no longer used. Many functions could be replace by <a class="moz-txt-link-freetext" href="std::filesystem">std::filesystem</a>.

   - Eliminated Puma/lexertl-dependency from PointCutExprParser class.

   - Replaced <a class="moz-txt-link-freetext" href="Puma::Array">Puma::Array</a> by <a class="moz-txt-link-freetext" href="std::vector">std::vector</a> and some uses of c-style strings by c++ strings.

   - Added file locking functionality into ACModel library so that the model reader and
     writer have a cleaner interface and Puma dependencies are further reduced.

   - Replaced <a class="moz-txt-link-freetext" href="Puma::VerboseMgr">Puma::VerboseMgr</a> with new Logger class with similar interface to reduce
     Puma dependencies.

 * Fixed formatting problem of the command help text.
</pre>
    <br>
    I hope you enjoy the new features. For bug reports, please use <a
      class="moz-txt-link-freetext"
      href="http://www.aspectc.org/bugzilla/" moz-do-not-send="true">http://www.aspectc.org/bugzilla/</a>.
    If you don't have an account, yet, and want to report a bug, please
    contact me.<br>
    <br>
    Best regards,<br>
    <p>Olaf Spinczyk</p>
  </body>
</html>