{"id":17237012,"url":"https://github.com/sweeper777/album","last_synced_at":"2025-03-26T01:43:11.064Z","repository":{"id":100254376,"uuid":"387652321","full_name":"Sweeper777/Album","owner":"Sweeper777","description":"An esoteric programming language with lots of songs","archived":false,"fork":false,"pushed_at":"2022-03-04T22:20:04.000Z","size":292,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-30T23:16:24.224Z","etag":null,"topics":["compiler","esolang","stack-based"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sweeper777.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-20T02:45:42.000Z","updated_at":"2022-02-16T22:23:35.000Z","dependencies_parsed_at":"2023-05-13T05:15:30.025Z","dependency_job_id":null,"html_url":"https://github.com/Sweeper777/Album","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweeper777%2FAlbum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweeper777%2FAlbum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweeper777%2FAlbum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweeper777%2FAlbum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sweeper777","download_url":"https://codeload.github.com/Sweeper777/Album/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245573841,"owners_count":20637670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","esolang","stack-based"],"created_at":"2024-10-15T05:37:30.774Z","updated_at":"2025-03-26T01:43:11.041Z","avatar_url":"https://github.com/Sweeper777.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Album\n\nAlbum is a stack-based, Turing-complete, esoteric programming language inspired by [Super Stack!](https://esolangs.org/wiki/Super_Stack!).\n\nAlbum programs are called \"playlists\". Each playlist starts with a declaration saying by whom this playlist was created, followed by a list of songs, which act as instructions and branch labels. See [spec.md](spec.md) for the language specification and the list of built-in songs.\n\nFor some example programs written in Album, see the [`Resources/Examples`](Resources/Examples) folder.\n\n## The C# Implementation\n\nThis repo implements an Album compiler that outputs CIL, written in C# 9 and .NET 5.\n\n### Testing\n\n    dotnet test\n\n### Building From Source\n\n    dotnet build\n\nThis creates an `Album.dll` executable at the `Album/bin/Debug/net5.0` directory. For more options, see the [documentation](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build). To run it, use the `dotnet` command:\n\n    dotnet Album/bin/Debug/net5.0/Album.dll \u003cINPUT SOURCE FILE\u003e [options]\n\nYou can also choose to deploy the Album compiler using [`dotnet publish`](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish).\n\n### Compiler Options\n\n```none\n-o, --output        Path to output file.\n\n-P, --parse-only    Generates the parser output, with optimisations applied,\n                    if any\n\n-R, --run           Runs the program immediately, without generating any\n                    files.\n\n-O, --optimise      Smaller output code size, longer compile time\n\n-w, --warn          (Default: Warning) What warnings should be output as Valid\n                    values: None, Warning, Error\n\n-s, --manifest      Path to custom song manifest file\n\n--help              Display this help screen.\n```\n\nIf `-o` is not specified, the default output file path is `./Program.exe`, or `./ParserOutput.txt` in the case of `-P`. In case an executable is generated, an additional `.runtimeconfig.json` file with the same name as the executable will be generated in the same directory.\n\n## Song Manifests\n\nIn case you don't like my choice of songs, you can make up your own songs, write them in a JSON file, and pass that to the compiler when compiling your code. This is known as a song manifest. The default song manifest is located in `Resources/`. You can use that as an example when creating your own song manifests.\n\n## Benchmarks\n\nYou can go into the `Album.Benchmarks` directory and run:\n\n    dotnet run -c Release\n\nto run the benchmarks. I compare the difference in compilation time when applying optimisation versus not doing that, and the execution time of optimised vs unoptimised Album code vs C# code. On my MacBook Pro, Album runs 30 times slower than C# for the 99 bottles of beer playlist.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsweeper777%2Falbum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsweeper777%2Falbum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsweeper777%2Falbum/lists"}