Skip to content

Releases: JeongHan-Bae/JH-Toolkit

🚀 JH-Toolkit v1.3.1 — Conan Packaging Support + POD Hashing Update

25 Apr 04:01
a28563a
Compare
Choose a tag to compare

We’re excited to release JH-Toolkit v1.3.1, a feature-focused update in the 1.3.x LTS series, introducing CI-packaged Conan .tar.gz archives, and a major enhancement to the POD system’s hashing capabilities — all while maintaining ABI stability and modern C++20 compatibility.


🧩 POD Hashing Now Flexible

  • pod::string_view and pod::bytes_view now support selectable hash algorithms:

    using enum jh::utils::c_hash;
    sv.hash(fnv1a64); sv.hash(djb2); sv.hash(sdbm);
  • Fully backward-compatible: default algorithm remains fnv1a64.

🔍 Enables content-addressable containers, hash-based lookup tuning, and easier debugging of serialized views.


📦 Conan Packaging via GitHub Releases

All Conan packages are now built in CI and distributed as .tar.gz archives under GitHub Release assets.

This format avoids reliance on Conan 1.x or GitHub Packages, and ensures quick CI-ready deployment with consistent cache paths.

🔹 Available Archives (v1.3.1)

Package Type Platform Notes
jh-toolkit-pod Header-only POD All Platform-agnostic, compiler-independent
jh-toolkit Full build Linux x86_64 Built with GCC 12 in CI
jh-toolkit Full build macOS ARM64 Built with Homebrew Clang 16

Windows builds are excluded: Conan 2.x on MSYS2 UCRT64 incorrectly injects MSVC
🚫 Linux ARM64 builds are skipped: GitHub-hosted runners lack reliable QEMU + Docker support


⚙️ Using Precompiled Packages

wget https://github.com/JeongHan-Bae/JH-Toolkit/releases/download/JH-Toolkit-1.3.1/jh-toolkit-linux-x86_64-1.3.1.tar.gz
mkdir -p ~/.conan2/p/jh-toolkit
tar -xzf jh-toolkit-linux-x86_64-1.3.1.tar.gz -C ~/.conan2/p/jh-toolkit

💡 For best results, use these only on systems that match CI architecture (e.g. for automation or quick restore).
🔧 Otherwise, build locally from source for full compiler integration.


🧱 Installation Modes Recap

Build Target CMake Option CMake Targets Available
POD only -DTAR=POD jh::jh-toolkit-pod
Full build -DTAR=ALL jh::jh-toolkit, jh::jh-toolkit-impl
Combined -DTAR=POD,ALL All targets above

✅ Use POD when minimal dependency, fast compile, and ABI control are desired
✅ Use ALL or POD,ALL for full support including coroutine, views, and pooling


🛠 Minor Improvements

  • CI now includes Conan profile detection and consistent layout generation
  • Release assets contain properly versioned Conan caches
  • Versioning is synchronized across all entry points:
    • README.md
    • CMakeLists.txt
    • .github/workflows/release.yml

🤝 Contributing

We welcome clean, STL-aligned code contributions! See CONTRIBUTING.md for rules and practices.


🧠 jh-toolkit-pod is not a C-style embedded component — it’s a lightweight, fully modern C++20 foundation for all performance-focused systems.
🚀 Thank you for using and supporting expressive, modular, and efficient C++ with JH-Toolkit.

🚀 JH-Toolkit v1.3.0 - First Stable Release of 1.3.x LTS

22 Apr 14:12
b06f88f
Compare
Choose a tag to compare

We’re excited to announce the release of JH-Toolkit v1.3.0, the first Long-Term Support (LTS) version in the 1.3.x series!
This release introduces modern runtime structures, STL-compatible pipelines, coroutine-powered generators, and enhanced packaging options — all while preserving JH-Toolkit’s philosophy of zero-cost abstraction and expressive C++20 design.


🔥 What's New in JH-Toolkit 1.3.0?

✨ Runtime-Aware Structures

  • runtime_arr<T>
    A heap-allocated, fixed-size array with raw layout and STL-like syntax.
    Optimized for PODs and primitive types, it avoids unnecessary heap behavior and is faster than std::vector<T>(N) in fully-initialized cases.

🔁 Ranges and Views Interop

  • sequence + jh::to_range(seq)
    sequence concept now enables std::ranges::input_range-compatible views for smooth STL integration.
  • New module: jh::views
    Introduces lightweight, allocation-free adaptors (enumerate, zip) for sequence instead of ranges, with no RTTI overhead.

🌀 Coroutine Generators

  • generator<T> now supports lazy range construction
    You can now create lazy, single-pass STL-compatible ranges via jh::to_range(fn) using co_yield-based logic.

    Only available for non-send (i.e. U = monostate) generators.

🔒 Immutable Strings

  • Transparent key lookup support
    shared_ptr<immutable_str> can now be used in hash containers without explicit construction:
    if (pool.find("cached") != pool.end()) { /* ... */ }
  • ABI-stable layout, thread-safe access, and enhanced hash interoperability.

📦 New: POD-Only Package

A standalone archive jh-toolkit-pod-1.3.0.tar.gz is now available for header-only deployment of the pod module:

  • Extracts to: jh-toolkit-pod/
  • Easily embedded in external projects:
    target_include_directories(your_project PRIVATE external/jh-toolkit-pod/include)

Ideal for lightweight deployment, internal use, or projects that only need value-type utilities.


🛠 Modular Installation Modes

You can now selectively install toolkit components:

Build Target CMake TAR Value CMake Targets
POD only POD jh::jh-toolkit-pod
Full build ALL jh::jh-toolkit, jh::jh-toolkit-impl
Both POD,ALL All targets above

Enables precise dependency control for embedded or performance-critical use cases.


🧪 Performance & Usability Enhancements

  • Lightweight benchmarks added for immutable_str and runtime_arr
  • FastDebug mode (-O2 -g) enables faster CI without sacrificing reproducibility
  • Full support for unit testing via ctest with capped randomized iterations

🧱 Pythonic, STL-Compatible Design

JH-Toolkit continues to follow Python-inspired design principles:

  • 🧠 Duck typing and compile-time validation via concepts
  • 🔁 Lazy evaluation using coroutines and views
  • 🔒 Smart memory via RAII + pooling
  • 📚 Readable and expressive template interfaces
  • 🐍 Native snake_case naming for seamless integration with std

🧰 Toolchain Compatibility

Platform Compiler Notes
Linux GCC 12+ CI-tested with Ubuntu + GCC 12
macOS Apple Clang 16+ / LLVM Clang 16+ Use Homebrew LLVM if Xcode is outdated
Windows MSYS2 UCRT64 (GCC 13+) MSVC is explicitly unsupported

❌ MSVC is blocked at compile-time due to missing C++20 coroutine/range features.
✅ Recommended: WSL2 + GCC, or MSYS2 (UCRT64)


📥 Installation

Option 1: Clone the Latest LTS or Download Source Code from this Release

git clone --branch 1.3.x-LTS --depth=1 https://github.com/JeongHan-Bae/jh-toolkit.git

Option 2: Use Prepackaged POD Module

Download jh-toolkit-pod-1.3.0.tar.gz and extract to your project.


🔧 Build and Install

Full Build

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
sudo cmake --install build

Header-Only POD Build

cmake -B build-pod -DCMAKE_BUILD_TYPE=Release -DTAR=POD
cmake --build build-pod
sudo cmake --install build-pod

🧩 CMake Integration

find_package(jh-toolkit REQUIRED)

add_executable(my_project main.cpp)
target_link_libraries(my_project PRIVATE jh::jh-toolkit)
target_link_libraries(my_project PRIVATE jh::jh-toolkit-impl) # compiled components

✅ Test Installation of Entire Project

#include <jh/immutable_str>
int main() {
    auto pool = jh::pool<jh::immutable_str>();
    auto str = pool.acquire("Hello, JH Toolkit!");
    std::cout << str->view() << '\n';
}

📚 Core Modules

Module Description
pod Lightweight POD types (array, bitflags, optional)
runtime_arr Fixed-size runtime arrays with raw layout
generator Coroutine-based stream generators
views Lazy adaptors: zip, enumerate, etc.
pool Shared/weak pointer-based object pooling
immutable_str ABI-stable, thread-safe immutable strings

🌟 Looking Ahead in 1.3.x

  • Continued STL integration improvements
  • Coroutine micro-optimizations
  • More views and pipeline utilities
  • Type-safe factory tools for meta-programming

🤝 Contributing

Your feedback and contributions are welcome!


🚀 Thank you for using JH-Toolkit — built for expressive, modern, high-performance C++20 development. 🚀

🚀 JH-Toolkit v1.2.3 - First Stable Release of 1.2.x LTS

04 Mar 15:18
ef0d0a8
Compare
Choose a tag to compare

We are excited to announce the release of JH-Toolkit v1.2.3, marking the first stable version in the 1.2.x Long-Term Support (LTS) series! This release introduces key improvements in cross-platform support, build configuration refinements, and new usability features.


🔥 What's New in JH-Toolkit 1.2.3?

CMake Compatibility Enhancements

  • CMake build requirement lowered to 3.20+, ensuring broader compatibility with older Linux distributions.
  • CMake usage requirement remains at 3.14+, allowing seamless integration into existing projects.

🆕 New Feature: Unified Header Inclusion

  • Headers can now be included using both styles:
    #include <jh/header>
    #include <jh/header.h>
    This ensures a more flexible and user-friendly experience, accommodating different coding preferences.

🔄 Performance & Usability Improvements

  • Enhanced jh::immutable_str constructor:
    • Now supports construction from any type implicitly convertible to std::string_view.
    • Introduces safe_from(std::string_view, std::mutex&) for safe shared construction when dealing with mutable sources.
  • jh::pool<T> Enhancements:
    • Weak pointer-based content-aware pooling now integrates seamlessly with jh::immutable_str.
    • Automatic cleanup of expired objects—no need for manual tracking.
    • Custom hash & equality support for optimized storage of unique instances.

🛠 Cross-Platform Support Enhancements

  • Fully tested and optimized for Linux & macOS with GCC and Clang.
  • Windows MinGW support improved, but MSVC remains unsupported due to C++20 limitations.
  • Recommended for Windows ARM64: Use GCC within WSL2 for the best experience.

📌 Requirements

  • C++20 (mandatory)
  • CMake 3.14+ (for library usage)
  • CMake 3.20+ (for building & installation)
  • GCC 10+ / Clang 10+ (tested & supported)
  • Git (required for debugging mode compilation)

Ensure your project enables C++20 to avoid compilation issues:

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

📥 Installation & Usage

🔹 Get the Latest LTS Release (1.2.3)

git clone --branch 1.2.x-LTS --depth=1 https://github.com/JeongHan-Bae/jh-toolkit.git

👉 Or download from: JH Toolkit Latest LTS Release

🔧 Build and Install

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
sudo cmake --install build

🛠 CMake Integration

find_package(jh-toolkit REQUIRED)

add_executable(my_project main.cpp)
target_link_libraries(my_project PRIVATE jh::jh-toolkit) # For header-only modules
target_link_libraries(my_project PRIVATE jh::jh-toolkit-impl) # For compiled components

🔎 Usage Example

#include <jh/immutable_str> // or <jh/immutable_str.h>
#include <iostream>

int main() {
    auto pool = jh::pool<jh::immutable_str>();
    const auto str = pool.acquire("Hello, JH Toolkit!");
    std::cout << str->view() << std::endl;
    return 0;
}

🔍 Key Modules in JH-Toolkit

🌀 Coroutine-Based Generators (jh::generator<T, U>)

  • Lazy evaluation with range-based iteration support.
  • Supports send() for interactive coroutine communication.

🔒 Immutable Strings (jh::immutable_str)

  • Memory-level enforced immutability and thread safety.
  • Lazy hash computation for optimized performance.

🔄 Object Pooling (jh::pool<T> & jh::sim_pool<T, Hash, Eq>)

  • Weak pointer-based automatic cleanup, eliminating manual tracking.
  • Thread-safe pooling, optimized for immutable types.

📚 Sequence Concept (jh::sequence)

  • Provides compile-time validation of sequence-like types for safer API design.

🌟 Looking Ahead: Future Updates & Enhancements

The 1.2.x LTS series will continue to receive:

  • Cross-platform compatibility refinements.
  • Additional test cases and stability improvements.
  • Performance optimizations based on real-world usage feedback.

🤝 Contributing & Support

We welcome contributions! Feel free to open issues and pull requests on GitHub.

📌 GitHub Repository: JH-Toolkit
📖 Documentation: See the README.md for details.


🚀 Thank you for using JH-Toolkit! 🚀

JH-Toolkit v1.1.3

03 Feb 10:19
462d1f5
Compare
Choose a tag to compare

We are excited to announce the release of JH-Toolkit v1.1.3, marking the first stable version in the 1.1.x series! This release introduces powerful enhancements, making jh-toolkit even more robust, efficient, and developer-friendly.

🔥 What's New in JH-Toolkit 1.1.3?

Building upon the solid foundation of 1.0.x, the 1.1.x series brings key improvements:

Range-Based Iteration for Generators

  • jh::generator<T, U> now supports iterators (jh::generator<T, U>::iterator, actually an alias for jh::iterator<jh::generator<T, U>>).
  • Enables range-based for loops for generators where U == std::monostate.

🔒 Final Classes for Safety

  • jh::generator<T, U> and jh::immutable_str are now final, preventing unintended inheritance.

Explicit Copy Prohibition for Generators

  • jh::generator<T, U> now only allows move construction, ensuring safe and predictable behavior.

🔧 Stability & Cross-Platform Compatibility

JH-Toolkit v1.1.3 has undergone rigorous testing and is fully verified across multiple platforms:

  • Windows: Built and tested with MinGW.
  • macOS: Verified with both Clang and GCC.
  • Linux: Fully tested using GCC.

This ensures a seamless experience across diverse development environments.

📥 Getting Started

To integrate JH-Toolkit into your project, make sure you have C++20 support and CMake 3.14+ installed.

🔨 Build & Install

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
sudo cmake --install build

🏗 CMake Integration

find_package(jh-toolkit REQUIRED)

target_link_libraries(my_project PRIVATE jh::jh-toolkit) # For header-only modules
target_link_libraries(my_project PRIVATE jh::jh-toolkit-impl) # For compiled components

🌟 Looking Ahead: Future Plans for JH-Toolkit 1.2.x & Beyond

We are continuously improving JH-Toolkit to enhance your development experience. Upcoming features include:

  • Pooling mechanisms for immutable strings to optimize memory usage (planned for 1.2.x).

🛠 Contribute & Explore

We encourage you to explore the capabilities of JH-Toolkit v1.1.3 and provide feedback. Your contributions and insights are invaluable in shaping the future of this library.

📌 GitHub Repository: JH-Toolkit
📖 Documentation: See the [README.md](https://github.com/JeongHan-Bae/JH-Toolkit/blob/main/README.md) for details.

Thank you for your continued support! 🎉

Happy coding! 🚀

JH-Toolkit v1.0.1

03 Feb 10:04
306e036
Compare
Choose a tag to compare

We are thrilled to announce the release of JH-Toolkit v1.0.1 🎉, marking the first stable version in the 1.0.x series. This modern C++20 utility library introduces several powerful features to enhance your development experience.

Key Features:

  • Coroutine-Based Generators: Implement Pythonic yield mechanisms in C++20 for efficient lazy evaluation.

  • Immutable Strings: Experience true immutability with memory efficiency and thread safety.

  • Sequence Concept: Utilize a C++20 concept for compile-time validation of immutable sequences.

Cross-Platform Compatibility:

JH-Toolkit v1.0.1 has been verified on the following platforms:

  • Windows: Tested with MinGW.

  • macOS: Compatible with both Clang and GCC.

  • Linux: Tested with GCC.

This ensures a seamless experience across diverse development environments.

Future Aims in 1.1+.x versions:

  • Range-Based for Loop for Generators: We plan to introduce support for range-based for loops in generators to simplify iteration syntax. (might be in 1.1.x

  • Pooling for Immutable Strings: Implementing pooling mechanisms to optimize memory usage and performance for immutable strings. (might be for 1.2.x

Getting Started:

To integrate JH-Toolkit into your project, ensure you have C++20 support and CMake 3.14 or higher. Detailed installation instructions and usage examples are available in the README.md.

We encourage you to explore the capabilities of JH-Toolkit v1.0.1 and look forward to your feedback. For any questions or contributions, please visit our GitHub repository.

Happy coding! 🚀