Skip to content

v0.10.0

Compare
Choose a tag to compare
@github-actions github-actions released this 08 Aug 20:17

[0.10.0] - 2024 - 08 - 07

Feature

  • Breaking - Targets: Executable and Tests toml entries are removed in favour of [targets.<target_identifier>] entries.
    Each targets allow the user to build N independent final products, being these binaries (executables) for now, while static
    and dynamic libs will be implemented in the upcoming releases

  • NOTE: A target identifier is the string value after the . on any [targets.<target_identifier>]

  • Added a --targets CLI flag to manually specify what targets wants the user to be processed in the current invocation.
    Ex: --targets target1,target2,tests1,tests2,tests3

Changes

  • Tests: test command now only runs those targets which they contain the string test in its target identifier

  • breaking - project_root property (under the [compiler] attribute) is renamed to code_root

Performance

  • The codebase suffered a major reorganization and re-factorization. These are all internal changes that aren't
    exposed through the public API. The most notorious points are:
    • The introduction of flyweights data-structures, that
      allows to reduce the program's memory footprint dramatically, and also the size of the generated cache files, being only
      created once and then only joined for being passed into iterable views that makes the full command line of every translation
      unit.
    • The amount of required code lines that was basic doing the same job generating arguments for every different
      kind of translation unit
    • All the generated commands are now stored in the cache as a separated entity, and they are only regenerated
      if the translation unit was modified since the last program run
    • The project model is now cached, and only rebuilt if the configuration file changes between different program iterations
    • All the translation units are now processed in only one unique procedure, since they are managed as trait objects
      in the main functions of the commands generation, and then small helpers creates, depending on the kind of translation unit
      processed the different arguments required for the source file

Misc and or Internal

  • Several internal APIs that uses helpers have received new unit tests, to ensure the robustness of their job
  • There's a lot of legacy code removed, only maintained for backwards-compatibility reasons.
  • System headers (GCC and Clang) that are importable translation units as modules are now translation units as well
  • We managed to satisfy the Rust borrow checker while we use the project model as read-only data, while the cache
    is handled exclusively via &mut (mutable references), allowing the codebase to be extremely fast and performant
  • Other minor optimizations has been applied to procedures. We remove a lot of allocation points thanks to the newly introduced
    clone-on-write idiom, to handle the data that comes borrowed since the configuration file up until the end of the process