mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
2371b52ab4
BREAKING CHANGE: khash field access macros now require type name parameter Replace individual pointer fields (keys, vals, ed_flags) with single data pointer and address calculation functions. This reduces khash structure size from 32 to 16 bytes (50% reduction) while maintaining performance through pointer caching in hot paths. Structure changes: - Single void *data field replaces keys/vals/ed_flags pointers - Address calculation functions compute array locations on demand - Hot path functions cache calculated pointers for performance API changes (BREAKING): - kh_key(h, x) -> kh_key(typename, h, x) - kh_val(h, x) -> kh_val(typename, h, x) - kh_exist(h, x) -> kh_exist(typename, h, x) - kh_value(h, x) -> kh_value(typename, h, x) - KHASH_FOREACH() -> KHASH_FOREACH(typename, ...) Migration required: - mruby-metaprog: 4 call sites updated (familiar macro names, just add type parameter) - mruby-array-ext: no changes needed (uses function-style API) - External users: add type name as first parameter to field access macros Benefits: - 50% memory reduction per hash table (32 -> 16 bytes) - 464 bytes total memory savings in mrbtest execution - Better cache locality with smaller structures - Optimized hot path performance with pointer caching - Consistent with mruby memory-first design priority Co-authored-by: Claude <noreply@anthropic.com>