Skip to content

Releases: tty-pt/libjoint

Release list

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 10:43

libjoint logo

  • HTOK ISO Date Ingestion (rec_axis_store_typed):
    • Exported rec_axis_store_typed allowing direct ingestion of ISO date strings and epoch intervals from libhyle-source's .tok binary containers into the interval index.
  • Linker Purity & Portable Build:
    • Removed hardcoded /home/ and -Wl,-rpath linker flags from root and test Makefiles.

Verification

gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMS

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 09:19

libjoint logo

  • 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 libstoma to liblemma.
  • Memory Footprint Optimization: Scaled down initial allocation footprints for interval and split buffers.

1.3.0

  • Renamed libit → libjoint: the it_* API is now joint_* (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, plus rec_axis_store/rec_axis_unstore/rec_axis_readback) plug joint's interval/overlap matching straight into the recall kernel with rec_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 -mfma build (was -O0), pointer-cast split compares (no 16-byte memcpy per comparison), a query-level match_arena replacing per-match mallocs, a block-list split_arena replacing per-split mallocs, and an ephemeral who_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.c exposed by UBSan (int overflow in timestamp arithmetic, int64 overflow in query-end) — both corrected to time_t/huge arithmetic.
  • libqmap → libcorm rename.

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