Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 12:23
· 68 commits to main since this release
c57071c

synod check now understands whole programs: it loads modules, finds the
phrase every sentence calls, and checks types and contexts, reporting every
compile-time error of specification v0.2.1. Running programs
(synod run) comes in the next release.

Added

  • Language types and their acceptance rules (list of T, map of K to V,
    node types Node and p.Node).
  • The standard library, embedded in the binary: every phrase of the std
    catalog, with native declarations and the phrases written in Synod.
  • Module loader: synod.mod, package graph, main files next to their
    library, std/ imports, remote modules from the
    module's vendor/ folder, import cycles.
  • Fixes that need the package loaded, for synod fmt: record settings
    order, name case, and a dropped own-package qualifier.
  • synod check now checks whole programs, not just their form. It finds
    the phrase every sentence calls, checks the types of values (arguments,
    operands, list and map items, node types such as raft.Node, and
    results), infers the type of {} from how it is used, and reports
    every error code of the specification: type-mismatch, ambiguous-empty,
    missing-result, value-as-statement, action-as-value, context
    (what may run in node, main, check and look code) and foreign-state
    (node code that touches another node's state). Every example and every
    std package checks clean.

Changed

  • synod fmt applies the fixes above when the package loads; a file in a
    package that does not load is formatted as before.
  • Diagnostic paths are shown relative to the working directory when inside it.
  • CI and release workflows use the Node 24 versions of GitHub Actions.