![Logo](/atlas77-lang/atlas77/raw/main/images/logo.png)
Functional Programming language with a strong interop with Rust,
designed to be a functional scripting language.
Explore the docs »
Playground (inexistant)
·
Report Bug
·
Request Feature
Table of Contents
Atlas77 is an experimental statically typed programming language with a strong interop with Rust. It will run on a custom VM. I'll implement a JIT compiler using cranelift later on. (There will be an AOT compiler too)
- Rust Compiler
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Or directly from their website: Rust
- Install it from Cargo
cargo install atlas_77
Note
I recommend you to build it yourself, as the version on Cargo is not always up to date. There are also some bugs in the current version on Cargo.
- Use it as a CLI
atlas_77 --help
- Enjoy!
import "std/io"
func fib(n: i64) -> i64 {
if n <= 1 {
return n;
}
return fib(n - 1) + fib(n - 2);
}
func main() -> i64 {
let n: i64 = 10;
print(fib(n));
}
For more examples, please refer to the examples folder
Deprecated, if you want to know more about the v0.3.x, check the releases page.
Deprecated, if you want to know more about the v0.4, check the releases page.
The v0.5 is a complete rewrite of Atlas77, it aligns better with the end goal of the language (see Goal of the language).
Note
Up until the v1.0 the language will always be in alpha, tho I'll try to make every release as stable as possible. I hope I can release the v0.5 this month (January 2025).
Feature | Expected Version | Description | Status |
---|---|---|---|
Functions | v0.5 | Define and call functions | ✅ |
Variables | v0.5 | Immutable (const ) and mutable (let ) variables |
✅ |
Basic std Library |
v0.5 | Core utilities for time , file , io , math , string , list |
✅ |
Import | v0.5 | Limited to standard library imports for now | ✅ |
Control Flow | v0.5 | if/else statements for conditional logic, while loops for iteration |
✅ |
Match Expressions | v0.5.x | Pattern matching | 💭 |
Structs | v0.5.x | User-defined types with named fields | 🔧 |
Unions | v0.5.x | Low-level data structures allowing overlapping memory layouts | 💤 |
Enums | v0.5.x | Enumerations with optional associated data for flexible value sets | 🔧 |
Garbage Collection | v0.5.x | Automatic memory management using Reference Counting | ✅ |
Lambdas & Closures | v0.5.x | Inline, anonymous functions with captured variables | 🔧 |
Classes | v0.5.x | Object-oriented programming support | 🔧 |
Traits | v0.5.x | Interfaces for defining shared behavior | 🔧 |
Pointers | v0.5.x | Basic pointer manipulation for low-level programming | 🔧 |
Imports | v0.5.x | Importing code from other files | 🔧 |
Generics | v0.5.x | Type parameters for writing reusable code | 🔧 |
Standard Library | v0.5.x | A comprehensive standard library | 💭 |
UFCS | unknown | Universal Function Call Syntax (i.e. foo.bar() becomes bar(foo) ) |
💭 |
Package Manager | unknown | A package manager for sharing code | 💤 |
Language Server Protocol | unknown | Editor support for code completion, diagnostics, and more | 💤 |
Cranelift JIT | unknown | Just-in-time compilation for faster execution | 💤 |
- 💤: Not implemented
- 💭: Being thought of
- 🔧: Being implemented
- ✅: Working
As the language is still in alpha (not 1.0 yet), I won't make "alpha"/"beta" build, it doesn't really make sense.
The beta phase (aka after 0.5.x and beyond) will focus on stabilizing the language. All features will be finalized, tested extensively, and optimized for real-world use. This phase will serve as a release candidate.
See the open issues for a full list of proposed features (and known issues).
- Bootstrapping the compiler
- Making a simple ECS
- Making a simple Game Engine with Vulkan bindings (maybe OpenGL too)
At least it should be possible to make one with Atlas77
- Using BlueEngine from the language (even if it's not really most efficient)
- Ahead of time compilation using cranelift
- Making the package manager directly in Atlas77
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Made with contrib.rocks.
Distributed under the MIT License. See LICENSE.txt
for more information.
Your Name - @Gipson62_8015 - [email protected]
Project Link: https://github.com/atlas77-lang/Atlas77