With hundreds of programming languages already in existence, why invest the considerable effort in creating a new one? For developers of three newfangled open source languages -- Coconut, Crystal, and Oden -- the answer is simply that, in programming, there are always new niches to fill and new needs to be met.

Scratching the proverbial itch and unwilling to settle for existing tools that they found somewhat lacking, these developers set out to build their own languages, driven by specific goals. For Coconut, which compiles to Python, it’s all about bringing functional programming to the Python language. Crystal is devoted to combining multiple programming capabilities. And the driving force behind the development of Oden is filling in some capabilities absent from Google’s popular Go language.

We spoke with the developers and teams behind each of these languages to get a better sense of the origins and practicality of their emerging languages -- as well as what inspires developers to tackle the task of building a new programming language.

Coconut: Expanding Python’s reach

“I love functional programming. I think the functional paradigm provides a much more natural way to think about problems and yields much more elegant, concise, and readable code as a result,” Coconut developer Evan Hubinger says. “And yet, if you look at the top 20 most popular programming languages, not a single one is functional. But there are functional alternatives to a lot of them. Java has Scala. C# has F#. Python has ... nothing.”

(Note: Java added functional capabilities in 2014 but was not originally developed as a functional language.)

Python, says Hubinger, was his first language. While Python is elegant for imperative programming, trying to use it for functional programming is difficult and obtuse, he says. Coconut is actually his second attempt at functional programming for Python. Hubinger scrapped his previous effort in this vein, a language called Rabbit, after he became dissatisfied with it. Hubinger is a college student who has been interning as a software developer at Yelp.

Crystal: Bringing existing languages’ features into focus

Crystal’s main developer Ary Borenszweig not only acknowledges the wealth of programming languages already in existence, he builds on their best features.

“Yes, there are many languages. However, Crystal mixes some features present in other languages in a way that no other language does,” Borenszweig says.

The language has static type-checking without specifying the types of method arguments or local variables. This enables faster prototyping, less verbose code, and more generic code, Borenszweig stresses.

Crystal also features automatic memory management and native compilation sans a virtual machine.

“It has macros to avoid boilerplate code. And it has a very easy way to use existing C libraries,” says Borenszweig, who works at Manas, which builds technical and scientific software.

Oden: Piggybacking on Go’s success

Oden, meanwhile, was developed by a Go fan who had issues with the up-and-coming programming language.

“I have always liked the tooling and deployment story in Go. The learning curve is gentle and the tools work really well. Go the language, however, has some characteristics, which I think are problematic,” Oden developer Oskar Wickström says.

He cites a lack of generics and a difficulty in abstracting control flow, error-handling, and nil-checking.

“The idea with Oden is to lift these restrictions and provide a more flexible type system, while also putting an emphasis on functional programming,” says Wickström, who has been a programmer since 2011 (and dabbles in music). He works at startup Empear, which develops project analysis tools.

“Another main objective is to provide easy interoperability with Go, letting early adopters use their standard Go libraries without having to write bindings,” Wickström says.

Emerging uses for emerging languages

It’s one matter to create a language; it’s another to ensure it’s of use to others who may be bumping up against similar problems. Each of the developers of these three emerging languages see use cases already evolving.

Oden, Wickström says, is good at tasks within Go’s wheelhouse: web servers, back-end services, and command-line tools, to name a few. It is also good for building libraries that provide generic user-defined data structures, generic algorithms, and control-flow abstractions, he says.

Crystal, meanwhile, is suited for web services, because it has nonblocking I/O and lightweight processes, Borenszweig says. Existing applications have included command-line applications, emulators, websites, and IRC bots.

“It can also be used in competition programs, where you need to prototype fast but achieve good performance,” Borenszweig says. “Finally, it can be used to build compilers, such as Crystal.”

Coconut is suitable for the same applications as Python, Hubinger says. This is a “very loose criterion, given Python’s popularity these days,” he says. “Since Coconut compiles to Python, there's nothing Python can do that Coconut can't.”

While Crystal and Oden remain in early stages of development, Coconut reached its 1.0 release milestone in June, followed by a 1.1 release in July.

Crystal was originally written in Ruby, although the compiler has been rewritten in Crystal itself. Coconut’s compiler was written in Python. Oden’s first compiler was written in Racket while its type inferencer was developed using MiniKanren, a relational programming language embedded in Scheme. The compiler was then rewritten using Haskell.

Related articles