{"id":20092344,"url":"https://github.com/rubixdev/roost","last_synced_at":"2025-03-02T15:53:04.098Z","repository":{"id":50117170,"uuid":"450234551","full_name":"RubixDev/Roost","owner":"RubixDev","description":"Command line interpreter for the roost language","archived":false,"fork":false,"pushed_at":"2022-10-18T16:16:26.000Z","size":1482,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"v2","last_synced_at":"2025-02-28T12:54:12.144Z","etag":null,"topics":["cli","interpreter","programming-language","roost-lang","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RubixDev.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}},"created_at":"2022-01-20T19:40:36.000Z","updated_at":"2023-12-01T13:41:46.000Z","dependencies_parsed_at":"2022-08-30T23:40:37.560Z","dependency_job_id":null,"html_url":"https://github.com/RubixDev/Roost","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RubixDev%2FRoost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RubixDev%2FRoost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RubixDev%2FRoost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RubixDev%2FRoost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RubixDev","download_url":"https://codeload.github.com/RubixDev/Roost/tar.gz/refs/heads/v2","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241533650,"owners_count":19977826,"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":["cli","interpreter","programming-language","roost-lang","rust"],"created_at":"2024-11-13T16:36:43.174Z","updated_at":"2025-03-02T15:53:04.074Z","avatar_url":"https://github.com/RubixDev.png","language":"Rust","readme":"# Roost - A Basic Programming Language for Demonstration\n*Roost* is a simple example for an interpreted programming language.\nIts name is a combination of the language it was written in - [Rust](https://rust-lang.org) - and the word \"rooster\".\n\nI created this language in connection with an obligatory research paper about the structure of a programming language in my 11th grade on school. The resulting paper can be found [here](Facharbeit_Der-Aufbau-einer-Programmiersprache_Silas-Groh_2022-03-07_digital.pdf).\nThe main focuses of the paper are the lexing and parsing steps, regular and context-free languages, and the grammatical definition of a language. After that a short note on compilers and [LLVM](https://llvm.org/) follows and some basic implementation details for a tree-walking interpreter are given.\n\nMost of the paper actually refers to [*rost*](https://github.com/RubixDev/rost), an even more stripped down language acting just as a calculator but following the same principles, because while writing I quickly noticed that even *Roost* is too complex to explain in such a short paper.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"logo.png\" alt=\"Logo of Roost\" title=\"Logo of Roost\" width=\"300\"\u003e\u003c/p\u003e\n\nThe logo seen here and on the paper's title page was created by my friend and classmate [Mik Müller](https://github.com/MikMuellerDev).\n\n## See also\n- [*rost*](https://github.com/RubixDev/rost): A simple interpreted calculator following the same principles\n- [The german research paper](Facharbeit_Der-Aufbau-einer-Programmiersprache_Silas-Groh_2022-03-07_digital.pdf)\n- [roost.rubixdev.de](https://roost.rubixdev.de): An online playground for *Roost* using [WebAssembly](https://webassembly.org/)\n  - And the corresponding [GitHub repository](https://github.com/RubixDev/roost-web)\n- [rost.rubixdev.de](https://rost.rubixdev.de): An online playground for *rost* using [WebAssembly](https://webassembly.org/)\n  - And the corresponding [GitHub repository](https://github.com/RubixDev/rost-web)\n- [My school's website](http://cfg.wtal.de/)\n- [Rust](https://rust-lang.org): The language both *Roost* and *rost* were written in\n\n## Local usage\n### 1. Clone this repository\n```bash\ngit clone https://github.com/RubixDev/roost.git \u0026\u0026 cd roost\n```\n\n### 2. Compile the binary\n```bash\nmake release\n```\n\n### 3. Copy the binary into your PATH\n```bash\nsudo cp target/release/roost-cli /usr/local/bin/roost\n```\nor for just this user:\n```bash\ncp target/release/roost-cli ~/.local/bin/roost\n```\n\n\u003e Note: This step assumes you are running Linux and have your $PATH variable setup correctly. On other operating systems you can either run the binary by specifying the whole path or use `cargo run --release`\n\n### 4. Run *Roost* code\n#### Using the REPL/interactive shell\nWhen executing the `roost` command without any extra arguments you enter the REPL for Roost. Here you can simply type expressions and execute them one by one.\n\n#### Running files\nTo run a file (usually ending with `.ro`) pass the path to that file as the first argument to `roost`. For example:\n```bash\nroost samples/sample.ro\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubixdev%2Froost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frubixdev%2Froost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubixdev%2Froost/lists"}