Repository navigation
Releases: silk-lang/silk
Release list
Silk 0.1.0-dev.14+0066f03c8c33
0.1.0-dev.14+0066f03c8c33
Minor
Interface and service operations can have default bodies. An operation written with a body is its default: a conformance that leaves the operation out uses that body, and one that implements the operation replaces it. An interface default can call the interface's operations on Self; a service default calls the service's operations with run, and those reach the same provider. A default body is checked where its contract is declared, even when nothing uses it.
Migration
Migration notes not provided
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
silk toolchain install and silk toolchain use accept latest (the newest stable release, or the newest release while there is no stable one) and dev (the newest release of any kind); use pins the full version the alias names. Concurrent installs now wait on a lock in $SILK_HOME instead of downloading the same release twice, and the GitHub release listing is retried when it fails or comes back empty.
Migration
Migration notes not provided
A structural union now conforms to an interface when every member implements it and every operation of the interface receives self by &Self or &mut Self and names Self nowhere else (UNION-003). Calls on the union read its tag and forward to the active member's implementation, and method syntax such as value.describe() works too, so {:?} works on an error union such as JsonError | OutOfMemoryError when each member is Debug. An interface that names Self elsewhere, or a member without the conformance, is rejected with SEM0121 and a note on the operation that blocks dispatch.
Migration
Migration notes not provided
Add check roots for the language server: Semantic.checkModule checks one root module and Semantic.checkDeclaration one declaration, with the same rejections checkDeclarations reports for them, and Semantic.checkForeignConflicts the foreign symbol conflicts between modules. silk check --roots checks the package again through them and reports any rejection only one side reached.
Migration
Migration notes not provided
silk lsp answers document symbols (the outline of types, impls, methods and functions), folding ranges (multi-line bodies, lists and literals, and comment runs) and whole-document formatting through silk format's formatter.
Migration
Migration notes not provided
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Adds SIMD lane operations (SIMD-004, SIMD-005): wrapping, saturating, shift, rotate, minimum, maximum, square root and fused multiply-add lane arithmetic; checked, wrapping and unordered sums and the minimum, maximum and bitwise reductions; mask any, all, count, first-set and bit conversions; bounds-checked slice loads and stores with unsafe pointer forms; and lane-wise numeric conversion and bit casts. Each traps where its scalar form traps.
Migration
Migration notes not provided
silk now runs the toolchain a project pins: when silk-version (or silk +<version>, SILK_TOOLCHAIN, or the default in $SILK_HOME/settings.toml) selects another installed version, the command runs in that toolchain. A pinned version that is not installed exits with status 3 and prints the command that installs it. Locally built compilers follow only silk +<version>, and SILK_TOOLCHAIN=local keeps any compiler on itself.
Migration
Migration notes not provided
silk lsp in a project whose pinned toolchain is not installed starts a server that answers initialize with no capabilities and shows the install command as an error message, instead of exiting, so editors that only spawn silk lsp explain the problem.
Migration
Migration notes not provided
Run native threads on wasm32: a project profile with target = "wasm32-unknown-unknown" and threading = "multi" links a shared-memory wasi-threads module, maxMemory sets its memory limit (1 GiB by default), and stdlib/host/wasm-runner.mjs runs it in Node or a browser.
Migration
Migration notes not provided
silk.thread_pool runs tasks in parallel on a work-stealing pool of native threads. ThreadPool.make starts the workers, Pool.spawn starts a Transferable lazy effect as a task and returns a TaskHandle whose join parks the caller until the result is ready, and Pool.block runs a task from an ordinary thread. Parked tasks resume on whichever worker is free, and idle workers steal work from busy ones.
Migration
Migration notes not provided
silk.format templates take {1} to name a tuple field, so one field can show more than once, and take a width or precision from a usize argument with 1$ or w$, as in {:>w$} and {:.1$}. List implements Debug, and the Debug form of a whole float ends in .0, as 1.0.
Migration
Migration notes not provided
wasm32 executables now reuse freed memory: the linked runtime replaces its bump allocator with one that bins, splits and coalesces freed chunks, and joining a native thread returns its stack to the heap.
Migration
Migration notes not provided
Slices implement Debug and write their elements, as [1, 2, 3]. A fixed array, an anonymous tuple, and an anonymous record have a Debug form wherever they are a {:?} argument of Format.format or a field that Format.debugFields writes: [1, 2], (1, "a"), and { x: 1 }.
Migration
Migration notes not provided
silk check --replay <script> replays a TOML script of source edits against a revisable semantic store and prints, for each edit, the demands, memo hits, units run and dependency-graph invalidations it caused, with its wall time. It is the measuring tool for incremental compilation.
Migration
Migration notes not provided
Add silk lsp, a language server skeleton that speaks JSON-RPC over standard input and output on a transport thread and a compiler thread. It handles initialize (negotiating UTF-8 positions when the client offers them), initialized, shutdown and exit, and answers every other request with MethodNotFound.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Adds the silk.simd standard-library modules: one module per vector shape, such as silk.simd.u8x16 and silk.simd.f32x8, for every lane type at 128 and 256 bits, and silk.simd.mask2 to silk.simd.mask32 for masks. Each module wraps the SIMD lane operations with documented, checked functions.
Migration
Migration notes not provided
silk lsp answers hover, go to definition, inlay hints and signature help from its checked store. Hovering a declaration shows its header and doc comment, a binding or field shows its type, and any other expression shows its type. Go to definition jumps to a declaration in any module, to a binding, or to a generic parameter. Each binding whose type was inferred gets a : Type hint, and the arguments of a call get its signature with the current parameter active.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. ...
Silk 0.1.0-dev.13+e62f1b34f810
0.1.0-dev.13+e62f1b34f810
Minor
Interface and service operations can have default bodies. An operation written with a body is its default: a conformance that leaves the operation out uses that body, and one that implements the operation replaces it. An interface default can call the interface's operations on Self; a service default calls the service's operations with run, and those reach the same provider. A default body is checked where its contract is declared, even when nothing uses it.
Migration
Migration notes not provided
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
silk toolchain install and silk toolchain use accept latest (the newest stable release, or the newest release while there is no stable one) and dev (the newest release of any kind); use pins the full version the alias names. Concurrent installs now wait on a lock in $SILK_HOME instead of downloading the same release twice, and the GitHub release listing is retried when it fails or comes back empty.
Migration
Migration notes not provided
Add check roots for the language server: Semantic.checkModule checks one root module and Semantic.checkDeclaration one declaration, with the same rejections checkDeclarations reports for them, and Semantic.checkForeignConflicts the foreign symbol conflicts between modules. silk check --roots checks the package again through them and reports any rejection only one side reached.
Migration
Migration notes not provided
silk lsp answers document symbols (the outline of types, impls, methods and functions), folding ranges (multi-line bodies, lists and literals, and comment runs) and whole-document formatting through silk format's formatter.
Migration
Migration notes not provided
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Adds SIMD lane operations (SIMD-004, SIMD-005): wrapping, saturating, shift, rotate, minimum, maximum, square root and fused multiply-add lane arithmetic; checked, wrapping and unordered sums and the minimum, maximum and bitwise reductions; mask any, all, count, first-set and bit conversions; bounds-checked slice loads and stores with unsafe pointer forms; and lane-wise numeric conversion and bit casts. Each traps where its scalar form traps.
Migration
Migration notes not provided
silk now runs the toolchain a project pins: when silk-version (or silk +<version>, SILK_TOOLCHAIN, or the default in $SILK_HOME/settings.toml) selects another installed version, the command runs in that toolchain. A pinned version that is not installed exits with status 3 and prints the command that installs it. Locally built compilers follow only silk +<version>, and SILK_TOOLCHAIN=local keeps any compiler on itself.
Migration
Migration notes not provided
silk lsp in a project whose pinned toolchain is not installed starts a server that answers initialize with no capabilities and shows the install command as an error message, instead of exiting, so editors that only spawn silk lsp explain the problem.
Migration
Migration notes not provided
Run native threads on wasm32: a project profile with target = "wasm32-unknown-unknown" and threading = "multi" links a shared-memory wasi-threads module, maxMemory sets its memory limit (1 GiB by default), and stdlib/host/wasm-runner.mjs runs it in Node or a browser.
Migration
Migration notes not provided
silk.thread_pool runs tasks in parallel on a work-stealing pool of native threads. ThreadPool.make starts the workers, Pool.spawn starts a Transferable lazy effect as a task and returns a TaskHandle whose join parks the caller until the result is ready, and Pool.block runs a task from an ordinary thread. Parked tasks resume on whichever worker is free, and idle workers steal work from busy ones.
Migration
Migration notes not provided
silk.format templates take {1} to name a tuple field, so one field can show more than once, and take a width or precision from a usize argument with 1$ or w$, as in {:>w$} and {:.1$}. List implements Debug, and the Debug form of a whole float ends in .0, as 1.0.
Migration
Migration notes not provided
wasm32 executables now reuse freed memory: the linked runtime replaces its bump allocator with one that bins, splits and coalesces freed chunks, and joining a native thread returns its stack to the heap.
Migration
Migration notes not provided
Slices implement Debug and write their elements, as [1, 2, 3]. A fixed array, an anonymous tuple, and an anonymous record have a Debug form wherever they are a {:?} argument of Format.format or a field that Format.debugFields writes: [1, 2], (1, "a"), and { x: 1 }.
Migration
Migration notes not provided
silk check --replay <script> replays a TOML script of source edits against a revisable semantic store and prints, for each edit, the demands, memo hits, units run and dependency-graph invalidations it caused, with its wall time. It is the measuring tool for incremental compilation.
Migration
Migration notes not provided
Add silk lsp, a language server skeleton that speaks JSON-RPC over standard input and output on a transport thread and a compiler thread. It handles initialize (negotiating UTF-8 positions when the client offers them), initialized, shutdown and exit, and answers every other request with MethodNotFound.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Adds the silk.simd standard-library modules: one module per vector shape, such as silk.simd.u8x16 and silk.simd.f32x8, for every lane type at 128 and 256 bits, and silk.simd.mask2 to silk.simd.mask32 for masks. Each module wraps the SIMD lane operations with documented, checked functions.
Migration
Migration notes not provided
silk lsp answers hover, go to definition, inlay hints and signature help from its checked store. Hovering a declaration shows its header and doc comment, a binding or field shows its type, and any other expression shows its type. Go to definition jumps to a declaration in any module, to a binding, or to a generic parameter. Each binding whose type was inferred gets a : Type hint, and the arguments of a call get its signature with the current parameter active.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only af...
Silk 0.1.0-dev.11+6de14da2a8a6
0.1.0-dev.11+6de14da2a8a6
Minor
Interface and service operations can have default bodies. An operation written with a body is its default: a conformance that leaves the operation out uses that body, and one that implements the operation replaces it. An interface default can call the interface's operations on Self; a service default calls the service's operations with run, and those reach the same provider. A default body is checked where its contract is declared, even when nothing uses it.
Migration
Migration notes not provided
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
silk toolchain install and silk toolchain use accept latest (the newest stable release, or the newest release while there is no stable one) and dev (the newest release of any kind); use pins the full version the alias names. Concurrent installs now wait on a lock in $SILK_HOME instead of downloading the same release twice, and the GitHub release listing is retried when it fails or comes back empty.
Migration
Migration notes not provided
Add check roots for the language server: Semantic.checkModule checks one root module and Semantic.checkDeclaration one declaration, with the same rejections checkDeclarations reports for them, and Semantic.checkForeignConflicts the foreign symbol conflicts between modules. silk check --roots checks the package again through them and reports any rejection only one side reached.
Migration
Migration notes not provided
silk lsp answers document symbols (the outline of types, impls, methods and functions), folding ranges (multi-line bodies, lists and literals, and comment runs) and whole-document formatting through silk format's formatter.
Migration
Migration notes not provided
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Adds SIMD lane operations (SIMD-004, SIMD-005): wrapping, saturating, shift, rotate, minimum, maximum, square root and fused multiply-add lane arithmetic; checked, wrapping and unordered sums and the minimum, maximum and bitwise reductions; mask any, all, count, first-set and bit conversions; bounds-checked slice loads and stores with unsafe pointer forms; and lane-wise numeric conversion and bit casts. Each traps where its scalar form traps.
Migration
Migration notes not provided
silk now runs the toolchain a project pins: when silk-version (or silk +<version>, SILK_TOOLCHAIN, or the default in $SILK_HOME/settings.toml) selects another installed version, the command runs in that toolchain. A pinned version that is not installed exits with status 3 and prints the command that installs it. Locally built compilers follow only silk +<version>, and SILK_TOOLCHAIN=local keeps any compiler on itself.
Migration
Migration notes not provided
silk lsp in a project whose pinned toolchain is not installed starts a server that answers initialize with no capabilities and shows the install command as an error message, instead of exiting, so editors that only spawn silk lsp explain the problem.
Migration
Migration notes not provided
Run native threads on wasm32: a project profile with target = "wasm32-unknown-unknown" and threading = "multi" links a shared-memory wasi-threads module, maxMemory sets its memory limit (1 GiB by default), and stdlib/host/wasm-runner.mjs runs it in Node or a browser.
Migration
Migration notes not provided
silk.thread_pool runs tasks in parallel on a work-stealing pool of native threads. ThreadPool.make starts the workers, Pool.spawn starts a Transferable lazy effect as a task and returns a TaskHandle whose join parks the caller until the result is ready, and Pool.block runs a task from an ordinary thread. Parked tasks resume on whichever worker is free, and idle workers steal work from busy ones.
Migration
Migration notes not provided
silk.format templates take {1} to name a tuple field, so one field can show more than once, and take a width or precision from a usize argument with 1$ or w$, as in {:>w$} and {:.1$}. List implements Debug, and the Debug form of a whole float ends in .0, as 1.0.
Migration
Migration notes not provided
wasm32 executables now reuse freed memory: the linked runtime replaces its bump allocator with one that bins, splits and coalesces freed chunks, and joining a native thread returns its stack to the heap.
Migration
Migration notes not provided
Slices implement Debug and write their elements, as [1, 2, 3]. A fixed array, an anonymous tuple, and an anonymous record have a Debug form wherever they are a {:?} argument of Format.format or a field that Format.debugFields writes: [1, 2], (1, "a"), and { x: 1 }.
Migration
Migration notes not provided
silk check --replay <script> replays a TOML script of source edits against a revisable semantic store and prints, for each edit, the demands, memo hits, units run and dependency-graph invalidations it caused, with its wall time. It is the measuring tool for incremental compilation.
Migration
Migration notes not provided
Add silk lsp, a language server skeleton that speaks JSON-RPC over standard input and output on a transport thread and a compiler thread. It handles initialize (negotiating UTF-8 positions when the client offers them), initialized, shutdown and exit, and answers every other request with MethodNotFound.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Adds the silk.simd standard-library modules: one module per vector shape, such as silk.simd.u8x16 and silk.simd.f32x8, for every lane type at 128 and 256 bits, and silk.simd.mask2 to silk.simd.mask32 for masks. Each module wraps the SIMD lane operations with documented, checked functions.
Migration
Migration notes not provided
silk lsp answers hover, go to definition, inlay hints and signature help from its checked store. Hovering a declaration shows its header and doc comment, a binding or field shows its type, and any other expression shows its type. Go to definition jumps to a declaration in any module, to a binding, or to a generic parameter. Each binding whose type was inferred gets a : Type hint, and the arguments of a call get its signature with the current parameter active.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only af...
Silk 0.1.0-dev.9+9e66ea6dc08e
0.1.0-dev.9+9e66ea6dc08e
Minor
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
silk toolchain install and silk toolchain use accept latest (the newest stable release, or the newest release while there is no stable one) and dev (the newest release of any kind); use pins the full version the alias names. Concurrent installs now wait on a lock in $SILK_HOME instead of downloading the same release twice, and the GitHub release listing is retried when it fails or comes back empty.
Migration
Migration notes not provided
Add check roots for the language server: Semantic.checkModule checks one root module and Semantic.checkDeclaration one declaration, with the same rejections checkDeclarations reports for them, and Semantic.checkForeignConflicts the foreign symbol conflicts between modules. silk check --roots checks the package again through them and reports any rejection only one side reached.
Migration
Migration notes not provided
silk lsp answers document symbols (the outline of types, impls, methods and functions), folding ranges (multi-line bodies, lists and literals, and comment runs) and whole-document formatting through silk format's formatter.
Migration
Migration notes not provided
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Adds SIMD lane operations (SIMD-004, SIMD-005): wrapping, saturating, shift, rotate, minimum, maximum, square root and fused multiply-add lane arithmetic; checked, wrapping and unordered sums and the minimum, maximum and bitwise reductions; mask any, all, count, first-set and bit conversions; bounds-checked slice loads and stores with unsafe pointer forms; and lane-wise numeric conversion and bit casts. Each traps where its scalar form traps.
Migration
Migration notes not provided
silk now runs the toolchain a project pins: when silk-version (or silk +<version>, SILK_TOOLCHAIN, or the default in $SILK_HOME/settings.toml) selects another installed version, the command runs in that toolchain. A pinned version that is not installed exits with status 3 and prints the command that installs it. Locally built compilers follow only silk +<version>, and SILK_TOOLCHAIN=local keeps any compiler on itself.
Migration
Migration notes not provided
silk lsp in a project whose pinned toolchain is not installed starts a server that answers initialize with no capabilities and shows the install command as an error message, instead of exiting, so editors that only spawn silk lsp explain the problem.
Migration
Migration notes not provided
Run native threads on wasm32: a project profile with target = "wasm32-unknown-unknown" and threading = "multi" links a shared-memory wasi-threads module, maxMemory sets its memory limit (1 GiB by default), and stdlib/host/wasm-runner.mjs runs it in Node or a browser.
Migration
Migration notes not provided
silk.thread_pool runs tasks in parallel on a work-stealing pool of native threads. ThreadPool.make starts the workers, Pool.spawn starts a Transferable lazy effect as a task and returns a TaskHandle whose join parks the caller until the result is ready, and Pool.block runs a task from an ordinary thread. Parked tasks resume on whichever worker is free, and idle workers steal work from busy ones.
Migration
Migration notes not provided
silk.format templates take {1} to name a tuple field, so one field can show more than once, and take a width or precision from a usize argument with 1$ or w$, as in {:>w$} and {:.1$}. List implements Debug, and the Debug form of a whole float ends in .0, as 1.0.
Migration
Migration notes not provided
wasm32 executables now reuse freed memory: the linked runtime replaces its bump allocator with one that bins, splits and coalesces freed chunks, and joining a native thread returns its stack to the heap.
Migration
Migration notes not provided
silk check --replay <script> replays a TOML script of source edits against a revisable semantic store and prints, for each edit, the demands, memo hits, units run and dependency-graph invalidations it caused, with its wall time. It is the measuring tool for incremental compilation.
Migration
Migration notes not provided
Add silk lsp, a language server skeleton that speaks JSON-RPC over standard input and output on a transport thread and a compiler thread. It handles initialize (negotiating UTF-8 positions when the client offers them), initialized, shutdown and exit, and answers every other request with MethodNotFound.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Adds the silk.simd standard-library modules: one module per vector shape, such as silk.simd.u8x16 and silk.simd.f32x8, for every lane type at 128 and 256 bits, and silk.simd.mask2 to silk.simd.mask32 for masks. Each module wraps the SIMD lane operations with documented, checked functions.
Migration
Migration notes not provided
silk lsp answers hover, go to definition, inlay hints and signature help from its checked store. Hovering a declaration shows its header and doc comment, a binding or field shows its type, and any other expression shows its type. Go to definition jumps to a declaration in any module, to a binding, or to a generic parameter. Each binding whose type was inferred gets a : Type hint, and the arguments of a call get its signature with the current parameter active.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add silk toolchain install [version], which downloads a release from GitHub (or the directory SILK_TOOLCHAIN_MIRROR names), checks its minisign signature, trusted comment and compiler SHA-256, and installs it into $SILK_HOME/toolchains. Without a version it installs the one the project pins. With SILK_AUTO_INSTALL=1 or auto-install = true in $SILK_HOME/settings.toml, a command that needs a missing pinned toolchain installs it first.
Migration
Migration notes not provided
Vectors cross the C boundary. A simd<T, N> with fixed-width integer or floating-point lanes may be a parameter...
Silk 0.1.0-dev.8+9782666e694b
0.1.0-dev.8+9782666e694b
Minor
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
Add check roots for the language server: Semantic.checkModule checks one root module and Semantic.checkDeclaration one declaration, with the same rejections checkDeclarations reports for them, and Semantic.checkForeignConflicts the foreign symbol conflicts between modules. silk check --roots checks the package again through them and reports any rejection only one side reached.
Migration
Migration notes not provided
silk lsp answers document symbols (the outline of types, impls, methods and functions), folding ranges (multi-line bodies, lists and literals, and comment runs) and whole-document formatting through silk format's formatter.
Migration
Migration notes not provided
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Adds SIMD lane operations (SIMD-004, SIMD-005): wrapping, saturating, shift, rotate, minimum, maximum, square root and fused multiply-add lane arithmetic; checked, wrapping and unordered sums and the minimum, maximum and bitwise reductions; mask any, all, count, first-set and bit conversions; bounds-checked slice loads and stores with unsafe pointer forms; and lane-wise numeric conversion and bit casts. Each traps where its scalar form traps.
Migration
Migration notes not provided
silk now runs the toolchain a project pins: when silk-version (or silk +<version>, SILK_TOOLCHAIN, or the default in $SILK_HOME/settings.toml) selects another installed version, the command runs in that toolchain. A pinned version that is not installed exits with status 3 and prints the command that installs it. Locally built compilers follow only silk +<version>, and SILK_TOOLCHAIN=local keeps any compiler on itself.
Migration
Migration notes not provided
silk lsp in a project whose pinned toolchain is not installed starts a server that answers initialize with no capabilities and shows the install command as an error message, instead of exiting, so editors that only spawn silk lsp explain the problem.
Migration
Migration notes not provided
Run native threads on wasm32: a project profile with target = "wasm32-unknown-unknown" and threading = "multi" links a shared-memory wasi-threads module, maxMemory sets its memory limit (1 GiB by default), and stdlib/host/wasm-runner.mjs runs it in Node or a browser.
Migration
Migration notes not provided
silk.thread_pool runs tasks in parallel on a work-stealing pool of native threads. ThreadPool.make starts the workers, Pool.spawn starts a Transferable lazy effect as a task and returns a TaskHandle whose join parks the caller until the result is ready, and Pool.block runs a task from an ordinary thread. Parked tasks resume on whichever worker is free, and idle workers steal work from busy ones.
Migration
Migration notes not provided
wasm32 executables now reuse freed memory: the linked runtime replaces its bump allocator with one that bins, splits and coalesces freed chunks, and joining a native thread returns its stack to the heap.
Migration
Migration notes not provided
silk check --replay <script> replays a TOML script of source edits against a revisable semantic store and prints, for each edit, the demands, memo hits, units run and dependency-graph invalidations it caused, with its wall time. It is the measuring tool for incremental compilation.
Migration
Migration notes not provided
Add silk lsp, a language server skeleton that speaks JSON-RPC over standard input and output on a transport thread and a compiler thread. It handles initialize (negotiating UTF-8 positions when the client offers them), initialized, shutdown and exit, and answers every other request with MethodNotFound.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Adds the silk.simd standard-library modules: one module per vector shape, such as silk.simd.u8x16 and silk.simd.f32x8, for every lane type at 128 and 256 bits, and silk.simd.mask2 to silk.simd.mask32 for masks. Each module wraps the SIMD lane operations with documented, checked functions.
Migration
Migration notes not provided
silk lsp answers hover, go to definition, inlay hints and signature help from its checked store. Hovering a declaration shows its header and doc comment, a binding or field shows its type, and any other expression shows its type. Go to definition jumps to a declaration in any module, to a binding, or to a generic parameter. Each binding whose type was inferred gets a : Type hint, and the arguments of a call get its signature with the current parameter active.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add silk toolchain install [version], which downloads a release from GitHub (or the directory SILK_TOOLCHAIN_MIRROR names), checks its minisign signature, trusted comment and compiler SHA-256, and installs it into $SILK_HOME/toolchains. Without a version it installs the one the project pins. With SILK_AUTO_INSTALL=1 or auto-install = true in $SILK_HOME/settings.toml, a command that needs a missing pinned toolchain installs it first.
Migration
Migration notes not provided
Vectors cross the C boundary. A simd<T, N> with fixed-width integer or floating-point lanes may be a parameter or result of an extern "C" or export "C" function, and passes in one vector register the way C vector types do: 128 bits on every target, 256 bits on x86-64 with avx and 512 bits with avx512f, and 64 bits on AArch64. A width the target's C ABI does not pass that way, or one that needs a CPU feature the profile does not select, reports SEM0244.
Migration
Migration notes not provided
Adds the SHA-256 instructions to the architecture operations: sha256rnds2, sha256msg1 and sha256msg2 on x86-64, under the new sha feature that silk.cpu detects, and sha256h, sha256h2, sha256su0 and sha256su1 on AArch64. silk.arch.x86 and silk.arch.aarch64 wrap them with portable fallbacks.
Migration
Migration notes not provided
Add silk toolchain list, `which...
Silk 0.1.0-dev.10+3934b61998da
0.1.0-dev.10+3934b61998da
Minor
Interface and service operations can have default bodies. An operation written with a body is its default: a conformance that leaves the operation out uses that body, and one that implements the operation replaces it. An interface default can call the interface's operations on Self; a service default calls the service's operations with run, and those reach the same provider. A default body is checked where its contract is declared, even when nothing uses it.
Migration
Migration notes not provided
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
silk toolchain install and silk toolchain use accept latest (the newest stable release, or the newest release while there is no stable one) and dev (the newest release of any kind); use pins the full version the alias names. Concurrent installs now wait on a lock in $SILK_HOME instead of downloading the same release twice, and the GitHub release listing is retried when it fails or comes back empty.
Migration
Migration notes not provided
Add check roots for the language server: Semantic.checkModule checks one root module and Semantic.checkDeclaration one declaration, with the same rejections checkDeclarations reports for them, and Semantic.checkForeignConflicts the foreign symbol conflicts between modules. silk check --roots checks the package again through them and reports any rejection only one side reached.
Migration
Migration notes not provided
silk lsp answers document symbols (the outline of types, impls, methods and functions), folding ranges (multi-line bodies, lists and literals, and comment runs) and whole-document formatting through silk format's formatter.
Migration
Migration notes not provided
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Adds SIMD lane operations (SIMD-004, SIMD-005): wrapping, saturating, shift, rotate, minimum, maximum, square root and fused multiply-add lane arithmetic; checked, wrapping and unordered sums and the minimum, maximum and bitwise reductions; mask any, all, count, first-set and bit conversions; bounds-checked slice loads and stores with unsafe pointer forms; and lane-wise numeric conversion and bit casts. Each traps where its scalar form traps.
Migration
Migration notes not provided
silk now runs the toolchain a project pins: when silk-version (or silk +<version>, SILK_TOOLCHAIN, or the default in $SILK_HOME/settings.toml) selects another installed version, the command runs in that toolchain. A pinned version that is not installed exits with status 3 and prints the command that installs it. Locally built compilers follow only silk +<version>, and SILK_TOOLCHAIN=local keeps any compiler on itself.
Migration
Migration notes not provided
silk lsp in a project whose pinned toolchain is not installed starts a server that answers initialize with no capabilities and shows the install command as an error message, instead of exiting, so editors that only spawn silk lsp explain the problem.
Migration
Migration notes not provided
Run native threads on wasm32: a project profile with target = "wasm32-unknown-unknown" and threading = "multi" links a shared-memory wasi-threads module, maxMemory sets its memory limit (1 GiB by default), and stdlib/host/wasm-runner.mjs runs it in Node or a browser.
Migration
Migration notes not provided
silk.thread_pool runs tasks in parallel on a work-stealing pool of native threads. ThreadPool.make starts the workers, Pool.spawn starts a Transferable lazy effect as a task and returns a TaskHandle whose join parks the caller until the result is ready, and Pool.block runs a task from an ordinary thread. Parked tasks resume on whichever worker is free, and idle workers steal work from busy ones.
Migration
Migration notes not provided
silk.format templates take {1} to name a tuple field, so one field can show more than once, and take a width or precision from a usize argument with 1$ or w$, as in {:>w$} and {:.1$}. List implements Debug, and the Debug form of a whole float ends in .0, as 1.0.
Migration
Migration notes not provided
wasm32 executables now reuse freed memory: the linked runtime replaces its bump allocator with one that bins, splits and coalesces freed chunks, and joining a native thread returns its stack to the heap.
Migration
Migration notes not provided
silk check --replay <script> replays a TOML script of source edits against a revisable semantic store and prints, for each edit, the demands, memo hits, units run and dependency-graph invalidations it caused, with its wall time. It is the measuring tool for incremental compilation.
Migration
Migration notes not provided
Add silk lsp, a language server skeleton that speaks JSON-RPC over standard input and output on a transport thread and a compiler thread. It handles initialize (negotiating UTF-8 positions when the client offers them), initialized, shutdown and exit, and answers every other request with MethodNotFound.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Adds the silk.simd standard-library modules: one module per vector shape, such as silk.simd.u8x16 and silk.simd.f32x8, for every lane type at 128 and 256 bits, and silk.simd.mask2 to silk.simd.mask32 for masks. Each module wraps the SIMD lane operations with documented, checked functions.
Migration
Migration notes not provided
silk lsp answers hover, go to definition, inlay hints and signature help from its checked store. Hovering a declaration shows its header and doc comment, a binding or field shows its type, and any other expression shows its type. Go to definition jumps to a declaration in any module, to a binding, or to a generic parameter. Each binding whose type was inferred gets a : Type hint, and the arguments of a call get its signature with the current parameter active.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add silk toolchain install [version], which downloads a release from GitHub (or the directo...
Silk 0.1.0-dev.6+1aed5da1a342
0.1.0-dev.6+1aed5da1a342
Minor
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Native threads can now share values. silk.sync adds Arc<T>, a reference-counted handle with an atomic count, Mutex<T>, a futex lock whose guard borrows the value, and Parker with Unparker, a one-token sleep another thread can end. They rest on the unsafe anchored borrows Intrinsic.pointerBorrow and Intrinsic.pointerBorrowMut (Pointer.borrow and Pointer.borrowMut), which turn a raw pointer into a reference that lives exactly as long as the caller's loan of an anchor. NativeThread.processorCount and NativeThread.yieldNow are new as well.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add repeated fixed-array expressions [value; count], with compile-time counts, single operand evaluation, Copy checking, and static execution.
Counts retain enclosing static locals, selected static parameters, and static-for bindings inside static initializers. Missing counts preserve following declarations during parser recovery.
Migration
Use [0; N] instead of manually listing zeroes. Counts follow fixed-array length rules; counts above one require Copy. Zero counts still evaluate and discard the operand.
The Execution package protocol is now safe when a Wake is signaled from another thread. The compiler accesses the package's authority count, lifecycle and notifying marker atomically, and the control-word operations become an acquire executionLoad, a release executionStore and a new executionCompareExchange. silk.execution packs the park generation and readiness phase into one control word, moves between phases only by compare-exchange, and publishes Eligible before it runs the readiness endpoint. A notification that races a drop now runs nothing instead of trapping. Handles stay local: none is Transferable yet.
Migration
Migration notes not provided
Silk programs can now start native threads. silk.native_thread adds NativeThread.spawn, which runs a detached Transferable closure on a new pthread_create thread, and JoinHandle.join, which returns its result; an unjoined handle waits for its thread when dropped. Two compiler additions support it: the foreign property Intrinsic.foreign(threadCallbacks: (...)) admits a reference-free export address that native code may invoke on another thread, and the unsafe Intrinsic.pointerTake (with Pointer.take and Pointer.put) moves a non-Copy value out of and into raw storage.
Migration
Migration notes not provided
Give published compiler builds one exact version across the executable, initialized projects, release tags and native archives, with commit-identifiable dev releases.
Migration
Dev versions use the upcoming stable core, a monotonic counter and source metadata, for example 0.1.0-dev.2+a1b2c3d4e5f6. The full commit is recorded in the release snapshot and immutable build receipts; retries do not allocate another version for the same commit. Stable 0.1.0 remains reserved for announcement. The committed 0.0.0 baseline marks an unreleased history floor, not a published stable compiler. Use SILK_CHANNEL=dev for dev installation or SILK_RELEASE=vVERSION for an exact release; automatic installation uses dev when no stable release exists. Older development binaries reported 0.1.0 without reliably identifying their source. Use --from 0.0.0 to review the initial recorded changes rather than treating those old versions as a reliable upgrade baseline.
Add silk.http_client, a short way to make HTTP requests: an Http service, a chained Request builder (Request.get(url).query(...).bearer(...), .json(&value)), a buffered Response with status(), text(), json(), decode<T>() and expectOk(), and one HttpError with a kind. silk.http_client_native provides it with NativeHttp, which owns sockets, TLS, clocks, trust, timeouts, body limits and redirects. Every status is a response; expectOk() or NativeHttp.failOnStatus() turn 4xx and 5xx into errors.
The previous low-level silk.http_client module is now silk.http_exchange (ClientError is ExchangeError, NativeClientError is NativeExchangeError).
Migration
Migration notes not provided
New sealed thread properties Intrinsic.Transferable and Intrinsic.Concurrent, published as silk.thread.Transferable and silk.thread.Concurrent. Both are bounds derived from a type's stored parts: scalars, text and enums have both, raw pointers and Shared<T> have neither, &T needs a Concurrent referent, and records, unions, arrays and closures follow their parts. A module asserts a property for its own type with an empty impl, which the compiler does not check. An unsatisfied bound reports SEM0121, and an impl with members or for an enum reports SEM0083.
Migration
Migration notes not provided
Add workspace and dependency commands: silk init --workspace and silk init --lib, automatic workspace membership for packages created inside a workspace, silk add <path> and silk remove <name> for path dependencies, and workspace-wide build, check, test, run and clean with --package/-p and --workspace member selection.
Migration
Migration notes not provided
Patch
Name generic implementations in generated reference pages: silk doc-reference now titles impl<T> Box<T> as Implementation Box<T> instead of an empty name, and silk doc reports the implemented types as written.
Migration
Reference anchors for implementations now carry the owner type: Box.impl for an inherent implementation and Box.impl.Drop for an interface implementation, with members below them such as Box.impl.make. Update hand-written links that targeted the old #impl, #impl-2 or #impl.member anchors.
More diagnostic locations from the language reference review:
- A refusal inside a standard-library static helper (
StaticSequence.length,concat,at) or fromReflect.fieldsover a union instatic foris reported at the user's call, with the library site as related information. - The
import silk.<primitive>hint is not given when the module has syntax errors. pub param o: ?i32is SEM0214 (optional types are not supported as package parameters) instead of an unsupported construct.with Intrinsic.foreign(...)orwith Intrinsic.machine(...)on a declaration withoutextern/exportlinkage is the new SEM0236 at the clause.
Migration
Migration notes not provided
Clearer diagnostics: every diagnostic now prints a message (the catalog meaning when a template cannot be filled yet), silk check reports a main the runtime cannot start as SEM0...
Silk 0.1.0-dev.5+1ff1cde7cde4
0.1.0-dev.5+1ff1cde7cde4
Minor
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
silk.execution adds handles that may move between threads. Execution.makeTransferable takes a Transferable body and result and a Transferable and Concurrent readiness endpoint, and returns a TransferableExecution<A>. Its body parks with Execution.parkTransferable, whose TransferableWake can be signaled from any thread with Execution.wakeTransferable. TransferableExecution.local and adopt convert to and from the handle Execution.drive takes. Adopting or parking transferably in a package made by Execution.make is a fatal trap.
Migration
Migration notes not provided
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add repeated fixed-array expressions [value; count], with compile-time counts, single operand evaluation, Copy checking, and static execution.
Counts retain enclosing static locals, selected static parameters, and static-for bindings inside static initializers. Missing counts preserve following declarations during parser recovery.
Migration
Use [0; N] instead of manually listing zeroes. Counts follow fixed-array length rules; counts above one require Copy. Zero counts still evaluate and discard the operand.
The Execution package protocol is now safe when a Wake is signaled from another thread. The compiler accesses the package's authority count, lifecycle and notifying marker atomically, and the control-word operations become an acquire executionLoad, a release executionStore and a new executionCompareExchange. silk.execution packs the park generation and readiness phase into one control word, moves between phases only by compare-exchange, and publishes Eligible before it runs the readiness endpoint. A notification that races a drop now runs nothing instead of trapping. Handles stay local: none is Transferable yet.
Migration
Migration notes not provided
Silk programs can now start native threads. silk.native_thread adds NativeThread.spawn, which runs a detached Transferable closure on a new pthread_create thread, and JoinHandle.join, which returns its result; an unjoined handle waits for its thread when dropped. Two compiler additions support it: the foreign property Intrinsic.foreign(threadCallbacks: (...)) admits a reference-free export address that native code may invoke on another thread, and the unsafe Intrinsic.pointerTake (with Pointer.take and Pointer.put) moves a non-Copy value out of and into raw storage.
Migration
Migration notes not provided
Give published compiler builds one exact version across the executable, initialized projects, release tags and native archives, with commit-identifiable dev releases.
Migration
Dev versions use the upcoming stable core, a monotonic counter and source metadata, for example 0.1.0-dev.2+a1b2c3d4e5f6. The full commit is recorded in the release snapshot and immutable build receipts; retries do not allocate another version for the same commit. Stable 0.1.0 remains reserved for announcement. The committed 0.0.0 baseline marks an unreleased history floor, not a published stable compiler. Use SILK_CHANNEL=dev for dev installation or SILK_RELEASE=vVERSION for an exact release; automatic installation uses dev when no stable release exists. Older development binaries reported 0.1.0 without reliably identifying their source. Use --from 0.0.0 to review the initial recorded changes rather than treating those old versions as a reliable upgrade baseline.
Add silk.http_client, a short way to make HTTP requests: an Http service, a chained Request builder (Request.get(url).query(...).bearer(...), .json(&value)), a buffered Response with status(), text(), json(), decode<T>() and expectOk(), and one HttpError with a kind. silk.http_client_native provides it with NativeHttp, which owns sockets, TLS, clocks, trust, timeouts, body limits and redirects. Every status is a response; expectOk() or NativeHttp.failOnStatus() turn 4xx and 5xx into errors.
The previous low-level silk.http_client module is now silk.http_exchange (ClientError is ExchangeError, NativeClientError is NativeExchangeError).
Migration
Migration notes not provided
New sealed thread properties Intrinsic.Transferable and Intrinsic.Concurrent, published as silk.thread.Transferable and silk.thread.Concurrent. Both are bounds derived from a type's stored parts: scalars, text and enums have both, raw pointers and Shared<T> have neither, &T needs a Concurrent referent, and records, unions, arrays and closures follow their parts. A module asserts a property for its own type with an empty impl, which the compiler does not check. An unsatisfied bound reports SEM0121, and an impl with members or for an enum reports SEM0083.
Migration
Migration notes not provided
Add workspace and dependency commands: silk init --workspace and silk init --lib, automatic workspace membership for packages created inside a workspace, silk add <path> and silk remove <name> for path dependencies, and workspace-wide build, check, test, run and clean with --package/-p and --workspace member selection.
Migration
Migration notes not provided
Patch
Name generic implementations in generated reference pages: silk doc-reference now titles impl<T> Box<T> as Implementation Box<T> instead of an empty name, and silk doc reports the implemented types as written.
Migration
Reference anchors for implementations now carry the owner type: Box.impl for an inherent implementation and Box.impl.Drop for an interface implementation, with members below them such as Box.impl.make. Update hand-written links that targeted the old #impl, #impl-2 or #impl.member anchors.
More diagnostic locations from the language reference review:
- A refusal inside a standard-library static helper (
StaticSequence.length,concat,at) or fromReflect.fieldsover a union instatic foris reported at the user's call, with the library site as related information. - The
import silk.<primitive>hint is not given when the module has syntax errors. pub param o: ?i32is SEM0214 (optional types are not supported as package parameters) instead of an unsupported construct.with Intrinsic.foreign(...)orwith Intrinsic.machine(...)on a declaration withoutextern/exportlinkage is the new SEM0236 at the clause.
Migration
Migration notes not provided
Clearer diagnostics: every diagnostic now prints a message (the catalog meaning when a template cannot be filled yet), silk check reports a main the runtime cannot start as SEM0225 at the entry's main instead of failing later inside the std lib, project silk build prints diagnostics in the same form as silk check instead of SILK_BUILD_ERROR records, syntax errors no longer come with spurious "unsupported" lines, a move error names the whole moved place, package parameter declaration errors carry SEM0214 and a reason, ambiguous receiver operations report SEM0200 (several bounds) and SEM0202 (several conformances), and bodies the borrow checker cannot prove yet are listed as notes instead of SILK_GAP lines, which no longer appear on fully checked builds.
Migration...
Silk 0.1.0-dev.4+892d3bee6c53
0.1.0-dev.4+892d3bee6c53
Minor
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add repeated fixed-array expressions [value; count], with compile-time counts, single operand evaluation, Copy checking, and static execution.
Counts retain enclosing static locals, selected static parameters, and static-for bindings inside static initializers. Missing counts preserve following declarations during parser recovery.
Migration
Use [0; N] instead of manually listing zeroes. Counts follow fixed-array length rules; counts above one require Copy. Zero counts still evaluate and discard the operand.
Give published compiler builds one exact version across the executable, initialized projects, release tags and native archives, with commit-identifiable dev releases.
Migration
Dev versions use the upcoming stable core, a monotonic counter and source metadata, for example 0.1.0-dev.2+a1b2c3d4e5f6. The full commit is recorded in the release snapshot and immutable build receipts; retries do not allocate another version for the same commit. Stable 0.1.0 remains reserved for announcement. The committed 0.0.0 baseline marks an unreleased history floor, not a published stable compiler. Use SILK_CHANNEL=dev for dev installation or SILK_RELEASE=vVERSION for an exact release; automatic installation uses dev when no stable release exists. Older development binaries reported 0.1.0 without reliably identifying their source. Use --from 0.0.0 to review the initial recorded changes rather than treating those old versions as a reliable upgrade baseline.
Add silk.http_client, a short way to make HTTP requests: an Http service, a chained Request builder (Request.get(url).query(...).bearer(...), .json(&value)), a buffered Response with status(), text(), json(), decode<T>() and expectOk(), and one HttpError with a kind. silk.http_client_native provides it with NativeHttp, which owns sockets, TLS, clocks, trust, timeouts, body limits and redirects. Every status is a response; expectOk() or NativeHttp.failOnStatus() turn 4xx and 5xx into errors.
The previous low-level silk.http_client module is now silk.http_exchange (ClientError is ExchangeError, NativeClientError is NativeExchangeError).
Migration
Migration notes not provided
Add workspace and dependency commands: silk init --workspace and silk init --lib, automatic workspace membership for packages created inside a workspace, silk add <path> and silk remove <name> for path dependencies, and workspace-wide build, check, test, run and clean with --package/-p and --workspace member selection.
Migration
Migration notes not provided
Patch
Name generic implementations in generated reference pages: silk doc-reference now titles impl<T> Box<T> as Implementation Box<T> instead of an empty name, and silk doc reports the implemented types as written.
Migration
Reference anchors for implementations now carry the owner type: Box.impl for an inherent implementation and Box.impl.Drop for an interface implementation, with members below them such as Box.impl.make. Update hand-written links that targeted the old #impl, #impl-2 or #impl.member anchors.
More diagnostic locations from the language reference review:
- A refusal inside a standard-library static helper (
StaticSequence.length,concat,at) or fromReflect.fieldsover a union instatic foris reported at the user's call, with the library site as related information. - The
import silk.<primitive>hint is not given when the module has syntax errors. pub param o: ?i32is SEM0214 (optional types are not supported as package parameters) instead of an unsupported construct.with Intrinsic.foreign(...)orwith Intrinsic.machine(...)on a declaration withoutextern/exportlinkage is the new SEM0236 at the clause.
Migration
Migration notes not provided
Clearer diagnostics: every diagnostic now prints a message (the catalog meaning when a template cannot be filled yet), silk check reports a main the runtime cannot start as SEM0225 at the entry's main instead of failing later inside the std lib, project silk build prints diagnostics in the same form as silk check instead of SILK_BUILD_ERROR records, syntax errors no longer come with spurious "unsupported" lines, a move error names the whole moved place, package parameter declaration errors carry SEM0214 and a reason, ambiguous receiver operations report SEM0200 (several bounds) and SEM0202 (several conformances), and bodies the borrow checker cannot prove yet are listed as notes instead of SILK_GAP lines, which no longer appear on fully checked builds.
Migration
Tools that parsed SILK_BUILD_ERROR or SILK_GAP borrow-check lines from project silk build or silk run output must use silk check --json or the single-file silk build <source> -o <output> form, which keeps those records.
Diagnostics fill more of their messages: a selected compileError prints its own text, an unknown module names its path, a non-exhaustive enum or union match names the members it misses, a missing operator names the operator and operand types, ambiguous receiver operations name the candidate interfaces, borrow conflicts say which loan is mutable or shared, and a primitive namespace used without its import (such as u32.toU64) suggests import silk.u32. A call that does not prove its callee's where S in R requirement-row premise now reports the new SEM0234, naming the premise, instead of the Effect.provide code SEM0074. Unsupported constructs in project silk check, silk build and silk run print a path:line:col: unsupported line instead of a SILK_UNSUPPORTED_JSON record (--json and the single-file silk build <source> -o <output> form keep the record). Package parameter errors keep their reason: an unsupported parameter type, a value failing its where predicate (named), an unknown or mistyped binding (with the silk.toml line), and a param outside the root module (reported at that declaration). An import refused for several reasons, such as an unknown module with several selected names, prints once. silk format no longer breaks the line between if, while or return and a ! operand. A named --profile builds into build/llvm/<target>/<profile>/ instead of overwriting the default debug artifact, and a failing silk run prints the [target] header and a run summary.
Migration
Migration notes not provided
Writing an optional type as ?T (for example param o: ?i32 = 1 or let x: ?i32 = 3) is the new PAR0007, "?T is not a Silk type; write an optional type as Option<T>", reported once at the ?. The parser keeps the rest of the declaration, so no cascade of PAR0002 or package-parameter errors follows.
Migration
Migration notes not provided
silk add refuses a package that already depends on the current one with a message naming both, and a workspace member whose dependencies cannot load fails on its own: the other members still run and the workspace summary is still written.
Migration
Migration notes not provided
Diagnostics and formatting fixes from the language reference review:
u32.MAXwithout `import silk....
Silk 0.1.0-dev.3+fbd34fb3d0ee
0.1.0-dev.3+fbd34fb3d0ee
Minor
Rename the growable Vector collection to List throughout the standard library and native compiler.
Migration
Import List from silk.list instead of Vector from silk.vector. Replace Vector type annotations and calls with List. The old type and module are removed; collection operations and storage behavior are unchanged.
Prepare stable compiler releases through a maintained release PR, and publish daily or manually triggered dev builds without consuming pending changes.
Migration
From the virtual workspace root, select the package explicitly with silk changes --dir compiler. The stable release PR collects open changes into authoritative TOML history and the generated changelog; merging that PR publishes the stable release after verification. Dev builds snapshot the changes at their exact source commit without editing those files. Daily and manual dev publication share one version reservation and skip already published source commits. The changes library remains a separate workspace member; release coordination for multiple packages is not yet automatic.
Do not edit the managed release branch, PR title, or description; add review comments instead. Refreshes refuse detected human edits, and interrupted metadata publication is repaired without creating another release commit.
Dev reservations use internal Git refs rather than public tags, so failed publication attempts do not appear as releases. The retained n0 seed is now pinned at v0.1.0-dev.1+5081812; its download names and seed coordinates changed, but its verified compiler bytes did not.
Introduce native changes and migration history for Silk packages and the compiler, including immutable dev snapshots and updated migration guidance.
Migration
Add one change file per contribution with silk changes add and describe API, behavior and default changes with --migration. Keep its generated filename stable: that identity follows the note into release history. Stable releases commit authoritative .changes/releases/*.toml records and regenerate CHANGELOG.md; manual Markdown edits are overwritten. Published changes-snapshot.toml assets capture exactly the changes included in each release, not later edits on main. Before upgrading, run silk changes since for the compiler or silk changes since DEPENDENCY for an installed library. Use --to VERSION to select an exact target. Unchanged dev notes are not repeated on stable promotion; revised notes are shown as updated guidance. Update package.silk-version only after migrating and verifying the project.
Automatic dev discovery requires the new positive-counter and 12-character hexadecimal commit format. Legacy bootstrap tags are retained for reproducibility but do not outrank new dev snapshots.
Add repeated fixed-array expressions [value; count], with compile-time counts, single operand evaluation, Copy checking, and static execution.
Counts retain enclosing static locals, selected static parameters, and static-for bindings inside static initializers. Missing counts preserve following declarations during parser recovery.
Migration
Use [0; N] instead of manually listing zeroes. Counts follow fixed-array length rules; counts above one require Copy. Zero counts still evaluate and discard the operand.
Give published compiler builds one exact version across the executable, initialized projects, release tags and native archives, with commit-identifiable dev releases.
Migration
Dev versions use the upcoming stable core, a monotonic counter and source metadata, for example 0.1.0-dev.2+a1b2c3d4e5f6. The full commit is recorded in the release snapshot and immutable build receipts; retries do not allocate another version for the same commit. Stable 0.1.0 remains reserved for announcement. The committed 0.0.0 baseline marks an unreleased history floor, not a published stable compiler. Use SILK_CHANNEL=dev for dev installation or SILK_RELEASE=vVERSION for an exact release; automatic installation uses dev when no stable release exists. Older development binaries reported 0.1.0 without reliably identifying their source. Use --from 0.0.0 to review the initial recorded changes rather than treating those old versions as a reliable upgrade baseline.
Add workspace and dependency commands: silk init --workspace and silk init --lib, automatic workspace membership for packages created inside a workspace, silk add <path> and silk remove <name> for path dependencies, and workspace-wide build, check, test, run and clean with --package/-p and --workspace member selection.
Migration
Migration notes not provided
Patch
Name generic implementations in generated reference pages: silk doc-reference now titles impl<T> Box<T> as Implementation Box<T> instead of an empty name, and silk doc reports the implemented types as written.
Migration
Reference anchors for implementations now carry the owner type: Box.impl for an inherent implementation and Box.impl.Drop for an interface implementation, with members below them such as Box.impl.make. Update hand-written links that targeted the old #impl, #impl-2 or #impl.member anchors.
Clearer diagnostics: every diagnostic now prints a message (the catalog meaning when a template cannot be filled yet), silk check reports a main the runtime cannot start as SEM0225 at the entry's main instead of failing later inside the std lib, project silk build prints diagnostics in the same form as silk check instead of SILK_BUILD_ERROR records, syntax errors no longer come with spurious "unsupported" lines, a move error names the whole moved place, package parameter declaration errors carry SEM0214 and a reason, ambiguous receiver operations report SEM0200 (several bounds) and SEM0202 (several conformances), and bodies the borrow checker cannot prove yet are listed as notes instead of SILK_GAP lines, which no longer appear on fully checked builds.
Migration
Tools that parsed SILK_BUILD_ERROR or SILK_GAP borrow-check lines from project silk build or silk run output must use silk check --json or the single-file silk build <source> -o <output> form, which keeps those records.
Diagnostics fill more of their messages: a selected compileError prints its own text, an unknown module names its path, a non-exhaustive enum or union match names the members it misses, a missing operator names the operator and operand types, ambiguous receiver operations name the candidate interfaces, borrow conflicts say which loan is mutable or shared, and a primitive namespace used without its import (such as u32.toU64) suggests import silk.u32. A call that does not prove its callee's where S in R requirement-row premise now reports the new SEM0234, naming the premise, instead of the Effect.provide code SEM0074. Unsupported constructs in project silk check, silk build and silk run print a path:line:col: unsupported line instead of a SILK_UNSUPPORTED_JSON record (--json and the single-file silk build <source> -o <output> form keep the record). Package parameter errors keep their reason: an unsupported parameter type, a value failing its where predicate (named), an unknown or mistyped binding (with the silk.toml line), and a param outside the root module (reported at that declaration). An import refused for several reasons, such as an unknown module with several selected names, prints once. silk format no longer breaks the line between if, while or return and a ! operand. A named --profile builds into build/llvm/<target>/<profile>/ instead of overwriting the default debug artifact, and a failing silk run prints the [target] header and a run summary.
Migration
Migration notes not provided
silk add refuses a package that already depends on the current one with a message naming both, and a workspace member whose dependencies cannot load fails on its own: the other members still run and the workspace summary is still written.
Migration
Migration notes not provided
Add independently tested internal source-analysis rule, reaching-definition, and ordered-policy kernels for the compiler's complete-source migration.
Migration
No user action is required. This prerequisite does not replace the production borrow checker or change accepted Silk programs. The complete source analysis and checker cutover remain separate work.
Reuse semantic bodies across unrelated storage and operation edits by tracking the declaration, member, and catalog inputs they actually consume. Preserve invalidation for changed fields, original operation contracts, missing members, implementation membership, and relocated diagnostics.
Migration
Migration notes not provided
Language fixes found while writing the Silk book: a library checks every module its [package].exports lists and silk test discovers their tests, even when the root module imports none of them (an exports entry that names no module of the package is now refused); an array literal without a context type takes the shortest region of its elements instead of the first element's type, so [header("a", b"x"), header("b", &local)] compiles; a T: Copy bound on a move-only type, such as List.get or Pointer.read of a non-Copy element, is SEM0121 instead of an "unsupported" gap; match status on a reference is SEM0226 with a match &status.* hint instead of "unsupported"; an unsuffixed integer literal match arm takes the integer type of the other arms instead of forming a union with i32; and a union whose variant field elides a string lifetime, or an impl of a struct whose field does, now works instead of failing with SEM0051.
Migration
A library whose exported modules contain errors, or whose exports names a missing module, is now rejected at silk check; fix the module or the manifest entry.
Preserve cached nominal identities and selective imports acros...