Skip to content

Releases

Iris C++ 0.1.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 06:13
  • Add the C++23 library iris, a native port of Gecode 6.5.0's reader that
    does not depend on Gecode. iris::Spec parses and loads reader specs and
    reads and catalogs data files and text; each operation that throws
    iris::Error has a try_ variant that returns std::expected.
  • Add iris::Data, whose accessors return std::span rows and
    std::string_view strings, iris::ValueRef for inspecting values without
    misuse, and Data::dzn() for MiniZinc data. Reading enforces the work
    budgets of the Iris Language Specification.
  • Give iris::Error every part of a diagnostic, from the code and locations
    to the excerpt, context, record path and earlier rejection, as
    iris::ErrorDetails, and render the diagnostic of the Specification from
    what().
  • Allocate from a std::pmr::memory_resource that the caller supplies, so
    that a host such as Gecode can give the library its heap.
  • Add typed handles, iris::Field, which data.get and params.set take,
    and print them for any reader spec with iris gen --lang cpp.
  • Add the spec builder, <iris/build.hpp>, which writes reader specs from C++
    statements, checks pattern placeholders at compile time, and names the
    std::source_location of the statement in its errors and in the errors of
    reading a built spec.
  • Install a CMake package that find_package(iris) finds, with the target
    iris::iris, and support FetchContent and add_subdirectory. Each release
    publishes a source archive, iris-cpp-VERSION.tar.gz, with its SHA-256
    checksum.
  • Test with GCC 14, Clang 20, Apple Clang and MSVC, under ASan, UBSan and
    TSan, with libFuzzer, and against the whole conformance suite.

0.1.0 - 2026-11-06

Choose a tag to compare

@github-actions github-actions released this 06 Nov 12:27

Release Notes

Library

  • Add the gecode-iris-gen crate, which generates spec builder programs
    from reader specs, with a Rust backend. iris gen builder --lang rust SPEC
    prints one.

  • Add iris-conformance compare, which compares two reader specs as syntax
    trees, and a test that round-trips every accepted reader spec of the
    conformance cases and format library through the Rust builder.

  • Add the unpublished iris-wasm browser boundary for reading, checking and
    formatting, with exact integer table values and bounded output previews.

  • Add streaming Data::write_json; preserve to_json and its canonical bytes.

  • Add validated column constructors and views to gecode-iris-core: Value::from_ints,
    from_floats and from_strings, Value::leaves and levels, Entry::new,
    and Data::from_entries, which return ColumnError for malformed columns or
    duplicate names.

  • Add the unpublished iris-js crate, the WebAssembly boundary of the
    TypeScript package, with a parsed-spec handle and a binary data transfer.

  • Share source diagnostic and formatter rendering through gecode-iris-sema, keeping
    gecode_iris_cli::render_error available as a re-export.

  • Add gecode_iris::iris!, which checks an inline or file reader spec at
    compile time, reports its first error as a compile error with the code and
    the iris check text, and expands to a Spec. The new gecode-iris-macros crate
    implements it without depending on gecode-iris-core.

  • Add gecode_iris::build, the spec builder of the new gecode-iris-build crate. It
    builds any Iris 0.1 reader spec from typed handles, prints deterministic text
    and parses it with Spec::parse; pattern! writes line patterns.

  • Point builder errors at the caller's code. Every statement of
    gecode_iris::build records its call site with #[track_caller], and
    BuildError shows the language code and message, the line of emitted text and
    the call site. Error::call_site gives the call site of a failure while
    reading a built spec, through the new CallSites map; a spec parsed from text
    has none, and its errors are unchanged.

  • Add typed access: Data::get and Data::try_get read through a Handle, and
    ValueRef gains as_floats, as_strs, len, is_empty, get, row and
    rows. Spec::source returns the text of a spec, and Params::set accepts a
    handle and a formatted value.

  • Implement Iris 0.1 parsing, name resolution, type and shape analysis, reading,
    and expression evaluation, including arrays, repeats, line patterns,
    sections, checks over records, parameters, instances, and catalogs.

  • Provide a lossless, error-tolerant syntax tree and source diagnostics with
    stable error codes, input locations, and record paths for failed checks.

  • Expose the reader through gecode-iris, with columnar data, zero-copy row
    slices, canonical JSON, and MiniZinc dzn output.

  • Enforce language work budgets and support host limits and cancellation;
    distinguish language diagnostics, host failures, and invalid data access.

CLI and language server

  • Add iris check, read, list, and conformance, with summary, JSON, and
    dzn output, parameters, instance selection, and documented exit statuses.
  • Add iris fmt with EditorConfig line widths, recursive directory formatting,
    standard input, check mode, and unified diffs.
  • Add iris lsp with diagnostics, definition and reference navigation, rename,
    hover, completion, inlay hints, symbols, folding, semantic tokens, document
    and range formatting, and live reading of sample files.

Conformance, performance, and distribution

  • Provide an independent conformance runner and the Rust iris-driver; pass
    the full Iris 0.1 suite and format cases, alongside pinned Gecode checks in CI.
  • Add parser and reader fuzzing, formatter equivalence checks, and benchmarks.
    Meet the pinned Gecode reference's speed on the documented 100 MB DIMACS
    comparison.
  • Prepare cargo-dist CLI archives and installers for Linux, macOS, and Windows
    under rust-v tags. Homebrew publication remains disabled.
  • Prepare the ten gecode-iris crates for crates.io, with metadata, versioned
    internal dependencies and the license text. iris-driver, iris-wasm,
    iris-js and the fuzz crate stay unpublished. Set the minimum supported Rust
    version to 1.88 and document API stability.

Install Iris 0.1.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Gecode/iris/releases/download/rust-v0.1.0/rust-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/Gecode/iris/releases/download/rust-v0.1.0/rust-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install Gecode/tap/iris

Download Iris 0.1.0

File Platform Checksum
rust-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
rust-x86_64-apple-darwin.tar.gz Intel macOS checksum
rust-x86_64-pc-windows-msvc.zip x64 Windows checksum
rust-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
rust-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum