Compatibility in 1.x
d6 follows semantic versioning from 1.0.0:
- Patch releases (1.0.1, 1.0.2, ...) contain only bug fixes and performance improvements.
- Minor releases (1.1, 1.2, ...) may also add features.
- Nothing in 1.x breaks compatibility. A program, project or cut that works on one 1.x release keeps working on every later 1.x release. Anything that has to break waits for 2.0.
Language and standard library
Source that compiles and runs on 1.x compiles and runs, with the same results, on later 1.x releases. Later releases may add syntax, core methods, classes, modules, cuts and command-line options.
These are not covered:
- Bugs. A fix may change behavior that contradicted this documentation, or that crashed, hung or corrupted data.
- Security fixes, which may tighten what the sandbox, TLS, the HTTP parser or the package installer accept.
- Message text. Exception classes and the conditions that raise them are
stable. The wording of error messages, warnings, backtraces and
inspectoutput is not. - Performance and memory use, which may change in either direction.
- Interfaces marked experimental, below.
Compiled programs
The bytecode cache and the programs d6 build produces belong to the exact
build of d6 that made them; see caching. Another build
treats a cache file as a miss and recompiles the source, so upgrading needs no
action. A standalone executable keeps running as built. To move it to a new
release, run d6 build again with that release.
There is no bytecode format to target. Distribute source or executables, not cache files.
Projects and packages
Every 1.x facet reads Cutfile, Cutfile.dev and Cutfile.lock files
written by earlier 1.x releases, and installs from them the same versions they
lock. Later releases may add manifest keys. A project that uses a new key needs
a facet that knows it, and older releases reject it rather than ignoring it.
Published cut releases are immutable; see the cut contract. A cut that installs and loads on 1.x keeps doing so on later 1.x releases.
Experimental interfaces
These may change in any release:
- The C embedding API. The headers under
src/,ProgramBuilderand the VM's native entry points are the implementation, not a library interface. No release installs a header or a shared library to embed. - Tuning and diagnostic variables, such as
DIAMOND_JIT_THRESHOLD,DIAMOND_STRESS_GCand theDIAMOND_TRACE_*family.DIAMOND_JIT=1, which turns the JIT on, is stable. - The self-hosted compiler under
selfhost/. It is a test oracle for the native compiler, not a supported frontend. - The debugger and language server protocols beyond what their editors use: debugging and lsp describe the supported clients.
Platforms
Supported platforms are listed in portability. A 1.x release may add platforms. It drops one only when its toolchain or vendor support ends, and the changelog announces the change a release ahead.