Skip to content

Releases: souther-lang/souther

v0.1.0-rc5

v0.1.0-rc5 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Aug 02:15
32ccc81
Souther 0.1.0-rc5

Souther 0.1.0-rc4

Souther 0.1.0-rc4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Aug 07:35
0493f32

This is the first release to carry build artifacts. souther and souther.jar are the command line,
souther-lsp.jar is the language server the VS Code extension bundles, souther.tmLanguage.json is
the grammar, and SHA256SUMS covers the four.

A module compiled by an earlier compiler is not readable by this one. rc3 predates published modules
altogether, so nothing built against it carries over.

Modules

A compiled module carries its own declarations — its data, its behavior signatures, its exposing
line — on the classes it generated, so another project imports it from a jar with no .sou of its
own (ADR-0063). A module publishes its helpers and its values alongside its behaviors, and what a
jar promises is recorded on it, so a jar written under rules this compiler does not share is refused
rather than believed.

Measuring how well examples cover a model

souther examples reports what the examples in a model do and do not reach: the equivalence classes
of a type's partition, the boundaries a threshold gives, and the arms a behavior takes. --generate
prints commented rows for what nothing covers and --strict exits non-zero on a gap. None of this
existed in rc3.

The command line

souther run compiles a .sou in memory and drives one behavior through its derived decoders and
encoder. souther fmt prints the canonical form, rewrites in place, or checks. souther doc and
souther japi answer questions about the language and its libraries from the binary itself, so
neither a person nor a coding agent has to hunt through a workspace. Every command answers --help
with what it takes.

The language

Function types are types and a function name is a value. Optionals are made in one place and named
wherever they are read. Tuples compare by their elements. A rounding mode is an ordinary value. A
helper is typed by its body, and one that does not carry the termination guarantee has to say
partial — as does anything reaching it. An arm may declare that its combination cannot arise.

The standard library follows one naming grammar, and a name in it is reached qualified or by
importing it. A string is measured in code points.

Generated code targets Java 25, and a data is a Java record.

47 architecture decisions were recorded between rc3 and this release; docs/adr/README.md indexes
them with the reasoning behind each.

Getting it

brew install souther-lang/souther/souther

Or take souther from the assets below — a self-contained executable needing only a JDK 25 on the
path — and check it against SHA256SUMS.

0.1.0-rc3

Choose a tag to compare

@kawasima kawasima released this 24 Jul 13:30
1b278f5

Switch to org.souther-lang groupId and souther package. See #69.

Souther 0.1.0 (experimental)

Pre-release

Choose a tag to compare

@kawasima kawasima released this 19 Jul 13:21

Experimental preview. Requires JDK 25+.

souther runs a .sou file directly — no Maven project needed.

Unix

chmod +x souther                                   # the executable bit is not preserved on download
./souther run hello.sou --input '"world"'
# => "Hello, world"

Windows / any platform

java -jar souther.jar run hello.sou --input '"world"'

JSON in, JSON out (decoders/encoders are derived from the data shapes):

./souther run hello_json.sou --input '{"name": "world"}'
# => {"text":"Hello, world"}

Assets

  • souther — Unix executable (a launcher stub prepended to an uber jar).
  • souther.jar — the same uber jar, for java -jar.
  • hello.sou / hello_json.sou — the example inputs above.

A single file run on its own may omit the module header; it is named after the file.