This is Rockstar, an esoteric programming language whose syntax is inspired by the lyrics to 80s hard rock and heavy metal songs.
Rockstar has three main components:
/Starship
contains the Starship interpreter for Rockstar, built in C# and .NET/cm-lang-rockstar
contains the CodeMirror editor used on the Rockstar website/codewithrockstar.com
contains the Rockstar website, docs and examples
To build the Starship engine, you'll need the .NET 9 SDK
dotnet build ./Starship/Starship.sln
dotnet test ./Starship/
The codewithrockstar.com
website is built with Jekyll and hosted on GitHub Pages.
The embedded Rockstar interpreter is the Starship engine compiled to run on web assembly:
dotnet build ./Starship/Starship.sln
dotnet publish ./Starship/Rockstar.Wasm -o codewithrockstar.com/wasm/ -c Debug
Building codewithrockstar.com works like this:
build-rockstar-2.0
- runs on Linux
- Builds the parser and interpreter
- Runs the test suite
- Uploads artifacts for:
- Linux native binary
- WASM interpreter for the website
build-windows-binary
- builds the Rockstar windows binary
build-macos-binary
- builds the macOS binary
release-rockstar-engine
- creates the GitHub release from the latest binaries
build-and-deploy-website
- Downloads the Rockstar WASM binary
- builds the CodeMirror editor
- Builds the Jekyll site
- Deploys the site to GitHub Pages
In dev mode, I use symbolic directory links between the various parts of the project. Rebuilding the .NET solution will rebuild the WASM interpreter, which Jekyll can see as /wasm/**
, and trigger a site rebuild, and all the Rockstar code examples are part of both the Rockstar.Test
.NET test suite project and the codewithrockstar.com
site:
> cd codewithrockstar.com
> mklink /d wasm ..\Starship\Rockstar.Wasm\bin\Debug\net8.0-browser
> mklink /d examples ..\Starship\Rockstar.Test\programs\examples
codewithrockstar.com
/wasm --> [ /Starship/Rockstar.Wasm/bin/Debug/net8.0-browser ]
/examples --> [ /Starship/Rockstar.Test/programs/examples ]
/index.html
/example.md
/js
/rockstar-editor.js (from codemirror)