# intern-lang v0.1.0 — Scaffold
**The repository bootstrap.** v0.1.0 stands up the crate, the tooling, and the
quality gates the implementation is built on — and nothing more. There is no
domain logic in this release on purpose: the interner, the `Symbol` handle, the
contiguous backing store, and the concurrent variant land across the 0.x series,
each behind a passing gate. This tag exists so that the first line of real code
is written against a green CI, a fixed toolchain contract, and a documented plan,
rather than into an empty directory.
## What is intern-lang?
A string interner. It maps each distinct string to a small, copyable `Symbol`,
stores the bytes once in a contiguous backing store, and hands back integer
handles so that comparing two names is an integer comparison rather than a byte
walk. It is the deduplication layer beneath the lexer and the symbol table:
intern an identifier once, then pass cheap `Copy` handles everywhere a string
name would otherwise travel. It owns interning and nothing else — lexing is
`lexer-lang`, scoping is `symbol-lang` — and it is one of the foundation crates
of the `-lang` language-construction family.
## What's in 0.1.0
### Crate manifest and toolchain contract
`Cargo.toml` declares the full publish metadata — description, keywords,
categories, repository, homepage, dual `Apache-2.0 OR MIT` license, and authors —
on Rust 2024 edition with MSRV 1.85. The feature set is minimal and additive:
`std` on by default, with an opt-in `serde` feature reserved for serialising
`Symbol`. The crate carries no first-party dependencies, so it builds and tests
standalone today.
### Quality gates, wired before the code
The CI matrix (`.github/workflows/ci.yml`) runs the full gate on Linux, macOS,
and Windows against both stable and the 1.85 MSRV: `cargo fmt --check`, clippy on
default and all features with `-D warnings`, the test suite on both feature sets,
and a documentation build with `-D warnings`. A separate security job runs
`cargo audit` and `cargo deny check`. `deny.toml`, `clippy.toml`, and
`rustfmt.toml` pin the license allow-list, the lint profile, and the
import-grouping style. The crate is `no_std`-ready behind the `std` feature.
### Documentation and plan
`README.md` and `docs/API.md` describe the intended surface and mark each item
still planned, so the public contract is legible before it is implemented.
`dev/DIRECTIVES.md` records the definition of done and the project-specific
invariants the property tests will hold to: interning the same string twice
returns the same symbol; distinct strings never collide; `resolve(intern(s))`
returns `s`; and a symbol stays valid after the backing store grows.
`dev/ROADMAP.md` front-loads the hard part — the core interner with a
growth-stable contiguous store at v0.2.0 — and carries an anti-deferral rule: no
listed hard task slips to a later phase without the file recording the move and
the reason.
## Breaking changes
**None.** This is the first tag.
## Verification
```bash
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo test --all-features
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features
cargo +1.85 build --all-features
cargo audit
cargo deny check
```
Counts at this tag: 1 unit test (a build smoke test), 0 doctests — there is no
public surface to exercise yet.
## What's next
- **0.2.0 — Core interner & symbol.** `intern`/`resolve`, a `Copy` `Symbol`, and
a contiguous backing store whose growth never invalidates an issued symbol.
Dedup, distinctness, round-trip, and symbol-stability come under property tests
against a `HashMap` reference. This is the hard part, and it is not deferred.
## Installation
```toml
[dependencies]
intern-lang = "0.1"
```
MSRV: Rust 1.85.
## Documentation
- [README](https://github.com/jamesgober/intern-lang/blob/main/README.md)
- [API Reference](https://github.com/jamesgober/intern-lang/blob/main/docs/API.md)
- [CHANGELOG](https://github.com/jamesgober/intern-lang/blob/main/CHANGELOG.md)
---
**Changelog:** [`CHANGELOG.md`](https://github.com/jamesgober/intern-lang/blob/main/CHANGELOG.md).