Releases: JeongHan-Bae/JH-Toolkit
🚀 JH-Toolkit v1.3.1 — Conan Packaging Support + POD Hashing Update
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
andpod::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
✅ UseALL
orPOD,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
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 thanstd::vector<T>(N)
in fully-initialized cases.
🔁 Ranges and Views Interop
sequence
+jh::to_range(seq)
sequence
concept now enablesstd::ranges::input_range
-compatible views for smooth STL integration.- New module:
jh::views
Introduces lightweight, allocation-free adaptors (enumerate
,zip
) forsequence
instead ofranges
, with no RTTI overhead.
🌀 Coroutine Generators
generator<T>
now supports lazy range construction
You can now create lazy, single-pass STL-compatible ranges viajh::to_range(fn)
usingco_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
andruntime_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 withstd
🧰 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!
- 📂 GitHub: JH-Toolkit
- 📝 Documentation: README
🚀 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
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:
This ensures a more flexible and user-friendly experience, accommodating different coding preferences.
#include <jh/header> #include <jh/header.h>
🔄 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.
- Now supports construction from any type implicitly convertible to
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.
- Weak pointer-based content-aware pooling now integrates seamlessly with
🛠 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
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 forjh::iterator<jh::generator<T, U>>
).- Enables range-based for loops for generators where
U == std::monostate
.
🔒 Final Classes for Safety
jh::generator<T, U>
andjh::immutable_str
are nowfinal
, 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
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! 🚀