feat(lang,stdlib): 64-bit long type + 64-bit Hash variants (issue #17)
Some checks are pending
docs / build-and-deploy (push) Waiting to run
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>
This commit is contained in:
parent
a38195128f
commit
2002e977d9
27 changed files with 14007 additions and 12105 deletions
28
docs/language/hash/hash-crc32.md
Normal file
28
docs/language/hash/hash-crc32.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
id: hash-crc32
|
||||
name: Hash.crc32
|
||||
category: hash
|
||||
kind: namespace-method
|
||||
tokens: Hash.crc32
|
||||
sig: Hash.crc32(s) -> int
|
||||
tip: CRC-32 checksum for corruption detection.
|
||||
order: 3
|
||||
ns: Hash
|
||||
member: crc32
|
||||
---
|
||||
|
||||
The <a href="https://en.wikipedia.org/wiki/Cyclic_redundancy_check">CRC-32</a> checksum of a string's bytes — the standard IEEE 802.3 variant (reflected polynomial <code>0xEDB88320</code>), the same one used by zip, gzip and PNG. Its well-known check value: <code>Hash.crc32("123456789")</code> is <code>0xCBF43926</code>. Use it to catch accidental corruption in a save file, downloaded asset, or config blob: store the checksum alongside the data and compare on load. It detects damage, not tampering — an attacker can trivially forge a matching CRC, so it is not a security check (see the section note).
|
||||
|
||||
Parameters:
|
||||
- `s` — the string (bytes) to checksum
|
||||
|
||||
```ludic
|
||||
program Checksum {
|
||||
entry {
|
||||
let data = "save:level=3;coins=120"
|
||||
let ck = Hash.crc32(data) # store this next to the save; recompute on load
|
||||
print(ck)
|
||||
print(Hash.crc32(data) == ck) # 1 — unchanged data checks out
|
||||
}
|
||||
}
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue