Use the right language for the right job

Sometimes, reading old code is like deciphering the Rosetta Stone. With a focus on articulate programming, Avail makes it easier for developers to take advantage of natural language to clearly express their logic. Avail is a multi-paradigmatic general purpose programming language. Its features emphasize an increased support for articulate programming.

As the Avail team puts it, articulate programming attempts to streamline development by fixing the mismatch between the problem and the solutions. Instead of adapting an existing programming language to fix a problem, Avail can be developed in order to avoid it entirely.

“Programmers must continually solve adaptation problems in order to translate high-level concepts from the rich vocabulary of a natural language,” said the Avail team.

“Many everyday problems are hard enough to describe and solve using humanity’s best tools for communication: natural language and visual metaphor. Any programmer who has ever worked on a nontrivial problem does not need to imagine the difficulty of encoding a good solution using only low-level concepts and a handful of special keywords.”

In essence, Avail wants to make it possible for developers to use the right language and the right conceptual framework for the job. How? By giving the developer the ability to talk about their objects of interests using the best language for the domain of the problem. Avail takes advantage of the JVM for its runtime by utilizing dynamic and unrestricted grammar for a semantically unambiguous interpretation.

Other features include:

A static type system capable of leveraging every feature of the type lattice.

An infinite algebraic type lattice that confers a distinct type upon every distinct value.

An infinite algebraic type lattice that confers a distinct type upon every distinct value.

Fully asynchronous I/O: no Avail thread is ever blocked waiting for an I/O event.

A module system that supports hierarchical encapsulation and method renaming.

An optimizing dynamic translator that supports type inference, function inlining, and de-optimization.

Bidirectional foreign function interface to Java.

And more!

Interested in trying out Avail? It can downloaded here or from GitHub. Check out the full documentation for more information. While the website hasn’t been updated in a while, things appear to have moved on over to the GitHub page with a number of recent commits and updates.