Skip to content

Fix: Guard Float16 APIs with #if arch(arm64) in core Swift bindings#739

Merged
ashvardanian merged 1 commit intounum-cloud:main-devfrom
JadenGeller:fix/float16-arch-guard
Apr 5, 2026
Merged

Fix: Guard Float16 APIs with #if arch(arm64) in core Swift bindings#739
ashvardanian merged 1 commit intounum-cloud:main-devfrom
JadenGeller:fix/float16-arch-guard

Conversation

@JadenGeller
Copy link
Copy Markdown
Contributor

@JadenGeller JadenGeller commented Mar 30, 2026

Summary

  • Wraps the four Float16 methods in USearchIndex.swift with #if arch(arm64), matching the existing guard in USearchIndex+Sugar.swift
  • Float16 is a type-level absence on x86_64 macOS — @available alone (added in Add iOS 14 availability declaration to Float16 APIs #610) is insufficient because the compiler rejects Float16 before runtime availability checks apply

Verification

  • Builds and archives successfully for generic/platform=macOS (universal, including x86_64)
  • Did not run swift test locally — the change only adds a compile-time guard around existing code

Fixes #589

Float16 is unavailable on x86_64 macOS regardless of OS version.
The @available annotation added in PR unum-cloud#610 is insufficient because
Float16 is a type-level absence on x86_64, not a runtime
availability issue.

The sugar file (USearchIndex+Sugar.swift) already has the correct
#if arch(arm64) guard. This commit adds the same guard to the
core USearchIndex.swift file for consistency.

Fixes unum-cloud#589
@JadenGeller JadenGeller marked this pull request as draft March 30, 2026 02:37
@JadenGeller
Copy link
Copy Markdown
Contributor Author

JadenGeller commented Mar 30, 2026

Whoops, Claude opened this PR for me without my permission. I guess I'll mark as draft, and I'll update to ready for review if this fix works for me and if I review the diff and make sure it follows contribution guidelines.

Update: Yeah this seems right to me, gunna mark ready.

@JadenGeller JadenGeller marked this pull request as ready for review March 30, 2026 02:52
@ashvardanian ashvardanian merged commit 5bcf787 into unum-cloud:main-dev Apr 5, 2026
@ashvardanian
Copy link
Copy Markdown
Contributor

Thank you, @JadenGeller! Sorry it took a while, was busy refining the NumKong CI & binding layers while the core logic was fresh in memory 🤗

ashvardanian pushed a commit that referenced this pull request Apr 15, 2026
### Minor

- Add: Native UInt8 `u8` API and Float6 `e2m3` & `e3m2` quantization (e4db172)
- Add: Float8 support with E5M2 & E4M3 (bf80af8)
- Add: Uniform hardware caps queries across SDKs (11f4d5c)
- Add: expose `memory_stats` through Rust FFI bindings (d5a04f8)
- Add: `memory_stats_t` struct with per-tape breakdowns (8f6f8f6)

### Patch

- Fix: Harden `min` & `max` symbols for MSVC (a270651)
- Fix: Over-allocate & in-align striped locks (7aee20f)
- Improve: Print stack-traces in test singal-handlers (94c7ec9)
- Make: Bump NumKong to v7.5 (c666f16)
- Docs: Benchmarks table formatting (95963ff)
- Improve: Extended `uint8` interfaces for Java, Swift, ObjC, JS (82e1196)
- Improve: Smaller & faster `striped_locks_gt` (4a47d18)
- Docs: SIFT & BigANN subsets (1c60c6c)
- Fix: ObjC compilation issue for `b1x8` (d54383d)
- Improve: Reuse `eval.random_vectors` in scripts (2b7f469)
- Improve: New benchmarking suite (4f6d2d7)
- Improve: Type annotations for Python SDK & scripts (c39b15b)
- Improve: Extended `bench.cpp` & datasets for 100M scale (dac569c)
- Make: Split flaky CIBW jobs & add retries (5e0139f)
- Make: Drop deprecated SPDX license expression (#744) (145272f)
- Make: Drop EOL language versions and standardize CI runners (0a803a9)
- Fix: Don't compile NumKong C sources into macOS wheel (2c44fb0)
- Make: Bump deps for MSVC compatibility (36981b0)
- Fix: Re-generate JNI header for `hardware_acceleration` checks (1a3a86e)
- Make: Newer `/Zc:preprocessor` for MSVC in `binding.gyp` (79cd39f)
- Fix: NumKong dispatch for Sorensen and binary vector dimensions (5546dd6)
- Fix: Use `RAND_MAX` instead of `INT_MAX` for random test vectors (d45a616)
- Make: Use "Trusted Publishing" for NPM (8a02676)
- Fix: PyTest module collision & PeachPy on Python 3.11+ (8ed2548)
- Fix: MSVC type-conversion warnings (#709) (98486cd)
- Improve: Test remove/rename/multi in Rust (17dfac3)
- Make: Arm32-friendly NumKong version (6f65872)
- Fix: Move-safe init for Rust SDK (#704) (05b5eb0)
- Fix: Check for `config.expansion` early in `add` (fb2e2f7)
- Fix: Stale vector references in `refine_` within `index_get::update` (#731) (451e2d5)
- Fix: Deduplication logic in `form_reverse_links_` (#729) (9ea8233)
- Make: Switch to Ruff linter (#737) (bff98ed)
- Fix: OpenMP flags forwarding in `build.rs` (#724) (46256a2)
- Fix: Heap-buffer-overflow in HNSW search via sorted_buffer_gt (5697c60)
- Fix: Serial Float16 conversion fallbacks (49b8b2c)
- Make: Avoid `npm ci` in non-dependency-locked state (42e9203)
- Make: Bump Clang due to LLVM optimizer bug (5bd15bb)
- Make: Don't version removed dependency lock files (62724d4)
- Fix: Hash set iterator returns deleted tombstones in `equal_range` (#727) (7d95f6f)
- Fix: `MAP_FAILED` on Windows (#742) (786a7d9)
- Fix: Escalate `MAP_FAILED` on POSIX (#722) (ba47347)
- Fix: Strip nested sub-directories from package distributions (#733) (3832c02)
- Fix: Guard Float16 APIs with `#if arch(arm64)` in Swift SDK (#739) (5bcf787)
- Docs: Rust `Cos` metric docstring (#734) (c9ff5b8)
- Fix: Avoid `IntPtr` global out-of-scope alias in C# (5413341)
- Improve: Expose & test Float8 in Java, ObjC, Go, JS, Rust (bebb539)
- Fix: Stale symbol name in `join` demo (ef0dc4f)
- Improve: Allow non-sequential vector IDs in `bench` (11bcde1)
- Make: Pull NumKong from PyPi (1b46d1b)
- Make: Pull NumKong via CMake (b0f8708)
- Make: Pull SwiftPM NumKong dependency (eede286)
- Make: Pull NumKong crate (46347ec)
- Make: Switch from SimSIMD v6 to NumKong v7 submodule (b2361c3)
- Docs: Link capitalization (98eeb9e)
- Fix: Set equality comparison in Numba JIT PyTest (30381b7)
- Fix: Avoid duplicate neighbor slots in HNSW reverse links (#699) (6995246)
- Fix: Postfix operators for member/candidate iterators in `index_gt` (#718) (7fbf086)
- Fix: Potential UB in `index_dense::add` (#721) (6b69e95)
- Fix: Accurately track total allocated memory in `memory_mapping_allocator_gt` (#608) (3c25f20)
- Fix: Python `serialized_length` missing argument (#714) (5cde3fc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants