Skip to content

v0.10.0

Choose a tag to compare

@sdogruyol sdogruyol released this 25 Jul 08:29
· 392 commits to master since this release
db8781d

Added

  • macOS process GC (the headline): -Dgc_none + require "gcry" is a real collector on Darwin (arm64 + x86_64), Crystal ≥ 1.21 — not stubs.
    • STW: Mach thread_suspend / thread_resume (signal STW under HTTP was ~hang / ~2 req/s)
    • SP clamp: thread_get_state + pthread_get_stackaddr_np stack bounds
    • Static roots: dyld main-image __DATA / __DATA_CONST (__data / __bss / __common; skip __const)
    • Free-page RSS: host-page mach_vm_deallocate + allocate(FIXED) (Apple Silicon 16 KiB; MADV_DONTNEED does not drop Darwin RSS)
    • Defaults: page blacklist off (opt-in GCRY_BLACKLIST=1); large_cache_retain 0
    • CI: macos-latest native specs + samples
  • Gcry.register_set(T) — registers Hash(T, Nil) for Set backing maps.
  • GCRY_SCAN_CAPS=1 — optional whole-program instance_sizeof scan caps (fat-app live set often unchanged).

Changed

  • Layout builtins: broader curated coverage — primitive/String arrays, Set-backing hashes, Hash/Array + JSON::Any, IO::Memory (noscan buffer), more Deques. Still not whole-program GCRY_AUTO_LAYOUTS.
  • Layout correctness: Pointer(T) noscan uses !T.has_inner_pointers? (safe for Array(JSON::Any)). Hash keys/values with inner pointers word-scanned.
  • Mark: size-class mismatch falls back to scan_cap when present; precise entries store instance_sizeof.
  • Large objects: mmap aligned to Platform.host_page_size; LARGE_CACHE_LIMIT hard-caps freelist retain.
  • Blacklist: page granularity uses host_page_size.
  • Docs: Linux vs Darwin PERF / ACIKTURKIYE split; README highlights macOS.

Performance

  • macOS Kemal (0.10.0 cut, Apple Silicon, median of 3, scrub off): / ~97% of Boehm; /json ~90%; post-GC RSS ~0.96–0.97× — see docs/PERF-macos.md.
  • macOS acikturkiye /api/v1/ (median of 3): thr trial-median ~80%; post-GC RSS ~11.8× (dense conservative-live; reclaim works) — see docs/ACIKTURKIYE-macos.md.
  • Linux Kemal / acikturkiye cut numbers unchanged from 0.9.0 (this host is Darwin; re-record on Linux before citing a new Linux cut) — docs/PERF.md, docs/ACIKTURKIYE.md.