Use the right language for the right job

Avail: Articulate programming on the JVM

Jane Elizabeth
© Shutterstock / Undrey

Looking for a language suitable for solving complex software programming problems? Avail boasts a statically typed programming language meant to elucidate difficult problems in clear expressions.

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

SEE MORE: Using Language Servers to edit code in the Eclipse IDE

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!

SEE MORE: “Stop designing languages. Write libraries instead.”

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.

Jane Elizabeth
Jane Elizabeth is an assistant editor for

Inline Feedbacks
View all comments
Shazeeb Karwa
Shazeeb Karwa
4 years ago

For all like minded Java programmers who enjoy reading these articles by Jaxenter and are activley looking to find a Java position or relocate to the Netherlands.

Please visit the CodeGuild website for more information

Mark van Gulik
Mark van Gulik
4 years ago

This was a very nice article, and nicely captures the spirit of what we (the Avail Foundation) are shooting for with the Avail language.

Gabriela Motroc
Gabriela Motroc
Reply to  Mark van Gulik
4 years ago

We’re very happy to hear that! Let’s keep in touch, we’d like to continue our coverage of Avail in the future.