{"id":16223775,"url":"https://github.com/alilleybrinker/tin","last_synced_at":"2025-04-08T01:45:49.575Z","repository":{"id":54421835,"uuid":"307004315","full_name":"alilleybrinker/tin","owner":"alilleybrinker","description":"A programming language experiment.","archived":false,"fork":false,"pushed_at":"2023-03-12T02:38:58.000Z","size":27,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-14T01:51:46.485Z","etag":null,"topics":["programming-language"],"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/alilleybrinker.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":"2020-10-25T01:44:00.000Z","updated_at":"2023-03-06T22:03:33.000Z","dependencies_parsed_at":"2024-11-04T00:40:36.062Z","dependency_job_id":"d56fca2f-2f8a-43d4-8c10-cd12c844d92b","html_url":"https://github.com/alilleybrinker/tin","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/alilleybrinker%2Ftin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alilleybrinker%2Ftin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alilleybrinker%2Ftin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alilleybrinker%2Ftin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alilleybrinker","download_url":"https://codeload.github.com/alilleybrinker/tin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247761030,"owners_count":20991533,"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":["programming-language"],"created_at":"2024-10-10T12:20:06.084Z","updated_at":"2025-04-08T01:45:49.559Z","avatar_url":"https://github.com/alilleybrinker.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tin\n\nTin is a _super-alpha_ (read: does not currently work) programming language,\nbeing written for personal fun to learn how to write a programming language.\nIt is a true hobbyist project with no particular goal as a project other than\ntrying and learning new things.\n\nTin the _language_ does have a few design decisions already made:\n\n* Tin will have __algebraic data types__ (because after Rust and Haskell, I\n  (Andrew) struggle to live without them).\n* Tin will be __Just-In-Time (JIT) compiled__ into bytecode (called \"Foil\")\n  that runs on a virtual machine (to learn JIT compilation and profile-guided\n  optimization).\n* Tin will be __garbage collected__ (to learn about garbage collection\n  algorithms).\n\nBesides these decisions, things are pretty up for grabs! If you're interested\nin learning to write a programming language as well, this may be a good\nproject for you too!\n\n## Project Structure\n\nTin is split into a collection of crates, many of which are empty at the\nmoment. Reusable elements are split out into `libraries/`, while CLI tools\nare in `tools/`.\n\nCurrently-planned CLI tools are (in rough order of expected implementation):\n\n1. `tinc`: The Tin compiler, parsing Tin, type-checking it, optimizing it,\n   and generating Foil bytecode.\n2. `foilvm`: The VM which runs compiled bytecode.\n3. `tint`: The Tin Tool, for creating new Tin projects, compiling and running\n   programs, and more (think: `cargo` in Rust).\n4. `tinenv`: The Tin installation manager, will work similarly to `pyenv` and\n   `rbenv` for managing multiple installs of Tin.\n5. `tinfmt`: Automatic formatter for Tin, so people can argue less about how\n   code should be written.\n\n## Current Work\n\nRight now, the #1 task is defining the initial syntax of Tin, and implementing\nthe parser and HIR (High-level Intermediate Representation) of a Tin program.\nThis representation will be the basis for initial optimization.\n\nOnce that's done, the next two questions will be:\n\n* Implementing type-checking. (How do we want types to be checked? Is the HIR\n  the right level of abstraction or should it be translated?)\n* Define the Foil bytecode language, then implement translation from HIR (or,\n  if added, any mid-level intermediate representation) to Foil, along with\n  the Foil VM to execute the bytecode.\n* Implement the garbage collector, so Tin programs don't just continuously\n  leak memory.\n\nAt this point, Tin would be 0.1, as you could actually write programs that\ncompile and run.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falilleybrinker%2Ftin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falilleybrinker%2Ftin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falilleybrinker%2Ftin/lists"}