Repository navigation
v0.14.0: Build System Completion + Runtime Hardening
Install
curl -fsSL https://github.com/withlang-dev/with/releases/latest/download/install.sh | shInspect before running:
curl -fsSL https://github.com/withlang-dev/with/releases/latest/download/install.sh | lessWhat's New
This release covers 513 commits from v0.13.1 to v0.14.0.
Language
- Added CLI one-liners:
with -e,with -n, andwith -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
- regex literals like
- Added
std.regexbacked by migrated PCRE2. - Added first-class
goto, do-while loops, and block expressions in expression position. - Implemented the Rev 8 mutability model:
mut selfreceivers- raw pointer const/mut typing
- place classification
- non-lexical borrow expiry
- indexed-place mutation checks
- closure/view conflict diagnostics
- safe With rejects
&mut Ttype 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
thenfor inline if expressions. - Added user-defined
IndexPlacedispatch and single-evaluation compound assignment behavior.
Standard Library
- Promoted migrated PCRE2 into
lib/std/reand wired regex support into the stdlib. - Added or expanded
std.build,std.compiler,std.context,std.fs,std.io, andstd.process. - Added OS-thread-backed
std.thread. - Added
Vecscoped mutation helpers:Vec.get_disjointVec.rangeVec.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 buildthe primary build system. - Reduced
Makefileto a compatibility wrapper aroundwith build. - Added
build.wproject 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.wevaluation through tool-modeBuildCtx. - 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, genericDefault,SoA, genericSoA,Serialize, deserialize pointer repair, andComponentId. - Added
ProjectInfomodel 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 namedmain. - Added
scripts/install.shand a README one-liner installer. - Added
scripts/package-darwin-aarch64.shto produce the release binary without a dynamic libclang dependency.
Project UX and Docs
- Redesigned
with initto create a flat root layout withmain.w,test/, and git initialization. - Rewrote
docs/with-build.mdas the combinedwith.toml+build.wguide. - 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 buildWITH_VERSION=v0.14.0 with build :fixpoint- reportedFIXPOINTWITH_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_FILLbug discovered during prep. Fullemit-c-testis not a v0.14.0 release gate.