ForgeLang – an interpreted language with human-like debugging ( expect)

4 weeks ago 1

CI

A tiny interpreted language with expressive expectations and recovery.

See installation steps in docs/INSTALL.md.

Build (Debug) and run an example:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug cmake --build build --config Debug .\build\Debug\forge.exe run .\examples\expect_showcase.fg

Windows PowerShell note: If running from build\Debug, pass paths like ..\..\examples\expect_showcase.fg.

Terminal install (Windows):

# Install latest release into %LOCALAPPDATA%\ForgeLang\bin and add to PATH irm https://raw.githubusercontent.com/FrostByte232/ForgeLang/main/scripts/install.ps1 | pwsh -c - # Then open a new terminal and run forge --version forge --help
  • Lexer, parser, type checker, and interpreter
  • @expect system with recovery blocks, suggestions, composite analysis, journaling, and summaries
  • CLI filters for expectations: severity and tags
  • Built-ins: println, length()

See docs/EXPECTATIONS.md for the full @expect feature guide.

Run a program:

.\build\Debug\forge.exe run path\to\file.fg

Flags:

  • -i, --interactive Enable interactive expectation recovery
  • --expect-min-severity=<info|warn|error|fatal> Filter expectations below severity
  • --expect-include-tags=a,b Only include these tags
  • --expect-exclude-tags=a,b Exclude these tags
  • --no-color Disable ANSI colors
  • --list-examples List bundled example scripts
  • -h, --help Show usage
  • examples/expect_showcase.fg — Demonstrates @expect variants, composite analysis, suggestions, and summary.

List bundled examples:

.\build\Debug\forge.exe --list-examples

Typical workflow:

cmake --build build --config Debug .\build\Debug\forge.exe ..\..\composite_condition_test.fg

Project structure highlights:

  • include/ headers
  • src/ sources
  • examples/ runnable scripts
  • docs/ feature docs

Prebuilt binaries (Windows) will be attached to GitHub Releases for tags v*. Create a new release by pushing a tag, e.g. v0.1.0.

To install from the latest release manually:

$uri = "https://github.com/FrostByte232/ForgeLang/releases/latest/download/forge-windows-x64.zip" $dest = "$env:LOCALAPPDATA/ForgeLang/bin"; New-Item -ItemType Directory -Path $dest -Force | Out-Null Invoke-WebRequest -Uri $uri -OutFile "$env:TEMP/forge.zip" -UseBasicParsing Expand-Archive -Path "$env:TEMP/forge.zip" -DestinationPath $dest -Force setx PATH "$env:Path;$dest" | Out-Null

MIT

Read Entire Article