{"id":21614175,"url":"https://github.com/jowi-dev/arcane","last_synced_at":"2026-05-20T14:33:07.522Z","repository":{"id":261967811,"uuid":"885854935","full_name":"jowi-dev/arcane","owner":"jowi-dev","description":"Arcane is a programming language that makes your work feel like magic","archived":false,"fork":false,"pushed_at":"2025-02-12T14:32:44.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T16:53:46.508Z","etag":null,"topics":["elixir","languages","llvm","systems-programming"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jowi-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-11-09T15:16:10.000Z","updated_at":"2025-02-12T14:32:47.000Z","dependencies_parsed_at":"2024-11-24T17:22:08.376Z","dependency_job_id":"7d570cb9-43b1-4ba0-9844-47a767c59cd6","html_url":"https://github.com/jowi-dev/arcane","commit_stats":null,"previous_names":["jowi-dev/joe-lang"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jowi-dev/arcane","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Farcane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Farcane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Farcane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Farcane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jowi-dev","download_url":"https://codeload.github.com/jowi-dev/arcane/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Farcane/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265437642,"owners_count":23765125,"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":["elixir","languages","llvm","systems-programming"],"created_at":"2024-11-24T22:07:06.278Z","updated_at":"2026-05-20T14:33:05.486Z","avatar_url":"https://github.com/jowi-dev.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arcane Compiler\n\nBased on my infatuation with Elixir and Odin, along with practicalities of JS\n\nTLDR - A hammer so I can see the world as a nail\n\n### Syntax Pending\n```rust\n\n// Everything is a module. This is familiar to Elixir,\n// but differs in that there are explicit declarations for\n// dependencies, behaviours, macros, and system deps.\nArcane.Users :: module (\n  deps: []\n  sys: []\n  expands: []\n  contracts: []\n) =\u003e {\n    // Arrow Syntax from JS\n    // Type system for declaring new types\n    __MODULE__ :: struct  =\u003e {\n        name@String: \"\"  \n        email@String: \"\" \n    }\n\n    // Declaration syntax from Odin/Jai\n    searchUser(%{email: String} | %{name: String}) -\u003e __MODULE__ :: args@?(\n        // Automatic variable binding: email maps to `email: email`\n        (%{email}) =\u003e Repo.get_by(email: email)\n        (%{name}) =\u003e Repo.get_by(name: name)\n        _args =\u003e Error(\"Invalid Args\")\n    )\n\n    getUsers(String) -\u003e __MODULE__ :: (name) =\u003e {\n    //Using creates a block which automatically cleans after scope close\n        using\n            arena \u003c- Arena.new(1024 * 1024)\n            repo \u003c- Repo.connect()\n            file \u003c- File.write(\"data.txt\") =\u003e {\n\n            // Arenas are part of the standard library to help create predictable performance\n            twenty_four \u003c- Arena.alloc(24 arena)\n            // Type declaration after statement\n            query@String = String.new(\"select * from users where name = '#{name}'\" arena)\n\n            // implicit type casting\n            result \u003c- Repo.query(query repo arena)\n\n            // Nix like matching handles conditionals\n            result@(\n                Ok(data) =\u003e File.write(data file)\n                Error(msg) =\u003e Error(msg)\n            )\n        // Arena, Repo, and File would all call dispose() after the scope ends\n\n        // Catch statement familiar to with/else in Elixir\n        catch\n            error@ConnectError(msg) =\u003e Error(\"failed to connect ${msg}\")\n            error@WriteError(msg) =\u003e Error(\"failed to write ${msg}\")\n            error =\u003e Error(\"Unexpected: ${msg}\")\n        }\n    }\n\n    createUser(String String) -\u003e __MODULE__ :: (name email) =\u003e {\n        __MODULE__.new()\n        |\u003e Map.put(:name name)\n        |\u003e Map.put(:email email)\n        |\u003e ensure_unique() \n        |\u003e @?(\n            %User{} = user =\u003e Ok(user)\n            error =\u003e Error(error)\n        )\n    }\n\n    /**\n    * Docs attached to function headers via multi line comments\n    */\n    getAllNames(^list(User) list(User)) -\u003e String.t() :: args@?(\n        // Looping is done via recursion. The compiler is TCO'd so that it performs and behaves the same as loops\n        // via jump/jump not equal\n        // Head/Tail recursion available\n        (users*@[user | rest] out = []) =\u003e {\n            out = [user.name | out]\n            \n            getAllNames(rest out)\n        }\n\n        // Matching on an empty string, and a list with User types\n        (users*@[] out@list(User)) =\u003e Arcane.List.reverse(out)\n    )\n}\n```\n\n```mermaid\nflowchart TD\n    A[Source Code] --\u003e B[Lexer]\n    B --\u003e C[Parser]\n    C --\u003e D[AST]\n    D --\u003e E[S-expressions]\n    \n    E --\u003e F[LLVM IR Generator]\n    E --\u003e G[Nix Expression Generator]\n    \n    F --\u003e H[LLVM Backend]\n    G --\u003e I[Nix Evaluator]\n    \n    H --\u003e J[Native Binary]\n    I --\u003e K[Nix Store Path]\n\n    note1[Other Backends]\n    note2[System configuration]\n    note3[Runtime execution]\n    \n    E -.- note1\n    I -.- note2\n    J -.- note3\n```\n\nDocumentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)\nand published on [HexDocs](https://hexdocs.pm). Once published, the docs can\nbe found at \u003chttps://hexdocs.pm/arcane\u003e.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjowi-dev%2Farcane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjowi-dev%2Farcane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjowi-dev%2Farcane/lists"}