Adds the Http.* namespace and its transport, the HTTP client from #6. The JSON companion the proposal called for already shipped as Json.* (#44). - runtime/native/http.ll: the macOS transport — NSURLConnection driven through the objc runtime C ABI (no ObjC/C source), run on a detached pthread so the frame never blocks; TLS is the system's, on by default. A fixed slot pool holds each in-flight request; the worker publishes status/body/response behind an atomic done flag (release/acquire). Spliced + Foundation linked only when a program uses Http.*. - runtime/native/http.ludic: the Http.* runtime — get/post/request, the open/set/body/send builder, poll/status/ok/text/body_len/header/free, plus a pure-Ludic response parser (Http.parse + case-insensitive header lookup) that is transport-independent and portable. - compiler: Http.* dispatch, g_uses_http splice, hs_* transport intrinsics + declarations, the conditional Foundation link, and a new \r string/char escape the protocol needs. - docs: a full docs/language/http section (16 pages); check-impl/check-docs green. - test: examples/library/http.ludic self-asserts the parser offline (Darwin-gated build via the canonical path, since it links Foundation). Verified end to end against real endpoints: HTTPS GET (200 + headers + body) and POST (body + custom header). HTTP is out-of-band and never feeds the deterministic sim. Reseeded; suites green (81 + 29). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
20 lines
1.3 KiB
Markdown
20 lines
1.3 KiB
Markdown
bump: minor
|
|
type: feat
|
|
**HTTP client standard library (#6).** `Http.*` — a poll-based HTTP/HTTPS client
|
|
for out-of-band data (leaderboards, cloud saves, remote config, telemetry,
|
|
downloads). `Http.get` / `Http.post` / `Http.request` start a request (or
|
|
`Http.open` + `Http.set` headers + `Http.body` + `Http.send` to build one up);
|
|
`Http.poll` returns `-1` while pending, `0` on error, else the status code, so
|
|
the frame never blocks; `Http.status` / `ok` / `text` / `body_len` / `header`
|
|
read the reply, and `Http.free` releases it. TLS is the system's, on by default
|
|
with certificate verification — an `https://` URL just works. Pairs with the
|
|
`Json.*` companion (already shipped in #44): `Json.parse(Http.text(h))`.
|
|
|
|
The transport (`runtime/native/http.ll`) drives NSURLConnection through the objc
|
|
runtime's C ABI on a detached pthread — same hand-written-IR, no-ObjC/no-C style
|
|
as cocoa.ll — and is spliced with Foundation only when a program uses `Http.*`
|
|
(macOS for now). The response parser (`Http.parse`, header lookup) is pure Ludic
|
|
and portable, so the suite exercises it offline with no network. HTTP depends on
|
|
the network and wall clock and is explicitly out-of-band: it must never feed the
|
|
deterministic lockstep/replay simulation, like `Net.*` and `Time.now`. Also adds
|
|
the `\r` string/char escape the protocol needs.
|