Skip to content

v0.8.10

Choose a tag to compare

@rail5 rail5 released this 13 May 09:40
· 49 commits to main since this release
d8f4d8a
  • Performance: Significant compiler speed-ups from multiple optimizations:
    • Entity inheritance now pre-reserves map space and uses std::copy()
      instead of repeated dynamic allocations, yielding a combined speedup
      of over 200% on large source files.
    • The old bpp_entity::get_objects() interface, which merged and copied
      local and foreign object maps, has been removed. Replaced by separate
      get_local_objects() and get_foreign_objects() returning const
      references, avoiding unnecessary allocations and copies (roughly 2x
      speedup on large data).
    • bpp_entity::get_classes(), get_datamember() and get_method() now return
      const references instead of copies.
    • bpp-lsp now obtains class names directly from map keys, eliminating an
      indirection through bpp_class::get_name().
    • AST node type handling refactored from a virtual function to a
      non-virtual base-class member, reducing indirection.
    • Replaced unnecessary dynamic casts with static casts when the pointer
      type is already known at compile time.
  • Compiler & language semantics:
    • Dynamic includes that fail at runtime now print an error to stderr and
      terminate with a non-zero exit code, in line with the language spec.
    • Lexer/parser bug fix: whitespace and comments are now allowed after
      include/include_once directives.
    • stdlib: corrected a copy-paste error in SharedObject's start-up checks
      (was referencing "SharedArray" instead of "SharedObject").
  • Debian packaging:
    • Added Homepage field pointing to bpp.sh.
    • Standards-Version updated to 4.7.0.
    • Removed explicit "Priority: optional" (now the default in dpkg).
  • Build system:
    • Compiler and flags are now overridable (?=) to ease cross-compilation
      and use of non-GNU toolchains. Thanks to @Nizarjh for the patches.
    • Cleaner fallback logic for obtaining version information when
      dpkg-parsechangelog is unavailable.
  • Test suite:
    • The runner now explicitly checks for Perl-compatible regex support
      in system grep before any tests are executed, failing with a clear
      message when support is missing (related to #15).
    • Test suite switched to angle-bracket includes and -Istdlib/ to test
      the local standard library, leveraging the new include-path ordering,
      rather than relying on quoted includes with a long ../../ series,
      as we did before.
  • Code hygiene & modernization:
    • Replaced manual linear searches with std::erase_if and
      std::ranges::contains.
    • Replaced legacy const char* arrays with constexpr
      std::arraystd::string_view for type safety.
    • Converted bpp.h enums to enum class; omitted unused parameter names in
      listener handlers.
    • Introduced a bpp_assert macro that compiles away with NDEBUG; replaced
      explicit dynamic_pointer_cast + InternalError patterns with a template
      helper that becomes a zero-cost static cast in release builds (note:
      NDEBUG builds will not be shipped before v1.0.0).
    • Renamed the entity "objects" map to "foreign_objects" to better convey
      ownership intent.
    • Copyright headers standardized with SPDX-License-Identifier and cleaned
      up formatting; removed extraneous asterisks that leaked into Doxygen
      documentation.
    • Pass const reference in ErrorOrWarning::set_from_listener to avoid a
      full copy; prevent overflow in BashVersion parsing; declare NullBuffer
      constructors/destructor noexcept.
    • Minor style improvements: std::ranges::reverse_view, emplace_back for
      temporaries, removed unused includes.