A Fresh Way to Develop Your Programs

Designed from the ground up with interoperability in mind, with an easy to use plug-and-play interface.

Anima is to C++ what Lua is to C: A platform designed for embedding in other applications.

Don't have that stop you from using it by itself, though. It is just as remarkable as a standalone one.

But Why Anima?

Anima is designed to...

Easily Work With Modern C++

Easily call C++ from inside the ART, and vice-versa.

Shared libraries are even easier than before.

// In breve:

// Declare [C++ -> ART] mapping call:
@Expose(name = "myARTFunction")
artCall :: () -> void { /* ... */ }

// Declare [ART -> C++] mapping call (RunTime-specific):
@Native(name = "myNativeFunction")
nativeCall :: () -> int64

// Declare [ART -> C++] mapping call (ART-compatible shared library):
@Shared(name = "myLibraryFunction", lib = mylib)
libCall :: () -> string

// In c++:

// Invoke exposed function:
// [env] here represents your ART engine
env.expose<void()>("myARTFunction").invoke();
// Register a native function:
// Inside your ART implementation class
context.art.addNativeCall("myNativeFunction", /* Your function here */);

Be Memory-Safe and Performant

Values are handled via Reference Counting, removing the need for background garbage collection.

Write more deterministic code with ease.

Meet Breve: the Flagship Language of Anima

using import core

@Main
main :: () -> void {
    IO.writeLine("Hello, World!")
}

// Or, in one line:

@Main _ :: () => (import core).IO.writeLine("Hello, World!")

But Why Breve?

Breve is...

Multi-Paradigm

These are just some of the programming styles supported in breve:

  • Imperative Programming
  • Object-Oriented Programming
  • Trait-Oriented Programming
  • Functional Programming

Your style and your ways, without the need for pesky metatables or wacky globals.

Clean and Concise

Statically-typed by design, ensuring your code will run (and be ran) as intended.
Only check types because you actually need to, not because you have to.

Designed to be fast to write, with the least amount of friction in the way of you and your development.
Write less boilerplate, and skip to the good parts.

Need to go to a Lower Level? Minima is There for You

@shared["av2console":"av2/console/writeLine_string"]
    void(str) print
push "Hello, "
push "World!"
add
call print