Appa v2.0.0 (Stable)
Appa, the Gata compiler, reaches its first stable release with the merge of branch next, plus the workflow and packaging fixes that landed on top of it.
This is a full release aimed at setting the baseline for things to come, and finalizing the Gata syntax. Below is the full changelog:
-
Rebuilt the command line as a laid-out program rather than a pile of
Console.WriteLinecalls. The newFmtmodule measures visible width with SGR escapes counted as zero columns, so colored cells still align, and it provides greedy word wrap, padded two-column tables with hanging indents, and right-justified lines against the real terminal width clamped to a readable 48 to 96 columns. Piped output and CI logs fall back to a fixed 80 columns instead of throwing. Every block of help, diagnostics, and installer output now goes through it, so nothing in the tree is wrapped or padded by hand. -
Gave Appa a proper help screen and command discovery.
PrintHelp()renders commands, options, and examples as data throughFmt, the command list is generated from a singleCommands()source so help and matching cannot drift apart, and a mistyped command now gets a "did you mean" suggestion instead of a bare failure. -
Added a banner and logo with a gold-to-ember gradient. The cat art and the
Appawordmark are composed into a single lockup, vertically centered against each other, letterspaced so a short string reads as a masthead, and painted down a 32-step gradient in 24-bit color where the terminal advertises it and in the nearest of three xterm-256 golds where it does not. The same palette now drives the diagnostics gutter, which moved from blue to sand. -
Rewrote spinners to report elapsed time. Steps are numbered as they run, each finished step prints with its duration pinned to the right edge, and downloads spin on a single line with live progress before collapsing into the same finished-step line as every other stage.
-
Turned
appa installandappa updateinto a complete job. They fetch the cross-toolchain, libgata, the environments and the GatOS template, put Appa on PATH (re-running the whole install elevated throughsudoor a UAC prompt when that is required), install the binary into its own directory, fix up permissions and ownership on Unix, and then offer to delete the copy you downloaded. On Windows the self-delete is deferred to a PowerShell fragment that runs after the process exits, since a running image can be neither deleted nor overwritten. -
Made installer failures legible. Errors that are not the compiler's fault, network problems, permissions, missing tooling, are now identified as such and reported with what to do next, rather than surfacing as a stack trace.
-
Collapsed reserved local names from a generated-prefix table into one rule.
IsReservedLocalwas a frozen dictionary of twenty prefixes (_g,_res_,_catch_,_ixoand the rest) matched against digit suffixes; it is now simply "the name begins with__". Every compiler temporary inOwnershipandTypeResolverwas renamed to that prefix, which means one underscore belongs to the user again. The diagnostic changed accordingly and now suggests the single-underscore spelling of the name you tried to use. -
Extended reserved-name checking to the places it was missing. Loop variables in both
for-inshapes and match bindings are now checked against the reserved rule, which they previously slipped past entirely. -
Made
%overloadable. The modulo operator now parses as an overloadable operator name and mangles tomod, joining the arithmetic and comparison operators it had been left out of. -
Fixed
throwswith no return type inventing anint. Athrowsdeclaration with no return type now produces nothing, exactly asthrows voiddoes, since the Result typedef the two share already folds void to int for its C name.assigninside a handler for such a call now reports that the call produces no value and points at giving the function a return type, instead of silently coercing. -
Allowed multiple kernel and userspace blocks. A realm is one namespace however many blocks open it, across however many files, so structural validation now counts entry points rather than blocks and accepts the split as long as exactly one entry function exists between them.
-
Made the process deployment mode single-spelled. The mode is written before
processand nowhere else; the trailing colon form is gone, and writing one now produces a targeted diagnostic showing the correct spelling rather than a generic header error. -
Added diagnostic G057 for shadowed functions. A file-local private function that displaces the name of a public function in an imported file now warns once per name, with the owning module named, the qualified call spelling offered as an alternative, and a new
@shadowsannotation to declare the displacement deliberate. A stray@shadowson a function that shadows nothing is rejected. The code G057 was previouslyDuplicateRealm, which the multi-block change made obsolete. -
Added CI on four runners: Linux, Windows, macOS arm64, and macOS Intel. Each builds and publishes its own native AOT executable and uploads it as an artifact, and the README carries a status badge per platform.
-
Hardened the test harness against toolchain variation across those runners.
HostedRunnow probes each C compiler once and caches the answers: whether-lmis needed or the math functions are already in the C runtime, and which-std=spelling it accepts, falling back fromc23toc2xand fromc17toc18orc11on compilers that predate the ratified names. This is what turned the math fidelity, portability, and union fuzz tests green on every runner rather than just the development machine. -
Expanded test coverage substantially. New
OperatorConsistencyTestsandHardeningTestsfiles, plus significant additions toMultiFileTests,InstallerTests,PipelineTests,CatchCallTests, andCliDiagnosticsTests, covering operator overloading, multi-file name resolution and shadowing, and the installer paths. -
Added the project's public face: a 444-line README covering the vision, the compiler internals, getting started, project configuration, and a full CLI reference, a LICENSE, the Appa logo in SVG, and an application icon with proper product, company, and title metadata on the assembly.
-
Extracted the test harness
TempDirintosrc/CLI/Scratch.csso the compiler and its tests share one scratch directory implementation, and cleaned up stale comments and dead code left inOwnership,TypeResolver, andParser, including a comment that had been spliced into the middle of a diagnostic string literal.
Installation
For setting up Appa in your own machine, grab one of the following executables depending on the platform and run appa install:
- Windows:
appa-win.exe - Linux:
appa-linux - MacOS on ARM (Apple Silicon):
appa-amac - MacOS on Intel (Legacy x64):
appa-imac