Silk

Alpha status and supported targets

Silk is an unreleased alpha language. The current compiler is substantial enough to write and run real programs, but neither source compatibility nor standard-library API compatibility is stable. Expect breaking changes, incomplete tooling, and sharp edges while the language is still being designed.

This page describes the implementation in the current repository. It is a boundary document, not a promise that every listed facility is finished or suitable for production use.

What works today

The implemented language includes:

  • modules, imports, visibility, globals, and typed constants;
  • integers, floating-point values, booleans, characters, and string and byte data;
  • structs, scalar enums, fixed arrays, runtime slices, structural unions, and exhaustive matching;
  • functions, first-class callables, pipelines, generics, interfaces, and specialization;
  • mutable places, affine ownership, shared and exclusive borrowing, explicit moves, and deterministic Drop on structured exits;
  • lazy typed Effects with independent success, failure, and service-requirement channels;
  • replaceable runtime services, lexical providers, failure recovery, finalization, retry, and explicit stack-safe Effect suspension;
  • cooperative single-threaded Fibers, structured cancellation, and an explicit local scheduler; and
  • an embedded standard library covering owned collections, allocation, text and bytes, hashing, formatting, logging, filesystem and process capabilities, input and output, random values, metrics, Effects, and Fibers.

The compiler checks source with one semantic model, lowers it to target-aware intermediate forms, and exercises it through a logical evaluator and executable backends. Backend implementation details do not change the source language contract.

Supported targets

The bootstrap compiler recognizes this closed target set:

TargetKindPointer widthArtifact paths
aarch64-apple-darwinnative macOS on Apple silicon64-bitLLVM-backed native executable
x86_64-unknown-linux-gnunative Linux on x6464-bitLLVM-backed native executable
aarch64-unknown-linux-gnunative Linux on ARM6464-bitLLVM-backed native executable
wasm32-unknown-unknownstandalone WebAssembly32-bitLLVM-backed or direct WebAssembly

The direct wasm backend accepts only wasm32-unknown-unknown. The llvm backend accepts every target above. Native linking and LLVM-backed WebAssembly finalization require a suitable Clang toolchain; cross-compiling may additionally require a compatible sysroot and linker environment.

The portable selector host resolves only on macOS ARM64 and Linux x64 or ARM64. Windows and Intel macOS are not native bootstrap hosts in this alpha. Target support says that the compiler knows the target's layout and backend path; it does not promise that every OS capability is available on every target. Reachable target-specific intrinsics are checked before artifact emission.

Execution paths

Silk currently uses three paths to keep semantics honest:

  • the logical MIR evaluator, used for deterministic semantic execution and tests;
  • native executables and WebAssembly emitted through the compiler's LLVM backend; and
  • a direct WebAssembly backend that does not depend on LLVM for code generation.

These are compiler implementation and validation paths, not three language editions. User code should depend on documented source semantics and explicit target capabilities rather than emitted LLVM or WebAssembly details.

Important alpha boundaries

The following are not current language capabilities:

  • parallel execution, multithreading, preemptive scheduling, or detached tasks;
  • a package registry or stable third-party dependency format;
  • broad native FFI and a stable C ABI surface;
  • self-hosting, macros, async/await syntax, or type aliases; and
  • a compatibility guarantee for syntax, diagnostics, manifests, generated artifacts, or standard library APIs.

Networking is not a portable standard-library service in the current alpha. Some host-facing facilities, such as OS filesystem and child-process providers, are necessarily target-specific and expose typed unsupported or platform failures where their contracts cannot be met.

How to read the documentation

Hand-written examples in this documentation are compiled by the repository test suite. The standard-library reference and diagnostic index are generated from compiler-owned sources and are checked for staleness. The prescriptive reference records programmer-visible rules, implementation boundaries, and evidence.

When prose and behavior disagree during alpha development, treat it as a bug. Report the smallest source example, selected target and backend, compiler revision, and diagnostic code or observed result.

See also

On this page