Ananke

Ananke is the primordial Greek godess of inevitability. Out of Chaos, she is the mother of time, Chronos, and controls the wills of the three fates, and so destiny itself. Ananke is depicted a spinster: this was a call forward from the ancient Greeks that reality is asynchronous, and we must form our languages to allow easy threading.

Motivation

As such, I created Ananke to bring purpose to my code. I wanted a language that, like C, trusted the programmer. I wanted a language that wouldn't get in my way, a language I could be clever in. Most of all, I wanted syntax sugar for things which are painful and tedious to do in C. This includes all string handling and async. I also wanted to fix C's stupid type system and its syntax. I wanted to fix C's vast UB territory, and while at it introduce proper bitwise programming to make bitbanging unbothersome, and enable exact data layouts, including keywords for endianness, to allow casting packet or file buffers to structs, without fear of UB. I wanted to intoduce methods without OOP, hence uniform call syntax. Custom operators too, and array based programming, and namespaces (modules). Ananke is an expression-only language as well, meaning it is more powerful than C could ever hope to be, and just wait until you sense the unimaginable power of my partial expressions. Lastly, I wanted to do away with the archaic header/source divide, and just move to packages, which contain one or more modules, which contain code.

I took inspiration from C's philosophy, from C++'s operator overloading and metaprogramming, D's uniform call syntax, PHP's string handling, APL's array based programming, Python and Lua's clean syntax, Go's concurrency model, Elixir's datetime library, ADA's ranged types, various scripting language's garbage collection & eval, and any respectable ML's algebraic type system.

In one sentence: combine the good parts, the power, of Object Oriented, Functional, Procedural, Asynchronous, and Array Based programming, allow one to dip to lower levels than C allows, allow one to ascend to higher levels than C++ allows, and all the while keeping a neat, clean, expressive syntax.

In these goals, I believe I have succeeded.

Currently, only a partial tokenizer and some drafts exist. Rest assured that I am working on this language every day, slowly ironing out the drafts into specifications. I want to take my time to get this right. That said, you can Browse the git repository.

Domains I had in mind when designing Ananke:

Pros of working with Ananke:

Cons of working with Ananke: