{"id":23249175,"url":"https://github.com/yuri-xyz/tails","last_synced_at":"2025-08-20T07:31:29.054Z","repository":{"id":204791103,"uuid":"712574227","full_name":"yurixander/tails","owner":"yurixander","description":"🛠️ An experimental functional systems programming language, written in Rust and powered by LLVM as a backend.","archived":false,"fork":false,"pushed_at":"2024-04-01T05:35:46.000Z","size":2073,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-04-20T23:54:10.696Z","etag":null,"topics":["compiler","language","llvm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yurixander.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}},"created_at":"2023-10-31T18:31:11.000Z","updated_at":"2024-01-06T23:07:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"2a8c470a-31fc-4361-856e-ece2717fe782","html_url":"https://github.com/yurixander/tails","commit_stats":null,"previous_names":["codex-tooling/tails","yurixander/tails"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yurixander%2Ftails","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yurixander%2Ftails/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yurixander%2Ftails/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yurixander%2Ftails/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yurixander","download_url":"https://codeload.github.com/yurixander/tails/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230400578,"owners_count":18219832,"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","language","llvm"],"created_at":"2024-12-19T08:17:41.414Z","updated_at":"2025-08-20T07:31:29.045Z","avatar_url":"https://github.com/yurixander.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"100\" alt=\"Logo resembling fox\" src=\"./github/logo.png\" /\u003e\n  \u003cbr /\u003e\n  \u003cbr /\u003e\n  \u003cimg alt=\"Preview\" src=\"./github/preview.png\" /\u003e\n  \u003cp\u003eAn experimental functional systems programming language,\u003cbr /\u003ewritten in Rust, and powered by \u003ca href=\"https://en.wikipedia.org/wiki/LLVM\"\u003eLLVM\u003c/a\u003e as a backend.\u003c/p\u003e\n\u003c/div\u003e\n\u003cbr /\u003e\n\n🎯 **Goal:** The intent is to create a programming language that balances simplicity and performance, focusing on functional programming paradigms and compile-time safety mechanisms. The language aims to facilitate explicit tracking of side effects and embrace a predictable coding environment. See the [principles](#principles) section for more information.\n\n## Features\n\n* Python-like, concise syntax (adhering to the [off-side rule](https://en.wikipedia.org/wiki/Off-side_rule))\n* Functional programming paradigm\n* Strong, static type system\n* First-class functions\n* Pattern matching\n* Powerful type inference, based on [Hindley-Milner type system](https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system)\n* [Parametric polymorphism via generics](https://en.wikipedia.org/wiki/Parametric_polymorphism)\n* [Structural typing](https://en.wikipedia.org/wiki/Structural_type_system)\n* [Closures](https://en.wikipedia.org/wiki/Closure_(computer_programming))\n\n## Principles\n\n* ✨ **Simplicity**: The language should be easy to learn but powerful enough for complex tasks. A simple syntax helps lower the barrier to entry. \u003cbr /\u003e\u003cbr /\u003e\n* 📐 **Consistency \u0026 orthogonality**: Stick to one way of doing things. The language should use a few basic constructs that can be combined in many ways. This makes it easier to learn and use.\u003cbr /\u003e\u003cbr /\u003e\n* 🔮 **Predictable, explicit, and deterministic semantics**: The type system should be straightforward and avoid surprises. No guessing games—you should always know what the code is doing.\u003cbr /\u003e\u003cbr /\u003e\n* ❕ **Opinionated**: Make the language so there's a 'right way' to do things. This ensures everyone writes code that looks and works similarly, making it easier to understand and collaborate.\u003cbr /\u003e\u003cbr /\u003e\n* 🙅🏻‍♂️ **No meta-programming or reflection**: Avoid features like meta-programming and reflection. They're often misused and make the language harder to learn and less consistent.\u003cbr /\u003e\u003cbr /\u003e\n* ⚡ **Compile-time emphasis**: Do most heavy lifting, like error checking and memory management, when the code is compiled. This makes the executables faster and more reliable.\u003cbr /\u003e\u003cbr /\u003e\n* ⛓️ **Functional paradigm**: Use functional programming to simplify code and reduce errors. It minimizes side effects and makes the code easier to reason about.\n\n## Hello world example\n\n\u003cimg alt=\"Syntax highlighting of a code snippet showing an application that prints 'hello world' to the console\" src=\"./github/hello-world.png\" /\u003e\n\n\u003e The `foreign` keyword lets you include functions and variables from other programming languages. You can put multiple such items in a foreign block to keep your code neat.\n\n\u003e The `unsafe` keyword is used for actions that have potential risks, like calling foreign functions or using pointers. This is much like Rust's `unsafe` keyword and helps you be explicit about the risky parts of your code.\n\n\u003e `nat` is a type that stands for unsigned integers, which are 32-bit by default. You can also use variations like `nat8`, `nat16`, and `nat64` for different bit sizes.\n\n\u003e The compiler doesn't automatically coerce types, so you can use `0::nat` to specify a literal's type. This is handy when the type you want doesn't match the compiler's default 32-bit numeric type.\n\n## Building and running\n\n### Prerequisites\n\n* [Rust](https://www.rust-lang.org/tools/install)\n* [LLVM 15](https://llvm.org/docs/GettingStarted.html)\n\n### Building\n\n```bash\ncargo build\n```\n\n### Running tests\n\n```bash\ncargo test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuri-xyz%2Ftails","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyuri-xyz%2Ftails","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuri-xyz%2Ftails/lists"}