{"id":15032231,"url":"https://github.com/typedduck/kamo","last_synced_at":"2025-04-09T21:23:11.440Z","repository":{"id":209449085,"uuid":"724035449","full_name":"typedduck/kamo","owner":"typedduck","description":"A library to assist in the creation of an interpreter or compiler and its associated runtime.","archived":false,"fork":false,"pushed_at":"2024-04-28T09:42:06.000Z","size":456,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-08T13:57:44.222Z","etag":null,"topics":["garbage-collection","memory-management","parser","parser-combinators","parsing","rust","rust-library","s-expressions","scheme"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/typedduck.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":"2023-11-27T09:09:21.000Z","updated_at":"2024-04-28T09:42:09.000Z","dependencies_parsed_at":"2024-04-16T14:26:15.000Z","dependency_job_id":"c10e4fe9-7f5c-44c4-91d8-eb0888f5cf0e","html_url":"https://github.com/typedduck/kamo","commit_stats":null,"previous_names":["typedduck/drake","typedduck/kamo"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typedduck%2Fkamo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typedduck%2Fkamo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typedduck%2Fkamo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typedduck%2Fkamo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typedduck","download_url":"https://codeload.github.com/typedduck/kamo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248113045,"owners_count":21049771,"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":["garbage-collection","memory-management","parser","parser-combinators","parsing","rust","rust-library","s-expressions","scheme"],"created_at":"2024-09-24T20:17:47.950Z","updated_at":"2025-04-09T21:23:11.404Z","avatar_url":"https://github.com/typedduck.png","language":"Rust","funding_links":["https://www.patreon.com/typedduck"],"categories":[],"sub_categories":[],"readme":"# Kamo\n\nKamo (カモ) is japanese for duck.\n\nKamo is a library to assist in the creation of an interpreter or compiler and\nits associated runtime.\n\nThe library is designed to be modular and generic. It is not tied to any\nspecific language or runtime. It can be used to implement any simple language or\nruntime. It provides a parser combinator library, automatic memory management\nwith a garbage collector, value representation, evaluation, type system, and a\nread-eval-print-loop.\n\nThe underlying technology is based on the Lisp family of languages. The runtime\nvalues and abstract syntax tree (AST) are conceptually based on S-expressions.\nThe evaluation is based on the Lisp evaluation model with primitive operations and\nspecial forms.\n\nThe library is written in Rust and is designed to be safe and fast.\n\nThe documentation is available at [docs.rs](https://docs.rs/kamo).\n\n## Status\n\nThe project is a work in progress. The API is not stable and may change at any\ntime.\n\n![Build Status](https://img.shields.io/github/actions/workflow/status/typedduck/kamo/rust.yml)\n\n**Kamo**\n\n[![Crates.io](https://img.shields.io/crates/v/kamo)](https://crates.io/crates/kamo)\n[![Crates.io](https://img.shields.io/crates/d/kamo)](https://crates.io/crates/kamo)\n\n**Kamo Macros**\n\n[![Crates.io](https://img.shields.io/crates/v/kamo-macros)](https://crates.io/crates/kamo-macros)\n[![Crates.io](https://img.shields.io/crates/d/kamo-macros)](https://crates.io/crates/kamo-macros)\n\n## Feature List\n\n- [x] Module `kamo::parser` for parsing UTF-8 text. A parser combinator\n    library for parsing UTF-8 text in a safe and mostly zero-copy way.\n- [x] Module `kamo::mem` for automatic memory management. Values are allocated\n    in a mutator which holds an arena allocator for each type. Memory collection\n    is done by a mark and sweep garbage collector.\n- [x] Module `kamo::value` for values. Values can either hold immediate values\n    or pointers to values allocated in the mutator.\n- [x] Module `kamo::types` for types. The type system is used to infer the\n    types of the intermediate representation and the AST.\n- [ ] Module `kamo::eval` for evaluation. The evaluator processes an AST, which\n    is an symbolic expression tree, and evaluates it to an intermediate\n    representation. The intermediate representation can then be interpreted or\n    compiled to a target representation. The interpreter is generic and can be\n    used to interpret any intermediate representation.\n- [ ] Module `kamo::repl` for a read-eval-print-loop. The REPL is used to\n    interactively evaluate expressions and is generic and can be used to\n    evaluate any intermediate representation.\n- [ ] Module `kamo::lang::scheme` for the Scheme language. The Scheme language\n    is implemented as a library on top of the `kamo` modules. It implements a\n    subset of the R7RS standard.\n\n## License\n\nThis project is licensed under the MIT License or the Apache License 2.0, at\nyour option. For details, see the `LICENSE-MIT` and `LICENSE-APACHE` files for\nmore information.\n\n## Support\n\nIf you like this project and want to support it, you can do so by:\n\n- Giving it a star on GitHub.\n- Sharing it with your friends.\n- Contributing to the project by opening an issue or a pull request.\n- Donating to the project by using the following links:\n  - Bitcoin (Taproot): `bc1pqdck3v3r7sa4mgl0dztfzufa4xg66g8cpcgwvjax9rtx6mlxafdqcgw3g2`\n  - Bitcoin (Segwit): `bc1qet2ypmsxtx6mc03329ft5a736fy906flm4c42a9d3e7mvu872tcs8myzs6`\n  - [Patreon](https://www.patreon.com/typedduck)\n\nPatreon supporters will be listed in the `SUPPORTERS.md` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypedduck%2Fkamo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypedduck%2Fkamo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypedduck%2Fkamo/lists"}