ludic/docs/language/hash/hash-fnv1a_64.md
Orkuncakilkaya 2002e977d9
Some checks are pending
docs / build-and-deploy (push) Waiting to run
feat(lang,stdlib): 64-bit long type + 64-bit Hash variants (issue #17)
Add `long`, a 64-bit signed integer primitive (i64), threaded through
codegen: llty; int<->long coercion (coerce_code/to_long) at let/assign/
return/call-args; i64 arithmetic + comparison promotion in emit_bin;
unary negate/~; print via %lld and str()/interpolation via @fn_long_str.
Editor vocabulary (syntax header, TextMate grammar, formatter, LSP)
synced; check-vocabulary green. Numeric literals stay i32 — build large
values by widening (documented on the type page).

Complete the Hash.* namespace (issue #17) with both 32- and 64-bit
algorithms: Hash.of/fnv1a/crc32/mix/combine (32-bit) and
Hash.of64/fnv1a_64/mix64 (64-bit, returning long). Deterministic and
C-free; CRC-32 (poly 0xEDB88320) and FNV vectors verified against
reference implementations.

Tests: selfhost/tests/{hash,long}.ludic. Docs: docs/language/hash/*,
type-long.md. Seed reseeded; C-free bootstrap fixpoint holds; 23
selfhost + 45 regression + 29 tooling checks green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-30 01:01:06 +03:00

1,021 B

id name category kind tokens sig tip order ns member
hash-fnv1a_64 Hash.fnv1a_64 hash namespace-method Hash.fnv1a_64 Hash.fnv1a_64(s) -> long FNV-1a 64-bit, named explicitly. 7 Hash fnv1a_64

The 64-bit FNV-1a hash of a string's bytes, returned as a long. It uses the standard 64-bit offset basis 0xcbf29ce484222325 and prime 0x100000001b3: for each byte, XOR it in and multiply by the prime. Its wider output makes accidental collisions vanishingly unlikely for the id and registry use cases games hit. This is the function Hash.of64 delegates to; call Hash.fnv1a_64 when you want the algorithm pinned by name.

Parameters:

  • s — the string to hash
program Fnv64 {
  entry {
    print(Hash.fnv1a_64(""))            # the empty string -> the 64-bit offset basis
    print(Hash.fnv1a_64("grass_tile"))
  }
}