Skip to content

v0.14.0: Build System Completion + Runtime Hardening

Choose a tag to compare

@ehartford ehartford released this 26 May 02:29
· 2744 commits to main since this release

Install

curl -fsSL https://github.com/withlang-dev/with/releases/latest/download/install.sh | sh

Inspect before running:

curl -fsSL https://github.com/withlang-dev/with/releases/latest/download/install.sh | less

What's New

This release covers 513 commits from v0.13.1 to v0.14.0.

Language

  • Added CLI one-liners: with -e, with -n, and with -p.
  • Added implicit main for script-style files with top-level executable statements.
  • Completed first-class regex integration:
    • regex literals like /\d+/
    • =~ and !~ match operators
    • capture bindings like $0, $1, and $name
    • regex match arms
    • f-string interpolation of captures
  • Added std.regex backed by migrated PCRE2.
  • Added first-class goto, do-while loops, and block expressions in expression position.
  • Implemented the Rev 8 mutability model:
    • mut self receivers
    • raw pointer const/mut typing
    • place classification
    • non-lexical borrow expiry
    • indexed-place mutation checks
    • closure/view conflict diagnostics
    • safe With rejects &mut T type syntax.
  • Added copy/move call-site annotations, receiver modes, effect summaries, effect pinning, transitive effect propagation, and closure summary checks.
  • Added guaranteed mutual tail-recursion enforcement.
  • Added three block body forms and tightened colon/brace body parsing while keeping then for inline if expressions.
  • Added user-defined IndexPlace dispatch and single-evaluation compound assignment behavior.

Standard Library

  • Promoted migrated PCRE2 into lib/std/re and wired regex support into the stdlib.
  • Added or expanded std.build, std.compiler, std.context, std.fs, std.io, and std.process.
  • Added OS-thread-backed std.thread.
  • Added Vec scoped mutation helpers:
    • Vec.get_disjoint
    • Vec.range
    • Vec.iter_ref
    • slot/view style scoped access.
  • Added HashMap scoped entry access.
  • Migrated major stdlib surfaces to mut self, including hash, http, tls, sync, crypto, regex, and stackify code.

Build System and Toolchain

  • Made with build the primary build system.
  • Reduced Makefile to a compatibility wrapper around with build.
  • Added build.w project graph execution, generated-source support, test globs, install targets, seed download/update targets, regex-test, PCRE2 targets, and canonical compiler build targets.
  • Added build graph action capabilities for filesystem, process, environment, copy/chmod, tree operations, downloads, archive extraction, and tool-scoped write boundaries.
  • Added in-process build.w evaluation through tool-mode BuildCtx.
  • Added workspace compilation APIs, compiler-message interception, artifact messages, link command interception/replacement, and parallel workspace compilation.
  • Replaced many shell/subprocess paths with typed runtime/process/filesystem APIs:
    • linker execution
    • compiler/frontend runtime calls
    • SDK and seed discovery
    • git version detection
    • llvm-config discovery
    • asm/IR compilation
    • archive creation
    • filesystem traversal.
  • Added build incrementality using source-directory hashes and target state.
  • Added repository locking and stale lock-owner detection.

C Migration and Emit-C

  • Reworked C migrator goto lowering around CFG/stackify.
  • Made native goto the default for with migrate.
  • Improved PCRE2 migration, promotion, build, check, and smoke workflow.
  • Added migrator selfhost smoke coverage to default tests.
  • Improved emit-C support:
    • receiver ABI fixes
    • Vec initialization
    • linked runtime declarations split from bridge stubs
    • string escape decoding
    • enum/scalar lowering fixes
    • HashMap key preservation
    • emit-C smoke in default tests.

Derives and Compiler Hooks

  • Added derives for Default, generic Default, SoA, generic SoA, Serialize, deserialize pointer repair, and ComponentId.
  • Added ProjectInfo model and dump command.
  • Added after-typecheck compiler hooks and source emission hooks.
  • Added guardrails around compiler hook/tool capabilities.

Runtime and Packaging

  • Added runtime process spawn/wait helpers and recursive filesystem removal.
  • Hardened runtime bridge safety and runtime call routing.
  • Made LLVM bridge C-string scratch thread-aware.
  • Fixed runtime allocator state synchronization.
  • Added weak C-import fallback exports so the public bootstrap compiler can run without libclang.dylib.
  • Renamed the release asset to with-darwin-aarch64; stopped publishing a binary named main.
  • Added scripts/install.sh and a README one-liner installer.
  • Added scripts/package-darwin-aarch64.sh to produce the release binary without a dynamic libclang dependency.

Project UX and Docs

  • Redesigned with init to create a flat root layout with main.w, test/, and git initialization.
  • Rewrote docs/with-build.md as the combined with.toml + build.w guide.
  • Added and updated build, toolchain, release, regex, migration, mutability, compiler-hook, and AI-facing docs.
  • Added MIT license.
  • Moved completed design/planning docs into docs/completed.

Tests and Verification

  • Added extensive behavior, compile-error, spec, regex, build graph, tool capability, comptime, mutability, workspace, PCRE2, and emit-C smoke coverage.
  • Re-enabled multiple spec tests after implemented-feature alignment.
  • Ported major selfhost, PCRE2, migrator, build.w, object-symbol, edge-case, and stage/fixpoint checks into the build graph.

Seed

The release asset with-darwin-aarch64 is the Darwin arm64 compiler binary. It does not require libclang.dylib at process startup.

sha256: bc46d1a9757309642ab98e1d348a8a80d72e2c17e247f41eaedc3ed72a13240c

Verification

  • WITH_VERSION=v0.14.0 with build
  • WITH_VERSION=v0.14.0 with build :fixpoint - reported FIXPOINT
  • WITH_VERSION=v0.14.0 with build :test - behavior, compile-error, codegen, spec, phase, PCRE2 smoke, and emit-C smoke targets passed

Follow-up

  • Filed #287 for the release-adjacent emit-C RK_ARRAY_FILL bug discovered during prep. Full emit-c-test is not a v0.14.0 release gate.