Skip to content
GPU Accelerated, Distributed, Actor Model Language (WIP)
Rust Yacc
Branch: master
Clone or download

Latest commit

phase Start adding Assignment and Field getters in AST & IR
Still a lot of work to do!

Signed-off-by: Jadon Fowler <j@jadon.io>
Latest commit 2283b1e Apr 22, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Start adding Assignment and Field getters in AST & IR Apr 22, 2020
tests PassManager and Diagnostics in the IR Apr 13, 2020
.gitattributes Replace Parser with LALRPOP and generate errors with codespan Apr 9, 2020
.gitignore Initial Commit Feb 13, 2019
Cargo.lock Start on LLVM Backend Apr 11, 2020
Cargo.toml Start on LLVM Backend Apr 11, 2020
LICENSE.txt License: MPL 2.0 Mar 27, 2019
README.md Replace Parser with LALRPOP and generate errors with codespan Apr 9, 2020
build.rs Replace Parser with LALRPOP and generate errors with codespan Apr 9, 2020

README.md

alox

GPU Accelerated, Distributed, Actor Model Language

Goals:

  • Have code running on the GPU and CPU
  • Have code running across many machines
  • Use the actor model for concurrency

This is very much a Work In Progress, nothing works yet.

Roadmap:

  • Frontend
    • Lexer
    • Parser WIP
    • Start parsing imported modules immediately
  • Middle
    • AST Structure
    • Thread-safe IR Structure
    • Concurrent IR Symbol Resolution
    • AST Expression -> IR Instruction conversion
    • Passes to validate things
  • Error messages
    • Parser error messages
    • Validation messages
  • Backend
  • Runtime
    • Schedulers
    • Cross-node communication
    • GC for actors?
  • Really dig into semantics

Language Ideas

  • Compile time code execution
  • Strong type system
    • Algebraic Data Types
    • Unique & Borrowed Types
  • Automatic Versioning
    • Enforce public APIs
  • Clean syntax
  • Concurrent compiler pipeline
actor A {
    behave ping(n: Int32, b: &B) {
        b.pong(n, &this)
    }
}

actor B {
    behave pong(n: Int32, a: &A) {
        let x = n & 0xF0 >> 4
        let y = n & 0x0F
        let arr = [x, y]
        let newArr = process(arr)
        let z = (newArr[0] << 4) | newArr[1]
        a.ping(z, &this)
    }

    fun process(arr: &mut [Int32]) {
        for (x in arr) {
            x *= 17 + (2 * x)
        }
    }
}

actor Main {
    behave main() {
        let n = 2
        let a = new A()
        let b = new B()
        a.ping(n, &b)
    }
}
You can’t perform that action at this time.