{"id":42424193,"url":"https://github.com/soerlemans/acris","last_synced_at":"2026-02-02T23:13:27.483Z","repository":{"id":192254613,"uuid":"680250193","full_name":"soerlemans/acris","owner":"soerlemans","description":"Acris is a compiler project for a systems programming language aimed at interoperability with multiple languages.","archived":false,"fork":false,"pushed_at":"2026-01-24T22:58:12.000Z","size":2360,"stargazers_count":4,"open_issues_count":13,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-25T05:50:07.455Z","etag":null,"topics":["acris","ast","c","cmake","codegen","compiler","cpp","cpp23","interoperability","language","lexer","llvm","python3","transpiler"],"latest_commit_sha":null,"homepage":"","language":"C++","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/soerlemans.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-18T18:02:40.000Z","updated_at":"2026-01-24T16:36:19.000Z","dependencies_parsed_at":"2026-01-04T06:06:31.351Z","dependency_job_id":null,"html_url":"https://github.com/soerlemans/acris","commit_stats":null,"previous_names":["soerlemans/crow","soerlemans/acris"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/soerlemans/acris","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soerlemans%2Facris","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soerlemans%2Facris/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soerlemans%2Facris/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soerlemans%2Facris/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soerlemans","download_url":"https://codeload.github.com/soerlemans/acris/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soerlemans%2Facris/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28835999,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T02:10:51.810Z","status":"ssl_error","status_checked_at":"2026-01-28T02:10:50.806Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["acris","ast","c","cmake","codegen","compiler","cpp","cpp23","interoperability","language","lexer","llvm","python3","transpiler"],"created_at":"2026-01-28T03:06:40.035Z","updated_at":"2026-01-28T03:06:40.675Z","avatar_url":"https://github.com/soerlemans.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Acris\n=====\n![License](https://img.shields.io/github/license/soerlemans/acris)\n![Tests](https://img.shields.io/github/actions/workflow/status/soerlemans/acris/.github/workflows/unit-tests.yml)\n\nHome of the Acris programming language.\nNamed after the genus Acris which is the name of cricket frogs.\n\nAcris syntax is somewhat inspired by Swift, Golang and Rust.\nBut in Hyla expressions are not statements.\nThis allows us to write code without any need for semicolons.\n\nThe main goal of the programming language is having seamless interoperability with other programming languages.\nBesides being able to select which backend you want to use for code generation:\n + LLVM (being refactored to be generated by IR).\n + C++ (Generated from the AST).\n + C (not yet implemented)\n\nIt is also possible to select for which languages you want interoperability:\n + Python (Works for C++ backend uses `pybind11`)\n + Lua (not yet implemented)\n + JavaScript (not yet implemented)\n\nHere is a simple sample program.\n```go\nmodule main\n\n// Standard library includes:\n#include_once \u003ccore/core.ac\u003e\n\nfunc main() -\u003e int {\n  defer {\n    println(\"Defer!\")\n  }\n\n  println(\"Hello World!\")\n}\n```\n\nWhich can be compiled using:\n```shell\nacris --backend cpp --interop python samples/hello.ac\n```\nWhich will create an importable Python DLL.\n\nOr here is a simple example using C interop.\n```go\nmodule main\n\n// Define a forward declaration for the libc abs function.\n[[extern(\"C\")]] {\n  declare func abs(t_x: int) -\u003e int\n}\n\nfunc main() -\u003e int {\n  let num = abs(-23)\n\n  println(\"Absolute value of -23 =\u003e {}\", num)\n\n  return 0\n}\n```\n\nCompile using:\n```shell\nacris --backend cpp samples/attribute.ac\n```\n\nThis will generate a DLL which can be directly imported from Python.\n\n## Warning\nNote that the project is not yet stable at all.\nAnd a lot of things are not working yet or feature complete.\n\nHere is a list of the following, which is implemented:\n 1. Lexer.\n 2. Top down LR parser.\n 3. Pratt parser (handles operator precedence when parsing).\n 4. Semantic validation (type inference, type checking, type promotion, symbol table generation).\n 5. IR generation (currently being worked on).\n 6. LLVM backend (partially implemented).\n 7. C++ backend (fully implemented and generates from AST).\n 8. C++ backend - Python interop.\n 9. Compiler flag configuration via CLI and TOML file (`acris.toml`).\n 10. Variables are implemented (`let` and `var` for constants and normal variables respectively).\n 11. Arithmetic is implemented.\n 12. Loops are implemented.\n 13. Calling functions (and the standard library functions `print` and `println`).\n 14. Serializing AST and deserializing AST (important for when implementing parallel compilation of multiple translation units, to prevent memory overhead).\n 15. Logging infrastructure is in place.\n 16. Visitor pattern used for, semantic analysis, serializing, printing, code generation, IR generation, etc.\n\n\n## Dependencies\nIn order to compile the project you will need to following dependencies:\n\n- C++ compiler with support for C++23.\n- [Invoke](https://www.pyinvoke.org/) (Used to invoke CMake and scripts)\n- [Cmake](https://cmake.org/)  (Main buildsysstem)\n- [CLI11](https://github.com/CLIUtils/CLI11) (CLI option parsing library)\n- [rang](https://github.com/agauniyal/rang/tree/master) (cross platform terminal coloring library)\n- [tabulate](https://github.com/p-ranav/tabulate) (Text table library)\n- [Boost](https://www.boost.org/) (Utility libraries for C++)\n- [LLVM](https://llvm.org) (LLVM is used for code generation and optimization)\n- [cereal](https://uscilab.github.io/cereal/) (Serialization library used for the AST)\n- [libassert](https://github.com/jeremy-rifkin/libassert) (Modern assertion library for compile and runtime assertion checking)\n- [pybind11](https://github.com/pybind/pybind11) (Used to generate C++ to Python bindings.)\n\n### Buildsystem\nIn order to compile the project you will need a couple of dependencies.\nFirst we use invoke to invoke different python scripts, to orchestrate building the project.\nIn order to install invoke it is best to use pipx.\nWhich is installed using:\n```shell\napt install -y pipx\n```\n\nIn order to make use of invoke you should install it through `pipx`.\n```shell\npipx install invoke\n```\n\nThe you can invoke the appropriate setup script for your OS by running:\n```shell\ninv setup\n```\n\nIf your OS is not supported it is best to checkout `tools/setup` and figure out what dependencies you require.\n\n### Build\nAfter installing the necessary dependencies you can build the compiler by running:\n```\ninv build --parallel\n```\n\n## Project documentation\n\n - `assets/`: Non code related assets like images.\n - `cmake/`: Cmake sources that are needed to build the project.\n - `src/`: Sources of the Acris project.\n - `tests/`: Unit tests of the Acris project.\n - `samples/`: Acris source samples to learn and play around with.\n - `tools/`: Collection of tools and scripts, that aid development.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoerlemans%2Facris","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoerlemans%2Facris","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoerlemans%2Facris/lists"}