Skip to content

Incan v0.2.0

Choose a tag to compare

@dannymeijer dannymeijer released this 23 Apr 21:57
· 2 commits to release/v0.2 since this release
Immutable release. Only release title and notes can be modified.

Incan 0.2

Incan 0.2 is the release where the language becomes more explicit, more modular, and much more serious about Rust interop.

The biggest user-facing shift is that stdlib imports and decorators now live under the std.* namespace. This release also introduces the first experimental Incan library workflow, module-level static storage, explicit call-site generic arguments, and a much stronger Rust boundary around crates, rust:: imports, rusttype, and interop authoring.

Highlights

  • Namespaced stdlib surface under std.*
  • Clear separation between Incan dependencies and Rust dependencies in incan.toml
  • Experimental Incan Libraries with pub:: consumption
  • New static / pub static module storage
  • Explicit call-site generic arguments like id[int](1)
  • Stronger Rust interop and better docs around rust::, rusttype, and interop adapters
  • Major stabilization across ownership/codegen, tuple-unpack iteration, test harness cwd handling, and real downstream RC regressions

Migration notes

If you are upgrading from 0.1, the main changes are:

  1. Move stdlib imports and decorators to std.*
  2. Move Rust crates out of [dependencies] into [rust-dependencies] / [rust-dev-dependencies]
  3. Add explicit std.async / std.testing imports in files that use those surfaces

Notable fixes from the 0.2 RC cycle

  • Ownership/materialization fixes across comprehensions, Result[str, E], struct cloning, enum loops, shared list[str] helper calls, and list[str].append("...")
  • Stronger Python-shaped iteration and pattern handling, including for idx, name in enumerate(xs):
  • Builtin shadowing fixes for imported/user helpers such as sum
  • Correct project-root cwd behavior in generated incan test harnesses
  • Parse-safe len(...) lowering in generated Rust comparisons

Known limitations

  • Ownership/borrow lowering is still heuristic in some edge cases; the broader planner work is tracked for 0.3
  • incan fmt is still intentionally conservative on some line-length and layout cases
  • Rust macro syntax such as serde_json::json!(...) is still not supported directly in Incan source

Docs

Start here if you want the full release write-up and migration guide:

  • workspaces/docs-site/docs/release_notes/0_2.md