{"id":13599898,"url":"https://github.com/jfecher/ante","last_synced_at":"2025-05-14T08:08:01.380Z","repository":{"id":36249850,"uuid":"40554247","full_name":"jfecher/ante","owner":"jfecher","description":"A safe, easy systems language","archived":false,"fork":false,"pushed_at":"2025-05-07T15:17:12.000Z","size":40090,"stargazers_count":1993,"open_issues_count":39,"forks_count":90,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-05-07T16:31:04.928Z","etag":null,"topics":["ante","compiler","language","llvm","refinement-types","systems-language"],"latest_commit_sha":null,"homepage":"http://antelang.org","language":"Rust","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/jfecher.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,"zenodo":null}},"created_at":"2015-08-11T16:59:53.000Z","updated_at":"2025-05-07T15:17:15.000Z","dependencies_parsed_at":"2023-02-16T00:45:36.590Z","dependency_job_id":"aec100db-e4cf-479a-b0aa-fff43babfb08","html_url":"https://github.com/jfecher/ante","commit_stats":{"total_commits":344,"total_committers":17,"mean_commits":"20.235294117647058","dds":"0.13953488372093026","last_synced_commit":"b2aae73c69b4cd536876089fdd67db32f33be3f9"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfecher%2Fante","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfecher%2Fante/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfecher%2Fante/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfecher%2Fante/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfecher","download_url":"https://codeload.github.com/jfecher/ante/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254101557,"owners_count":22014908,"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":["ante","compiler","language","llvm","refinement-types","systems-language"],"created_at":"2024-08-01T17:01:16.687Z","updated_at":"2025-05-14T08:07:56.370Z","avatar_url":"https://github.com/jfecher.png","language":"Rust","readme":"# Ante\n\n[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fjfecher%2Fante%2Fbadge\u0026style=flat)](https://actions-badge.atrox.dev/jfecher/ante/goto)\n\n---\n\nAnte is a low-level functional language for exploring refinement types, lifetime inference, and\nother fun features. Here's a quick taste:\n\n```scala\n// No lifetime variables\nfoo (x: !shared Bar) (y: \u0026a) : a can Fail given Clone a =\n    // Algebraic effects\n    if not valid x then fail ()\n\n    // Safe, aliasable mutable references\n    baz x x\n\n    // Traits\n    clone y\n```\n\nIn general, ante is low-level (no GC, values aren't boxed by default) while also trying to\nbe as readable as possible by encouraging high-level approaches that can be optimized with\nlow-level details later on.\n\nSee the [website](https://antelang.org), [language tour](https://antelang.org/docs/language/),\nand [roadmap](https://antelang.org/docs/roadmap) for more information.\n\n---\n\n### Contributing\n\nThe compiler is still in a rather early state so any contributors are greatly welcome.\nFeel free to contribute to either any known issues/improvements or any standard library\nadditions you think may be useful.\n\nEach file in the codebase is prefixed with a module comment explaining the purpose of\nthe file and any algorithms used. `src/main.rs` is a good place to start reading.\n\nMake sure any PRs pass the tests in the `examples` directory. These tests have commands\nin them which the [goldentests](https://github.com/jfecher/golden-tests) library uses\nto run the ante compiler and check its output for each file against the expected output\ncontained within comments of that file.\n\n[**Good first issues**](https://github.com/jfecher/ante/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)\nto contribute to\n\n---\n\n### Community\n\nThe best place to follow ante's development is in the official discord: https://discord.gg/BN97fKnEH2.\nThere is also the mostly inactive subreddit at [/r/ante](https://reddit.com/r/ante) which is mainly used for questions about the language rather\nthan development updates. You can also feel free to file issues or ask questions on this repository.\n\n---\n\n### Building\n\nAnte currently optionally requires llvm 18.0 while building. If you already have this installed with\nsources, you may be fine building with `cargo install --path .` alone. If cargo complains\nabout not finding any suitable llvm version, you can either choose to build ante without\nthe llvm backend via `cargo install --path . --no-default-features` or you can build llvm from\nsource via [CMake](#CMake) as covered in the next sections.\n\n#### Linux and Mac\n\nThe easiest method to install llvm 18.0 would be through your package manager, making sure to install any `-dev` packages\nif they are available for your distro. Once installed, if `cargo b` still cannot find the right version of llvm, you may\nneed to make sure to set the `LLVM_SYS_180_PREFIX` to the path llvm was installed to:\n\n```bash\n$ LLVM_SYS_180_PREFIX=$(llvm-config --obj-root)\n```\n\nIf your distro ships a version other than llvm 18.0 you can try changing the inkwell dependency Ante's Cargo.toml.\nThis dependency controls the llvm version expected and by default it is:\n\n```toml\ninkwell = { git = \"https://github.com/TheDan64/inkwell\", branch = \"master\", features = [\"llvm18-0\"], optional = true }\n```\n\nChange the quoted llvm portion to `\"llvm-16-0\"` for example to build with llvm 16.0. Also don't forget that after changing\nthis version the environment variable's name will be different, using llvm 16.0 for example it would be `LLVM_SYS_160_PREFIX`.\nIt is likely that versions older than this will not work since there have been API changes in LLVM itself and inkwell. 15.0 itself\nis also unverified.\n\nIf this method does not work you will have to try building llvm from source via cmake. See the [CMake](#CMake) section below.\nAlternatively, you can build with only cranelift as a backend via `cargo install --path . --no-default-features`.\n\n##### Nix\n\nAnte is available in the unstable branch of the [nixpkgs repository](https://search.nixos.org/packages?channel=unstable\u0026show=ante\u0026type=packages\u0026query=ante).\n\nThe project itself provides build instructions for the [Nix package manager](https://nixos.org/).\nThose can be used for the most recent version of the compiler, or for working on it.\n\nTo enter the development environment, run either `nix-shell` or `nix develop` depending on whether you are using nix\nwith [flakes](https://wiki.nixos.org/wiki/Flakes) and [nix command](https://wiki.nixos.org/wiki/Nix_command) enabled or not.\nThen you can build and run the project with `cargo` as described at the top of this section.\n\nBeyond that, the project will also build with `nix-build` / `nix build`, meaning you can install it on your system using\nthe provided overlay or play around with the compiler via `nix shell github:jfecher/ante`.\n\n#### Windows\n\nNote: LLVM is notoriously difficult to build on windows. If you're a windows user who has tried\nthe following and still cannot build llvm, I highly recommend trying out ante without the llvm\nbackend via `cargo install --path . --no-default-features`. Since the llvm binaries do not ship\nwith the appropriate library files on windows, you will have to build from source via [CMake](#CMake)\n\n##### CMake\n\nIf the above steps don't work for you, you can try [building llvm from source\nwith cmake](https://www.llvm.org/docs/CMake.html). If you're on windows, this\nrequires you to have Visual Studio 2017 or later installed already.\n\n```\n$ git clone https://github.com/llvm/llvm-project --branch=release/16.x\n$ mkdir llvm-build\n$ cd llvm-build\n$ cmake ../llvm-project/llvm\n```\n\nAt this point, cmake may show an error that it failed to find z3 or the windows SDK, in\nwhich case you may need to install them. For the windows SDK, you can install it\nvia the Visual Studio Installer (under **Modify -\u003e Individual Components**). I used\nversion 10.0.17763.0, though it is likely newer versions will work as well. Rerun\nthe last cmake command to test that everything is installed right. Once this is\ndone, move on to compiling llvm and ante:\n\n```\n$ cmake --build .\n$ cmake --build . --target install\n$ cd ..\n$ set LLVM_SYS_160_PREFIX=/absolute/path/to/llvm-build\n$ cargo build\n```\n","funding_links":[],"categories":["Rust","Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfecher%2Fante","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfecher%2Fante","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfecher%2Fante/lists"}