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

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Basic instruction generation in CraneLift backend Dec 6, 2019
tests Basic instruction generation in CraneLift backend Dec 6, 2019
.gitignore
Cargo.lock Basic instruction generation in CraneLift backend Dec 6, 2019
Cargo.toml Basic instruction generation in CraneLift backend Dec 6, 2019
LICENSE.txt License: MPL 2.0 Mar 27, 2019
README.md Get type of parameters in IR Dec 2, 2019

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