Repository navigation
Releases: tty-pt/libjoint
Releases · tty-pt/libjoint
Release list
v1.6.0
- HTOK ISO Date Ingestion (
rec_axis_store_typed):- Exported
rec_axis_store_typedallowing direct ingestion of ISO date strings and epoch intervals fromlibhyle-source's.tokbinary containers into the interval index.
- Exported
- Linker Purity & Portable Build:
- Removed hardcoded
/home/and-Wl,-rpathlinker flags from root and test Makefiles.
- Removed hardcoded
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.4.0
- Cormr Recall Kernel Integration: Updated to consume
<ttypt/corm.h>and<ttypt/cormr.h>, aligning with the domain-free Recall Kernel architecture. - Lemma Text Indexing Alignment: Updated ecosystem references and test fixtures from
libstomatoliblemma. - Memory Footprint Optimization: Scaled down initial allocation footprints for interval and split buffers.
1.3.0
- Renamed
libit→libjoint: theit_*API is nowjoint_*(include/ttypt/joint.h,it.pc→joint.pc;LIBIT_LIMITATIONS.md→JOINT_LIMITATIONS.md). Renames span the whole walker/splitter read model while the interval-tree semantics stay intact. - Kernel composition: new
rec_axis_*adapters (rec_axis_fill_interval,rec_axis_open, plusrec_axis_store/rec_axis_unstore/rec_axis_readback) plug joint's interval/overlap matching straight into the recall kernel withrec_ref_t(uint32_t) refs; all axis parameters are CLI parameters. - Sweep-line performance tiers: public API unchanged; all work is in the query/split path (
joint_iter→joint_next) —-O3 -mpopcnt -mavx2 -mfmabuild (was-O0), pointer-cast split compares (no 16-bytememcpyper comparison), a query-levelmatch_arenareplacing per-match mallocs, a block-listsplit_arenareplacing per-split mallocs, and an ephemeralwho_set(open addressing) replacing the per-gap temp corm. Query benchmarks: 1k overlap query 48.5×, 3k overlap query 48×, 1000 insert/query cycles 6.8×, sparse query 6.2×, splits(100) 5.5× faster (medians;make bench). - Bug fixes: two latent signed-integer overflows in
src/test_extended.cexposed by UBSan (intoverflow in timestamp arithmetic,int64overflow in query-end) — both corrected totime_t/hugearithmetic. libqmap→libcormrename.
Performance (medians, µs; make bench on one loaded box)
Baseline = pristine -O0 build (medians of 3); optimized = this tree
(medians of 9). Same machine, same load window.
| Bench | Baseline | Now | × |
|---|---|---|---|
| 10k insert | 35 734 | 16 137 | 2.2 |
| query-all (10k) | 3 673 044 | 1 601 764 | 2.3 |
| 1k overlap insert | 9 234 | 5 258 | 1.8 |
| 1k overlap query | 5 444 | 326 | 16.7 |
| sequential 5k | 2 267 215 | 1 287 717 | 1.8 |
| sparse query | 81 | 13 | 6.2 |
| splits (100 ent) | 343 | 62 | 5.5 |
| 1000 insert/query cycles | 180 756 539 | 26 737 804 | 6.8 |
| 15k insert | 45 691 | 21 613 | 2.1 |
| 15k range query | 2 034 606 | 997 656 | 2.0 |
| 3k overlap insert | 52 867 | 30 614 | 1.7 |
| 3k overlap query | 62 079 | 1 281 | 48.5 |
| 20k insert | 93 440 | 33 995 | 2.7 |
| 20k range query | 1 683 350 | 801 620 | 2.1 |
Absolute numbers swing 2–5× with machine load (both columns measured in
the same window, so ratios are like-for-like). All 74 tests pass
(./test.sh); ASan+UBSan clean (manual build, detect_leaks=0 — the
iterator arena is intentionally never freed; no teardown API exists, as
before). Valgrind out of scope per project policy.
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMS