Skip to content

Releases: eddmann/santa-lang-comet

1.0.1

07 Jan 12:04

Choose a tag to compare

What's Changed

Redesigned WASM API with typed state objects and progress callbacks, plus added JSON output support for the --version flag.

Features

  • Redesign WASM API with typed state objects and progress callbacks
  • Add JSON output support for --version flag

Other Changes

  • Add Vixen to related implementations table

Full Changelog: 1.0.0...1.0.1

1.0.0

07 Jan 00:56

Choose a tag to compare

What's Changed

This release marks the 1.0.0 milestone for Comet, featuring CLI improvements with new output formats, repository standardization, and improved documentation.

Features

  • Add JSON and JSONL output formats for machine-readable CLI output
  • Add version-resolver for PR-based version bumps

Bug Fixes

  • Correct php-ext package name in Makefile
  • Add version to help header and fix EOF error position

Other Changes

  • Rename repository references to santa-lang-comet
  • Remove evaluate builtin
  • Standardize CLI help text format
  • Add comprehensive architecture documentation and improve README
  • Add AGENTS.md for AI coding agent guidance
  • Standardize GitHub workflow configuration
  • Add MIT license
  • Add cross-compilation targets to rust-toolchain

Full Changelog: 0.0.13...1.0.0

0.0.13

23 Dec 08:35

Choose a tag to compare

What's Changed

This release focuses on formatter improvements, fixing edge cases where semantically significant syntax was being incorrectly removed.

Bug Fixes

  • Preserve block braces for lambdas in pipe chains
  • Preserve semantically significant parentheses

Full Changelog: 0.0.12...0.0.13

0.0.12

20 Dec 13:43

Choose a tag to compare

What's Changed

Adds arity-aware map and filter functions that automatically pass index/key as a second argument, and fixes error propagation from filter callbacks.

Features

  • Make map and filter arity-aware for index/key passing

Bug Fixes

  • Propagate errors from filter callbacks instead of swallowing them

Other Changes

  • Add test coverage for arity-aware map/filter and error propagation

Full Changelog: 0.0.11...0.0.12

0.0.11

19 Dec 12:13

Choose a tag to compare

What's Changed

This release adds dictionary destructuring pattern support, grapheme cluster indexing for strings, and significant formatter improvements including better handling of trailing comments, blank lines, and various syntax constructs.

Features

  • Implement grapheme cluster indexing for strings
  • Add dictionary destructuring pattern support
  • Improve formatter with trailing comment and blank line preservation
  • Improve formatter trailing lambda and pipe chain formatting
  • Preserve dictionary shorthand syntax in formatter
  • Use line-width based formatting for composition operator

Bug Fixes

  • type() now correctly returns LazySequence for transformed ranges
  • Remove and/or builtins and fix type names per spec
  • Error on unbounded last call
  • Remove unnecessary brace preservation for match with collection subject in formatter

Other Changes

  • Apply clean code improvements from review

Full Changelog: 0.0.10...0.0.11

0.0.10

11 Dec 14:21
e790883

Choose a tag to compare

New Feature: Code Formatter

This release introduces an opinionated code formatter for santa-lang, built on the Wadler-Lindig pretty printing algorithm.

Features

  • 100-character line width with 2-space indentation
  • Smart wrapping for collections, pipe chains, and function compositions
  • Trailing lambda syntax for multi-statement closures
  • Operator precedence handling with parenthesis preservation
  • Idempotent guarantee - formatting already-formatted code produces identical output

Usage

# Format to stdout
santa -f script.santa

# Format file in place
santa --fmt-write script.santa

# Check formatting (for CI)
santa --fmt-check script.santa

WASM API

format(source)      // Returns formatted code
isFormatted(source) // Returns boolean

Rust API

format(source)       // Returns formatted code
is_formatted(source) // Returns boolean

0.0.9

09 Dec 08:14

Choose a tag to compare

Breaking Change: Remove else if Syntax

This release removes support for the else if syntax. Use match expressions for multi-way conditionals instead.

Migration

// Before (no longer supported)
if score >= 90 { "A" }
else if score >= 80 { "B" }
else { "C" }

// After (use match)
match score {
  90.. => "A",
  80..90 => "B",
  _ => "C"
}

Why?

  • match is more declarative and expresses intent clearly
  • Pattern matching with destructuring is built-in
  • Exhaustiveness is clearer
  • Aligns with functional programming idioms

0.0.8

08 Dec 17:04

Choose a tag to compare

Introducing Comet

This release officially introduces Comet as the codename for the Rust tree-walking interpreter implementation of santa-lang.

Standardized Release Artifacts

All release artifacts have been renamed to follow a consistent naming convention:

Old Name New Name
santa-lang-cli-{version}-x86_64-unknown-linux-gnu santa-lang-comet-cli-{version}-linux-amd64
santa-lang-cli-{version}-aarch64-unknown-linux-gnu santa-lang-comet-cli-{version}-linux-arm64
santa-lang-cli-{version}-x86_64-apple-darwin santa-lang-comet-cli-{version}-macos-amd64
santa-lang-cli-{version}-aarch64-apple-darwin santa-lang-comet-cli-{version}-macos-arm64
santa-lang-lambda-{version}.zip santa-lang-comet-lambda-{version}.zip
santa-lang-php-ext-{version}-x86_64-linux.so santa-lang-comet-php-{version}-linux-amd64.so
santa-lang-jupyter-{version}-* santa-lang-comet-jupyter-{version}-*
santa-lang-wasm-{version}.tgz santa-lang-comet-wasm-{version}.tgz

Docker Images

  • Implementation-specific: ghcr.io/eddmann/santa-lang-comet:cli-{version}
  • Generic (recommended): ghcr.io/eddmann/santa-lang-cli:latest

About Comet

Comet is the recommended santa-lang implementation, featuring:

  • Tree-walking interpreter with tail-call optimization
  • CLI with interactive REPL
  • Web runtime (WASM)
  • AWS Lambda runtime
  • PHP extension
  • Jupyter kernel

0.0.7

08 Dec 15:59

Choose a tag to compare

What's Changed

New last Builtin Function

Added the last function to retrieve the final element from collections.

Supported types: List, Set, String, Range, Lazy Sequence

Examples:

last([1, 2, 3]);        // 3
last("hello");          // "o"
last(1..=5);            // 5
last(1..5);             // 4
last([]);               // nil

New bit_not Bitwise Function

Added bitwise NOT (complement) operation.

bit_not(0);   // -1
bit_not(5);   // -6
bit_not(-1);  // 0

Improved env() REPL Function

The env() function now displays variables in a cleaner, more readable format.

let x = 42;
env();
// Environment:
//   x = 42

0.0.6

05 Dec 13:36

Choose a tag to compare

What's Changed

Enhanced List Pattern Matching

Rest patterns (..name) can now appear at any position in list patterns, not just the end.

New patterns supported:

  • Prefix patterns: [..init, last] - capture all but the last element
  • Middle patterns: [first, ..middle, last] - capture elements between first and last

Examples:

let [..init, last] = [1, 2, 3, 4];
// init = [1, 2, 3], last = 4

let [first, ..middle, last] = [1, 2, 3, 4, 5];
// first = 1, middle = [2, 3, 4], last = 5

This enhancement enables more expressive pattern matching, particularly useful for AoC puzzles requiring list manipulation from both ends.