Releases: eddmann/santa-lang-comet
1.0.1
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
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
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
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
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/orbuiltins and fix type names per spec - Error on unbounded
lastcall - 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
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.santaWASM API
format(source) // Returns formatted code
isFormatted(source) // Returns booleanRust API
format(source) // Returns formatted code
is_formatted(source) // Returns boolean0.0.9
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?
matchis more declarative and expresses intent clearly- Pattern matching with destructuring is built-in
- Exhaustiveness is clearer
- Aligns with functional programming idioms
0.0.8
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
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
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.