Changelog

All notable changes to OULY will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • Comprehensive documentation with Sphinx and Breathe integration

  • Coalescing arena allocator for reduced fragmentation

Changed

  • Improved error handling in binary serialization

  • Enhanced type safety in ECS component storage

  • Optimized memory layout for better cache performance

Fixed

  • Thread safety issues in shared linear allocator

  • Memory alignment bugs in pool allocator

  • Compilation errors with certain compiler configurations

[1.0.0] - 2025-01-01

Added

Core Features - Linear allocator with LIFO deallocation support - Arena allocator with automatic block management - Pool allocator for fixed-size object allocation - Thread-safe allocator variants with lock-free design

Container Library - small_vector<T, N> with stack-based storage optimization - dynamic_array<T> with custom allocator support - sparse_vector<T> for memory-efficient sparse storage - intrusive_list<T> for zero-allocation linked lists - soavector<Types...> for Structure of Arrays layout

Entity Component System - registry<> for entity lifecycle management - components<T> with configurable storage strategies - collection<Entity> for efficient entity grouping - rxregistry<> with revision-based thread safety

Task Scheduler - Work-stealing scheduler with multiple worker threads - Workgroup organization for task dependencies - C++20 coroutine support with co_task<T> - Manual thread affinity configuration support

Serialization Framework - Binary serialization with endianness control - YAML serialization for human-readable configuration - Stream-based I/O for memory efficiency - Custom type serialization support

Utility Components - Memory alignment utilities and helpers - Template-based configuration system - STL allocator wrapper for compatibility - Debugging and statistics collection

Build System - CMake integration with modern targets - Multiple build presets for different platforms - Comprehensive unit test suite with Catch2

Documentation - Getting started guide and tutorials - Complete API reference with Doxygen - Performance optimization guide - Real-world usage examples

Platform Support

  • Linux (GCC 10+, Clang 12+)

  • macOS (Apple Clang 13+, Intel/ARM)

  • Windows (MSVC 2019+)

  • C++20 standard compliance

Performance Characteristics

  • Zero-cost abstractions through template specialization

  • Lock-free algorithms for multi-threaded performance

  • Cache-friendly memory layouts and access patterns

  • SIMD optimization opportunities with SoA containers

Changed

  • Initial stable release

  • API design finalized for v1.x compatibility

Security

  • Memory safety through RAII and automatic lifetime management

  • Bounds checking in debug builds

  • Thread safety guarantees documented for all components

[0.9.0] - 2024-12-01

Added

  • Beta release with core allocator functionality

  • Basic container implementations

  • Initial ECS framework

  • Preliminary task scheduler

[0.5.0] - 2024-09-01

Added

  • Alpha release with experimental allocators

  • Proof-of-concept implementations

[0.1.0] - 2024-06-01

Added

  • Project initialization

  • Basic project structure

  • Initial CMake configuration

  • Foundational header-only library design

Migration Guide

Upgrading from 0.x to 1.0

Breaking Changes - Allocator interface standardization - ECS component storage configuration changes - Scheduler API refinements

Code Migration

Old (0.x):

// Old allocator interface
auto allocator = ouly::make_linear_allocator(1024);
void* ptr = allocator->allocate(256);

New (1.0):

// New standardized interface
ouly::linear_allocator<> allocator(1024);
void* ptr = allocator.allocate(256);

ECS Configuration

Old (0.x):

// Old configuration
ouly::ecs::components<Position, ouly::ecs::sparse_storage> positions;

New (1.0):

// New configuration system
using SparseConfig = ouly::cfg::use_sparse<>;
ouly::ecs::components<Position, ouly::ecs::entity<>, SparseConfig> positions;

Future Roadmap

Planned for 1.1.0 - Additional allocator strategies (buddy, slab) - Enhanced SIMD optimization support - Improved debugging and profiling tools - Additional serialization formats (JSON, MessagePack)

Planned for 1.2.0 - GPU memory allocator support - Distributed computing extensions - Advanced ECS queries and filters - Real-time garbage collection options

Planned for 2.0.0 - Modern C++ features adoption (modules, concepts) - Breaking API improvements based on user feedback - Platform-specific optimizations - Enterprise features and support

Contributing

We welcome contributions! Please see our Contributing Guide for details on:

  • Code style and standards

  • Pull request process

  • Testing requirements

  • Documentation guidelines

Support

For support and questions:

  • GitHub Issues: Bug reports and feature requests

  • GitHub Discussions: General questions and community support

  • Documentation: Comprehensive guides and API reference

License

OULY is released under the MIT License. See LICENSE file for details.