Skip to content

Bit 0.33.0

Choose a tag to compare

@mdwekat mdwekat released this 28 Sep 23:02
· 1475 commits to 945fa57bcecbb5446737669d43fd8eae3b0f7caa since this release
e1e6276

Bit 0.33.0

Breaking changes

  • append checks what you add. append(dst, src) with a whole slice src is an error: write append(dst, ...src) to add its elements. Adding a value of a different number type, such as an int to a []byte, is an error: convert it first (byte(v)).
  • std/quic and HTTP/3 (https+h3://) verify the server's certificate against the system trust store by default, as std/tls and https:// already did. To trust a private CA, pass a TlsConfig: dialQuicTls, h3DialTls, or getTls/requestTls/newClientTls with an https+h3:// URL. TlsConfig.serverName now overrides the name a QUIC dial checks, as it does for TLS over TCP.

Features

  • Map literals {k: v, ...}, static methods, generic argument explosion and dead-parameter/dead-method elimination are on by default.
  • @json classes and find<T> row mapping no longer need Json, JsonEntry or Rows imported; any import from std/json or std/sql is enough.
  • jsonSchema<T>() describes classes, enums, optionals, nested and generic types as JSON Schema.
  • bit prof <file.prof> renders a std/prof profile from the installed toolchain; samples outside the program show on their own row.
  • pkg/web 0.8.0: App.openApi() renders an OpenAPI 3.1 document from the real route table. pkg/jobs 0.1.0: background jobs with @job, register<T> and enqueue<T>.
  • Documentation: The Bit Book (33 chapters building one app), a single Get started page, and a Tools section on bitlang.org.

Notable fixes

  • The macOS monotonic clock could divide by zero when two threads read it for the first time at once (seen under BIT_GC=stress).
  • x86_64: an asm block's pinned or clobbered callee-saved registers are saved and restored.
  • A method's receiver type parameter no longer stands in for the callee's own, so Option<T> results substitute correctly.

Fixes

  • fix(docs): point the two fresh-append citations at slicesappendfresh.bit (18cd91d)

Performance

  • perf(compiler): prove loop-accumulator appends unshared, append in place (51faa09)

Compiler

  • compiler: @json accepts a payload-free enum field, toJson/__jsonAppend only (858d958)
  • jsonSchema: move E0172 to E0173, main took E0172 for static fn (b3433fc)
  • compiler: import wiring for cross-module jsonSchema calls (d288a4b)
  • compiler: jsonSchema() gives a cross-module nested class a $defs entry (26a4e77)
  • flip generic explode on unconditionally, drop the BIT_STRING_EXPLODE escape (5a3203a)
  • Flip BIT_DCE_PARAMS and BIT_DCE_METHODS on unconditionally (a181118)
  • Regenerate 2 selfcheck IR pins for unconditional block-param pruning (2b88e37)
  • Revert ": flip generic explode on unconditionally, drop the BIT_STRING_EXPLODE escape" (d1db577)
  • Scope correction: default BIT_DCE_PARAMS/BIT_DCE_METHODS ON, keep escape hatch (c84eabb)
  • BIT_GENERIC_EXPLODE default ON (=0 escape until the 0.33.0 repin) (a994be3)
  • Default BIT_MAPLIT and BIT_STATIC_METHODS ON, forced ON for the stage0 diff family (c949c0e)
  • MUTATION (not for merge): revert the savedGpr fix to prove the golden case catches it (12dc13f)
  • Revert "MUTATION (not for merge): revert the savedGpr fix to prove the golden case catches it" (6e0a796)
  • classjsonschemageneric.bit collects jsonSchema generic forwarding, mirroring (8334280)
  • optappendfield: prove field-held append accumulators unshared module-wide (6dca325)
  • classjsonschemagenericretarget.bit validates + retargets jsonSchema generic-forwarding ledger entries, mirroring the classjsondecodegenericretarget.bit (dbb9f8c)
  • wire jsonSchema generic-need collection into classjsonschemacall.bit and synthtext.bit's SynthPlan (92ee109)
  • optappendfield: own fields past pops, literal inits and guarded RMW reads (9183661)
  • optappendborrow: a call that only borrows a local accumulator is not an escape (707b910)
  • optappendfield: an owned field's one escape takes a header copy (2528b04)
  • optappendfield: calls to calm functions and polls stop separating a field read (d79c794)
  • Re-point doc paths the site restructure moved (tools/packages, development/iterator-trait, development/lint-*) (e6572d0)
  • compiler: ship bit prof <file.prof> for the release binary (d02be75)
  • compiler/prof: a sample outside every function's code is its own row, not the last symbol's (c5780f8)

Runtime

  • runtime/park/darwin: parkMonoNs divides only by a timebase pair it checked, so a half-published cache cannot divide by zero (6758169)

Standard library

  • stdlib/quic: reply CONNECTION_CLOSE(CONNECTION_REFUSED) instead of dropping a refused Initial (6484664)
  • stdlib/http/h3shutdown.test.bit: fix stale comment about the mid-drain dial (7447e56)
  • quic: verify server certificates by default (db86647)
  • quic/http: fix h3 SNI override and requestTls's missed h3 route (dd9dc35)

Tests

  • fix 6 spec/SPEC.md line-number citations shifted by the insertion (73c3925)
  • compiler: jsonDecode support for payload-free enum fields (39ffa2b)
  • compiler: jsonSchema schema-builder, call-site rewrite and stdlib declaration (d7bf78d)
  • fix fmtcitationsmdsection.bit citation shifted +1 by the rebase onto main (1e5bbe9)
  • compiler: transitive $defs/$ref closure for jsonSchema (55e89fa)
  • jsonSchema: close the epic, SPEC accuracy fix, byte-identical proof (026e6c4)
  • std/json: jsonSchema field validation attributes as x-bit-attrs (6edaf55)
  • reword three historical BIT_STRING_EXPLODE mentions after the flag's deletion (5b5a620)
  • Regenerate 4 golden IR fixtures for unconditional block-param pruning (f8f937d)
  • flip BIT_TABLEDESC_KNOWNATTR/BIT_STATIC_CONST on, migrate the enum type-assert test into the corpus (5aa7520)
  • Revert ": reword three historical BIT_STRING_EXPLODE mentions after the flag's deletion" (777cf2c)
  • checkercases: re-point two SPEC.md citations that the rollout-paragraph removal shifted (3f0b32b)
  • x64: save callee-saved GPRs an asm block pins or clobbers (7383f48)
  • Fix foreignTypeDeclParam to scan every module, not just the caller's own (46b6d13)
  • golden census: dRun 552, and each added one run case against the same 550 base (eb99d42)
  • rollout-flip fallout - DCE masking on two probes, re-derived benchgate/gcretention baselines, split diffdump under 800 lines (5b8e501)
  • fmtcitationsmd: re-point the match-binder-arity citation to the sentence's current line (6d46043)
  • close remaining @job coverage - checkercases, golden case, docs, SPEC accuracy (b3e1745)
  • fmtcitationsmd: follow the match-binder-arity sentence to SPEC.md:3953 after the §10.5 edit (d6c5d0b)
  • golden + checkercases fixtures for jsonSchema generic-forwarding (7302b01)
  • SPEC.md documents jsonSchema's generic-forwarding path (2ac95ef)
  • Fix: port append's element-type assignability, closing the []u8-slice miscompile (7ac50d8)
  • test-docs: resolve a page's against pkg/ (268c724)
  • test: lint_append_param_selfowned appends a byte, not an int, now that append checks the element type (74ebe66)
  • Sweep now-unneeded Json/JsonEntry/Rows imports across stdlib/pkg/docs/tests (cc45ad7)

Documentation

  • web: add Route.docs, requestBody()/responds() and App.openApi() forward (23bdc2d)
  • web: render an OpenAPI 3.1 document from an App's real routes (5a7f0d4)
  • web: sort openApi() route rows in place, not through std/sort (baede43)
  • web: split statusDescription() to fit complexity 10, apply bit fmt (c6b62c7)
  • web: fix openapi.md's doctest blocks (f47b6a2)
  • web: target OpenAPI 3.1.0 for maximum tool compatibility (835da7c)
  • pkg/jobs: register/enqueue, worker pool, retries with backoff, dead-letter (20c2bdf)
  • pkg/jobs: STYLE.md docs, migration as a statement list, unexport internals (d08352b)
  • pkg/auth: export the OIDC fetch-injection seam for downstream tests (52654f7)
  • pkg/auth/docs/testing.md: canonically format the doc's bit fence (c35d305)
  • pkg/auth: move the OIDC test seam onto OidcStrategy, not a *Fetch route call (ce9918a)
  • spec: document jsonSchema, JSON Schema 2020-12 keywords (1333e2b)
  • docs: document jsonDecEnumKey/jsonDecEnumIndex (a0dd803)
  • pkg/auth requires web ^0.7.0; package READMEs install the current release (ca05caa)
  • Course: install web@v0.7.0 and auth by tag; drop web@v0.1.0/v0.6.5 stubs (000bc05)
  • Course: install postgres and orm by tag now that bitlang.org serves them (aae252f)
  • Course part 10: the real bit add transcript for auth@v0.2.0 (af2b842)
  • pkg/jobs docs: real, typechecking examples now static methods are ON (87f244e)
  • pkg/auth and Inkwell drop explicit session.save(), autosave does it (d7fc947)
  • declare jsonSchema() oracle-lag signatures, fix 2 em dashes, fmt run_json_schema_attrs.bit (6bb34e7)
  • web: land after merging - .requestBody()/.responds(status) now compile (f9bfdc0)
  • docs/stdlib: strip internal citation shorthand from second-half stdlib pages (a243a83)
  • docs: Get started page, Tools section, docs index, STYLE.md rules (d875982)
  • docs/stdlib: first-half cleanup - group README by task, drop internal spec/RFC section citations and jargon (580b830)
  • docs/book: add the ink companion app's core (6abadd2)
  • Rewrite Language reference pages short and exact in the Inkwell domain (c94ae41)
  • Rewrite Language reference page bodies short and exact, Inkwell domain (94e03da)
  • docs/stdlib: rewrite json.md and sql.md for plain language, drop jargon and history (5d35e4a)
  • docs/stdlib: drop remaining SPEC citations and "primitive"/"sum type" wording (54ffe89)
  • docs/stdlib: rewrite std/time as a task-shaped guide (b4cf595)
  • docs: rewrite std/crypto as a task-shaped user guide (a41c378)
  • docs/stdlib: rewrite std/http as a task-shaped guide (c20e3ac)
  • pkg docs: remove spec citations, compiler internals and dev history from public docs (bcc2bbf)
  • docs: rewrite std/tls as a task-shaped user guide (2b97036)
  • docs/stdlib: rewrite http2/quic/http3 as low-level guides (bb6c3a0)
  • docs/stdlib: rewrite json.md as a task-shaped guide (727fa77)
  • docs/stdlib: rewrite sql.md as a task-shaped guide (196de0a)
  • docs(orm,postgres): page-shape pass on pkg/orm and pkg/postgres docs (a615521)
  • docs/book: add the Book's front page and chapters 1-6 (d6a0aa2)
  • Book Part 2 (chapters 7-10): settings file, import/export, words and dates, a real database (6336221)
  • ink/index.bit, watch.bit, backup.bit - parallel indexing, watch loop, backups (0e67f28)
  • Book chapters 11-13 (indexing in parallel, watching for changes, backups) (0e901ee)
  • integrator fixes -- chapter numbering, Inkwell naming, green thread def (4e13017)
  • Book Part 4: reframe pkg/web/guides as chapters 14-30, move shipping to docs/book/34-shipping.md (64be14f)
  • Book: shipping is chapter 33 (the course is chapters 14-30 after its shipping part moved to Part 5) (b04dce0)
  • docs(web,auth): drop "not yet"/"does not do yet" future-work framing (005c995)
  • docs(redis): STYLE.md page-shape pass (8f8ff6c)
  • docs(mysql): STYLE.md page-shape pass (ebc2308)
  • docs(kv): STYLE.md page-shape pass (cf9b329)
  • docs(s3): STYLE.md page-shape pass (789df76)
  • docs(toml): STYLE.md page-shape pass (03798ab)
  • docs(yaml): STYLE.md page-shape pass (67aad13)
  • wire every Book command into main.bit, dedupe the flat ink module (50615ba)
  • chapters 7-13 show the lines each adds to main.bit; ch13 teaches the passphrase KDF (c57eb52)
  • docs(json): per-symbol reference sections restored (c408f7d)
  • docs(tls): per-symbol reference sections restored (3fe1f9b)
  • docs(http3): per-symbol reference sections restored (c3afe7c)
  • docs(crypto): per-symbol reference sections restored (61ddffc)
  • docs(http2): per-symbol reference sections restored (d62396f)
  • docs(quic): per-symbol reference sections restored (9a08258)
  • docs(sql): per-symbol reference sections restored (e72e205)
  • docs(http): per-symbol reference sections restored (cb2642d)
  • docs(http): add H3Server.port/shutdown and parseMultipart sections (906e301)
  • docs(time): per-symbol reference sections restored (201518b)
  • docs: drop the toml fixture page; Book chapters 07 and 10 carry the deps directive (8f2277e)
  • book: currentSettings falls back to defaultSettings(), so DATABASE_URL applies without an ink.toml and chapter 7 compiles on its own (2a30d35)
  • docs(book): add chapter 31, background jobs with pkg/jobs (e11a125)
  • book ch31: define dead-letter list at first use, plain wording for retry waits (c0a4f35)
  • docs: delete docs/guides/, fold its useful facts into their new homes (0962fc0)
  • book ch32: making it fast - measure, BIT_GC_STATS, std/prof, fix wordCount's allocation (bc9e2ab)
  • book: Part 5 chapter links; operations hands off to chapter 31; shipping's previous link (a69b500)
  • compiler: wire bit prof into the CLI front end and dispatch (eb7cc84)
  • Resolve @json's Json/JsonEntry and find's Rows without a user import (9dbff36)

Build and tooling

  • pkg/jobs: PostgreSQL Store, live Docker gate, real acceptance proven (27ec40f)
  • Repin stage0 to 0.32.0; retire the and stage0-lag signatures (fa005b5)
  • Declare the IR/types signatures: generic method receiver Option stays boxed in the 0.32.0 oracle, explodes to words in this tree (2ada49a)
  • Declare 6201-json-schema-generic-wrapper-specialize; split appendfresh.bit fixtureHelpers (eedac6d)
  • tools/build: add test-book-ink, build+test docs/book/ink (987d3ba)
  • gates: examples/h3fetch leaves the lint-aux debt list; its two findings are paid (863bec7)

Benchmarks

Examples

  • examples/h3fetch: trust the demo's test root CA now that HTTP/3 verifies certificates (fb983b1)

Artifacts

Published for aarch64-linux, aarch64-macos, x86_64-linux and x86_64-windows.
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.32.0..HEAD