Versioning
Beans has one place that says which version it is, follows SemVer, and is currently on a preview line leading up to 1.0.
One source of version truth
Section titled “One source of version truth”All version numbers come from one file:
compiler/version.h.
version = "0.1.18"language_version = "1.0"runtime_abi_version = 6- version: the compiler version (
0.1.18). - language_version: the language version (
1.0). - runtime_abi_version: the runtime ABI number (
6).
From that header, compiler/beans/version.b is generated. A test
(test/version.sh) refuses a stale copy, so the generated Beans file can never
drift from the header.
beansc --version prints all three.
SemVer
Section titled “SemVer”Beans follows Semantic Versioning.
- Before 1.0, the language, standard library, CLI, module format, and ABI
may change between minor releases. Pin the compiler and commit
beans.lockfor serious projects. See Compatibility. - After 1.0, a breaking public change needs a new major version, and both the current and previous minor lines get fixes.
The runtime ABI number changes whenever generated code and the shipped runtime stop being compatible with each other.
The 0.1.x preview line
Section titled “The 0.1.x preview line”The 0.1.x line is a production preview on the 1.0 stabilization line. It is
solid enough to build on, but it is not 1.0 and you should not call it 1.0.0.
Reaching 1.0 requires every release gate in the roadmap to pass:
- the performance gates pass
- a 24-hour fuzz campaign
- a 30-clean-day beta, then a 14-clean-day release candidate
- no open critical or high correctness bugs
- the full 26-target release manifest published
See Maturity and platforms for the wider picture, and the release process for how a version is built and published.