3 unstable releases

new 0.5.0 Jan 17, 2025
0.4.0 Jan 9, 2025
0.4.0-beta Jan 7, 2025

#91 in Programming languages

Download history 83/week @ 2025-01-01 161/week @ 2025-01-08

244 downloads per month

MIT license

210KB
5K SLoC

Contributors Forks Stargazers Issues MIT License


Logo

Atlas77

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
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Goal of the language
  6. Contributing
  7. License
  8. Contact

About The Project

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)

(back to top)

Getting Started

Prerequisites

  • Rust Compiler
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

Or directly from their website: Rust

Installation

  1. Install it from Cargo
    cargo install atlas_77
    
  2. Use it as a CLI
    atlas_77 --help
    
  3. Enjoy!

(back to top)

Usage

Fibonacci Example

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_int(fib(n));
}

For more examples, please refer to the examples folder

(back to top)

Roadmap

v0.3 "Foundation"

Deprecated, if you wanna know more about the v0.3.x, check the releases page.

v0.4 "Keystone"

Deprecated, if you wanna know more about the v0.4, check the releases page.

v0.5 Phoenix Release Timeline

The v0.5 is a complete rewrite of Atlas77, it aligns better with the end goal of the language (see Goal of the language).

NB: 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

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.1 Pattern matching 💭
Structs v0.5.1 User-defined types with named fields 💭
Unions v0.5.1 Low-level data structures allowing overlapping memory layouts 💤
Enums v0.5.1 Enumerations with optional associated data for flexible value sets 💤
Lambdas & Closures v0.5.2 Inline, anonymous functions with captured variables 💭
Classes v0.5.2 Object-oriented programming support 💭
Traits v0.5.2 Interfaces for defining shared behavior 💤
Pointers v0.5.2 Basic pointer manipulation for low-level programming 💭
Memory Management v0.5.2 Simple memory management 💭
Imports v0.5.2 Importing code from other files 💤
Generics v0.5.x Type parameters for writing reusable code 💤
Standard Library v0.5.x A comprehensive standard library 💤
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 💤

Legend

  • 💤: Not implemented
  • 💭: Being thought of
  • 🔧: Being implemented
  • ✅: Working

Stability and Refinement

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.2 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).

(back to top)

Goal of the language

  • Boostrapping 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

(back to top)

Contributing

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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Top contributors:

Made with contrib.rocks.

(back to top)

License

Distributed under the MIT License. See LICENSE.txt for more information.

(back to top)

Contact

Your Name - @Gipson62_8015 - J.H.Gipson62@gmail.com

Project Link: https://github.com/atlas77-lang/Atlas77

(back to top)

Dependencies

~7–13MB
~165K SLoC