Releases: souther-lang/souther
Release list
v0.1.0-rc5
Souther 0.1.0-rc5
Souther 0.1.0-rc4
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/southerOr 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
Souther 0.1.0 (experimental)
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, forjava -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.