{"id":21800251,"url":"https://github.com/azur1s/ichor","last_synced_at":"2025-03-21T06:43:47.148Z","repository":{"id":263542232,"uuid":"890060595","full_name":"azur1s/ichor","owner":"azur1s","description":"ML-like language for the backend (WIP)","archived":false,"fork":false,"pushed_at":"2025-01-12T17:47:34.000Z","size":131,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T04:33:26.051Z","etag":null,"topics":["backend","javascript","ocaml","programming-language"],"latest_commit_sha":null,"homepage":"","language":"OCaml","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/azur1s.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":"2024-11-17T22:42:22.000Z","updated_at":"2025-01-12T17:47:38.000Z","dependencies_parsed_at":"2024-12-04T01:20:34.651Z","dependency_job_id":"3f9eb34b-3640-4622-b950-74f4c4c07cd3","html_url":"https://github.com/azur1s/ichor","commit_stats":null,"previous_names":["azur1s/ichor"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azur1s%2Fichor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azur1s%2Fichor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azur1s%2Fichor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azur1s%2Fichor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azur1s","download_url":"https://codeload.github.com/azur1s/ichor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244752337,"owners_count":20504254,"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":["backend","javascript","ocaml","programming-language"],"created_at":"2024-11-27T10:43:38.585Z","updated_at":"2025-03-21T06:43:47.127Z","avatar_url":"https://github.com/azur1s.png","language":"OCaml","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003csamp\u003e\n\n# ichor\n\nichor is a ML-like language hoping to be used for writing backends. Target JavaScript.\n\nI know JavaScript isn't supposed to be on backend, but come on, it works.\n\n\u003e [!WARNING]\n\u003e Work in progress.\n\n## Progress\n\nThis project will be using [this versioning](https://pridever.org/). We are at `0.0.0`\n\nThe next goal is to be able to write a Discord bot as a dogfooding process, and after that maybe it'll be `0.1.0`\n\n- Language\n    - (X) Basic expressions\n    - ( ) Type inference (it works but will never be completed)\n    - (-) Optimization (I will be focusing on making everything works)\n\n        Broken, remove things randomly but at least there's a pipeline for it\n\n    - (-) File includes\n\n        There is `use` syntax for including files relative to the file being compiled and also for including `std` stuff\n\n        ```sml\n        use std/io\n        use ./foo (* everything starts with ./ will be relative *)\n        ```\n\n        No library management yet and/or build system so there's only `std` that isn't relative.\n\n    - ( ) Match \u0026 Pattern matching at function\n    - ( ) Mutability (everything is call by value at the moment)\n\n        Will be copying OCaml\n\n    - ( ) Custom operators\n\n        Should be easy since we use pratt parser and we can probably just add new operators at runtime :clueless:\n\n    - (X) Custom type definitions/alias\n\n        ```\n        type foo = int * int (* DONE *)\n        let a = foo (1, 2) (* DONE *)\n\n        (* TODO *)\n        let bar = bar int\n        let baz = a int | b bool\n        let qux = { a : int, b : bool }\n        ```\n\n    - ( ) Methods for said custom types\n\n        Probably do something like Rust where it's `.0`, `.1` ... for `T * U * ...` types\n\n    - ( ) Traits?\n    - ( ) Async/await or Promises\n\n        Probably something like Firefly from Ahnfelt where await are automatically inserted (I have not yet to learn the wizardry behind it)\n\n    - ( ) JS interop in both directions\n\n        There is `__js__`, `__js_method__`, `__js_field__` and `__inline__`\n\n        Probably better to use something like Firefly (again) where its a `JsValue` type instead of multiple intrinsic functions returning equivalent of `any` type\n\n        For libraries: either parse .d.ts or port the types to ichor\n        or ... just rewrite everything in ichor\n\n- Standard Libraries\n    - (-) [std/num.ich](std/num.ich) Numbers (like 3 functions)\n\n        Just port a lot of `Math.*` functions (I'll deal with it later)\n\n    - (-) [std/io.ich](std/io.ich) IO (basic amount + no formatting + no file IO)\n    - (-) [std/io.ich](std/list.ich) List\n\n        `map`, `iter` and `fold_left` are implemented\n\n        The goal is to be equivalent to OCaml's List module\n\n    - (-) [std/basehttp.ich](std/basehttp.ich) http (proof-of-concept instead of being usable)\n\n        I'll revisit after finishing SwE final (after end of Jan)\n\n    - ( ) Literally everything\n- Examples \u0026 Dogfooding\n    - (-) Showcase basic language features\n    - (X) Fibonacci (of course)\n    - ( ) Discord\n\n        Both waiting for async to be done \u0026 basic Discord library reimplementation OR interop with something like eris.js\n\n    - (-) HTTP server (as good as the http stdlib)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazur1s%2Fichor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazur1s%2Fichor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazur1s%2Fichor/lists"}