Skip to content

Bit 0.15.0

Choose a tag to compare

@mdwekat mdwekat released this 13 Sep 03:50
7eb45c6

Bit 0.15.0

Features

  • feat(pkg/mysql): rewrite $N placeholders to ?, with the corpus that proves it never misfires (74fbf1c)
  • feat(pkg/mysql): COM_STMT_PREPARE/EXECUTE binding, typed errors and the statement cache (792be17)
  • feat(sql): find/findOne/findOneOrFail map a query result into a typed T (b08000f)

Fixes

  • fix(scripts): keep the build log the refusal path names (5883c83)
  • fix(pkg/mysql): count ? markers, not distinct parameters, against the server's prepare (0d3feb4)
  • fix(stress): re-sample load before wave 2 so the batch deadline can scale (4d1bdd3)
  • fix(stress): resample load per wave-2 job, not just once before the wave (ec04e3d)
  • fix: re-point stale spec/SPEC.md:3193 citations to :3243 (4b28718)

Compiler

  • slice 1: decimal as a predeclared scalar, with its §15.4 literal and §12.9 conversion rules (b419245)
  • isKnownSubcommand asks the dispatch table instead of a second name list (7c9337e)
  • bit upgrade: replace an install.sh install with the newest release (9f36208)
  • upgrade.bit: cite osSelfExe and the observed brew keg path (c0e70fa)
  • fixmain: pre-push reds on e4cb1e3 — primIndexByName/lowerExprH back under their complexity baselines (aliases and tag dispatch split out), std/sql Pool.begin removal allowlisted for (595abf6)
  • parser: split the literal/access productions out of parserexpr.bit into parserlit.bit (bda025c)
  • fmt reaches its fixpoint in one pass for a comment-only arrow body (d2aa8aa)
  • slice 1a: pin decimal as two i64 words at widthOf and fieldLayoutFor (1ef2dd6)
  • parser: JSX elements and fragments at expression start (7e16c0f)
  • keep a trailing block-bodied arrow argument attached to its call (9809b00)
  • spec+gate: JSX grammar, the disambiguation table and the whitespace rule (691c400)
  • parser: pay the two lint findings the JSX split introduced (5cf0183)
  • slice 1b: a decimal VALUE is two i64 words in the lowerer (38c0747)
  • slice 1b: println/interpolation of a decimal renders the exact value (16489c8)
  • --dump-ast renders parse errors to stderr and exits 1 (7a09708)
  • JSX: desugar self-closing lowercase elements into elem/attr calls (afbccc0)
  • slice 1b: a decimal class field is 16 inline bytes, read and written as two i64 field_get/field_set (847dec1)
  • teach bit fmt to print JSX elements and fragments (73ed8c2)
  • slice 1b: a decimal return and a decimal field set in a composite literal (e471174)
  • resolve the runtime archive path once, not twice, for the missing-archive message (887fffb)

Runtime

  • WIP: task-local storage slot in the task control block, copy-on-spawn (607a19b)
  • derive mainTaskBlock/tasks array sizes from taskWords (b5764d5)

Standard library

  • std/time: parseDate/parseTime/parseNaiveDateTime/parseDateTime/parseWith (2dc22d9)
  • std/runtime: runRecovering(f) — the per-task panic boundary surface (cedfbd4)
  • std/tls client: accept an optional CertificateRequest and answer it empty (e1dca8d)
  • std/time: Umm al-Qura Hijri display — Date.hijri(), HijriDate, hijriDate() (9c95a11)
  • std/tls: format certrequest.test.bit (ccc4d35)
  • std/time: bit fmt canonical form for hijri.bit and hijri.test.bit (e1d4295)
  • keep the TLS client transcript distinct from ch1 (84b80d7)
  • std/sql: closure-scoped transactions (2ab4e40)
  • std/sql: document tx() and retire the public Pool.begin (def2b91)
  • delete std/time's superseded Civil calendar API (41bd6ec)
  • stdlib/time: implement today(z: Zone): Date (f1fa20d)
  • stdlib: add std/trace — spans, W3C traceparent, OTLP/HTTP JSON exporter (5d312c1)
  • stdlib/time: factor today()'s clock read out into todayAt (6b806b2)
  • stdlib/trace: fix fmt, lint-self, lint-complexity findings (b5ee6fd)
  • std/time: add extend() extension point with host-wins zone() fallback (4ec719d)
  • std/time: bit fmt extend.bit and extend.test.bit (de350c3)
  • std/tz: check in the generated IANA database, wire time.extend(tz.data) (bd854f2)

Tests

  • gcretention: builder_min512 pin re-derived 56890/3135 -> 56889/3136; the 0.14.0 stage0 repin moved one builder object from swept to live (3021236)
  • test(golden): recover a panic raised in a spawned task (d9ddd7c)
  • re-pin ir_field_after_inbody_method's $tN monomorphization suffix (t21 -> t22) (0380115)
  • copy the panic message into the boundary record at take time (6ca0e48)
  • widen the recovery window in the panicboundarymsg oracle (c04b972)
  • slice 1b: a // run fixture holding decimal locals and a decimal parameter (7e043cc)
  • Fix decimal class field default corruption in fillOmittedFields (4bda533)
  • slice 2: desugar JSX children, fragments, and uppercase component calls (860f9ab)
  • fix gate failures found by test-stress-batch/test-docs (d48fb8a)
  • census re-derived after rebase — main reached 482 // run independently, so this branch's added case makes 483 (16043e9)
  • derive 31 stress-fixture task-block array sizes from taskWords (0ff9c2e)
  • fixmain: format the two JSX fixtures added, and re-pin check_jsx_component_props.expected to the positions the formatter produced (35874c8)
  • Diagnose a bare namespace import used as a value at check time (E0147) (62abf1d)
  • fixmain: format tests/bit/taskwordssizing.bit, which landed unformatted (ada310b)
  • tests/bit/noemdash.bit: fmt-canonical + silence E0214 on the accumulator (2f62524)
  • tests/bit/noemdash.bit: drop the em dash from the gate's own PASS/FAIL output (26d5bc3)
  • noemdash gate: skip the gitignored dist/out/ build output (ef1bfa4)
  • noemdash: gate pkg//docs/, not just the package READMEs (f8e42a2)
  • compiler: @table synthesizes a neutral tableDescriptor() (8ad4051)
  • tests/bit/checkercases: fix stale spec/SPEC.md:2246 line citations (88fcbe1)
  • compiler: E0150 for a @table class missing the std/sql import (96f2f58)
  • tests/cases/run_table_desc: cover AttrDesc.args rendering (fdccdba)

Documentation

  • pkg/mysql: a MySQL and MariaDB driver for std/sql (aebd000)
  • pkg/mysql: document the std/tls CertificateRequest gap that blocks TLS live (edc19e5)
  • test(pkg/mysql): the prepared-statement pieces that need no server (f2e8dc7)
  • test(pkg/mysql): the live acceptance for a reused $1 and a 1062 error (817f36a)
  • docs(stdlib/tls): document CertificateRequest, its codec and hsCertificateRequest (cec5606)
  • pkg/mysql: the MariaDB live test expects REQUIRED, not DISABLED (da863ea)
  • pkg/mysql: MY_TEST_STRICT_URI gets its own no-TLS container (d8dfc32)
  • slice 3: SPEC §5.3/§11.1/§12.9/§13.4/§15.4 and docs/reference/types.md for decimal (72ccd04)
  • std/sql: canonically format the tx() doc snippets (b88a92b)
  • pkg/postgres: extended query protocol, typed SQLSTATE errors, opt-in LRU statement cache (17bb884)
  • pkg/postgres: live acceptance for the extended protocol against a real server (47760b9)
  • pkg/postgres: document the query layer, the opt-in cache and the SQLSTATE surface (2bd4fbd)
  • sweep the tree for the trailing-arrow rule (55e0061)
  • pkg/web/static: close the symlink-swap TOCTOU with O_NOFOLLOW on the read (e083b8a)
  • docs/stdlib/fs.md: document openNoFollow and readFileNoFollow (8079478)
  • pkg/web: recover() middleware turns a handler/middleware panic into a 500 (c0478e1)
  • pkg/web/static.test.bit: prove the symlink-swap refusal deterministically (2583d44)
  • docs/stdlib/time.md: unfence today()'s example, its own function shipped (4f8fc9b)
  • pkg/web/adapter.test.bit: fix stale panic/recover comment (a751253)
  • pkg/web/middleware.test.bit: fix stale panic/recover comment (7ea72b3)
  • pkg/web: add tracing() middleware, built on std/trace (1b55d6c)
  • Fix five stale claims that Bit cannot catch a panic (589f1d4)
  • pkg/web: Res holds the value and its serialiser, so wrap/mapValue never decode (08afd26)
  • pkg/web: wrap()/mapValue() pass through a valueless Res instead of panicking (96c51fc)
  • fixmain: document std/time extend(), which shipped with no docs section, and drop the superseded pkg/tzdata line from zone() (35f1f49)
  • fixmain: drop the two em dashes I added to docs/stdlib/time.md — the standing owner rule is no em dash in reader-facing prose (2665f9a)
  • docs/pkg/spec/dist: remove every em dash from reader-facing prose (4abd1e3)
  • docs/stdlib/tz.md: document std/tz's data and release exports (86d1787)
  • pkg/web: add envelope() middleware for a unified success/error response shape (3ac76b9)
  • pkg/README.md: a package's docs are a docs/ tree of chapters, not a longer README (9baba86)
  • pkg/postgres: split the README into a docs/ tree in reading order (3bf4295)
  • pkg/redis: split docs/ into connecting, commands, RESP2 chapters; shrink README to a front page (fc65196)
  • pkg/redis/docs/resp.md: wrap nested match arm in braces per language precedent (426caee)
  • pkg/web: split the README into docs/, redistributing every existing section (447999c)
  • pkg/mysql: split the 190-line README into a docs/ tree, seven chapters (f392f92)
  • pkg/postgres: fix the import name in every doc sample to the bit-add key (e3d6880)
  • pkg/mysql: fix the import spelling in every sample to match bit.lock's key (68c3491)
  • pkg/{postgres,mysql}/adapter.bit: the header sample imports the name bit add writes (90e65a0)
  • pkg/web/docs: fix import spelling to the real bit.lock dependency key (34b781e)
  • pkg/web: export Bind.unknown, so the documented bodyWith call compiles (b58e450)
  • pkg/README.md: the tag publishes a package's documentation, not the merge (935544b)
  • docs/stdlib/sql: document FieldDesc and AttrDesc, the @table descriptor types (701bae5)
  • pkg/web: document envelope() and the page()/$page pagination convention (84a4e0a)
  • pkg/web/docs/envelope.md: fix missing std/json import, verify blocks fresh (7f9acbc)
  • docs/stdlib/sql: remove two em dashes (65f3f89)

Build and tooling

  • repin stage0 to 0.14.0 (v0.14.0 at 76df603), four digests replaced, header records the move (09547c0)
  • selfhost-diffruntime: RELOC_DECLARED emptied, the 0.14.0 pin caught up with the seven inlined leaves (9ded6d7)
  • release-verify: the stage0 pin check derives the expected line count from the file (four triples since ), no hardcoded 3 (27d2d0b)
  • verify a pre- tag by falling back to the caller's abitwopass tooling (2792079)
  • install.sh/upgrade.sh: capture the releases/latest body instead of piping into grep -m1 (2f4fc51)
  • selfhost-diffdump.sh's ast/tokens/diags row stops conflating exit status with a tree divergence (2a3d252)
  • fix selfhost-diffdoc.sh's fabricated-mismatch risk from a merged stdout+stderr capture (d3879d7)
  • add test-taskwords-sizing, a gate that every schedTaskInit array-base site sizes via taskWords (d6670ae)
  • gate.sh: wire test-taskwords-sizing into the runtime bucket and the stress arm (905baee)
  • tools/gentzdata: generate stdlib/tz/data.bit from a zoneinfo directory (3bf7d4d)
  • tools/gentzdata: correct the documented run line — the file target is refused for a directory module, it must be 'bit run tools/gentzdata' (6e9a42e)
  • tools/build: register test-no-emdash, a Gate{}+Step{} zero-em-dash check (df9efc3)
  • hostTriple() treats an empty read as "could not determine the host" (42ac982)
  • Add test-package-release-drift: gate pkg/ imports against the newest release tag (7e2fabd)

Benchmarks

  • bench: regenerate README/RESULTS/history for the 0.15.0 release, measured at 52be55d on a quiet box (d83a10f)

Artifacts

Published for x86_64-linux, aarch64-linux and aarch64-macos.
See dist/README.md for the full target table, the archive layout,
the required BIT_STDLIB/BIT_LIBBITRT environment, and the
SHA256SUMS format.

Verify a download before running it:

sha256sum --check --ignore-missing SHA256SUMS # shasum -a 256 on macOS

Full commit log: v0.14.0..HEAD