There is a lot of buzz at the moment in the front-end web technology world with frameworks such as AngularJS breaking into the mainstream of software departments around the world. However, bubbling under the surface there are some interesting developments going on in back-end technology, including new programming languages gaining some popularity and maturing. I thought I’d take a look at three languages you may have never heard of that are each targeted at different goals:
Elixir is built on top of the Erlang language, developed by Ericsson some time ago which is already used by many large organisations. Erlang’s main focus was to make concurrency and fault-tolerance part of the core language allowing for highly scalable software systems, originally intended for the telecoms industry. Elixir builds on Erlang to make it more of a productive general purpose language for distributed applications. You can take a whistle-stop tour of Elixir by watching this great presentation on YouTube from José Valim (the creator of the Elixir language).
Ioke is one of the many new languages to use the JVM as a platform. It uses prototype based object-orientation with no concept of specific classes as every data type is an instance. It is inspired by a number of languages including Smalltalk. It is more focused on expressiveness of objects, data structures and algorithms rather than concurrency per-se. This makes it a good contender for a language that is better at modelling a problem domain in object oriented code.
Mercury draws its inspiration from Prolog, which is probably my favorite programming language due to its simplicity and focus on logic. It is a strongly typed, highly declarative language including many of the currently popular functional programming concepts. It also allows for compiling to a number of ‘back-end’ platforms to run on including C and Java. This language has existed for some time, but now it is in a state of reasonable maturity it could well become a powerful language for writing specific types of software.
To sum up…
One of the key themes in each of these very different languages seems to be the concept of meta-programming. Each language is built on top of itself and code itself can very easily be manipulated to extend or alter functionality, enabled by the fact that everything can be broken down into the core constructs of the language. Put simply there is no bloat to these languages, the authors have thought long and hard about the syntactical concepts they want to include in order to avoid having too many different ways to implement common software patterns.
As a Java developer I am looking more to the changes in Java 8 for the impact on the work I do not too far down the road. But the landscape of the entire web stack is also very much in flux at the moment. It has been interesting to look at what other developments are out there that might be completely orthogonal to what I do day-to-day, but ultimately I’m sure will have an impact eventually.