Some checks are pending
docs / build-and-deploy (push) Waiting to run
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>
1,021 B
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"))
}
}