Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Creating new programming languages is becoming easier ... and harder

DZone's Guide to

Creating new programming languages is becoming easier ... and harder

· Java Zone ·
Free Resource

Microservices. Streaming data. Event Sourcing and CQRS. Concurrency, routing, self-healing, persistence, clustering...learn how Akka enables Java developers to do all this out of the box! Brought to you in partnership with Lightbend.

In December 2010, Brendan Eich talked about Mozilla’s new programming language called Rust (that focuses on safety and concurrency, to replace C++ as Mozilla’s implementation language). He mentions that creating new languages is still important, because they can recycle old research, but repackage it so that it becomes more mainstream-compatible. One example is Clojure that continues the Lisp tradition, but on the Java Virtual Machine (JVM). There are two new aspects to modern language design:

  1. Implementing new programming languages has become simpler, thanks to platforms such as LLVM and the JVM.
  2. But it has also become harder, because modern IDEs such as Eclipse have made it clear that you cannot separate a language from its tools. My favorite example, expressed in pseudo-arithmetic:
    Python > Java
    Java + Eclipse > Python + (any Python IDE)
    In other words: Eclipse fixes some of Java’s deficiencies. Note that this is an old lesson that has been taught by languages that come with sophisticated development environments (e.g. Smalltalk or Genera), but those lessons are just now becoming mainstream again.

 

From http://www.2ality.com/2011/04/creating-new-programming-languages-is.html

Microservices. Streaming data. Event Sourcing and CQRS. Concurrency, routing, self-healing, persistence, clustering...learn how Akka enables Java developers to do all this out of the box! Brought to you in partnership with Lightbend. 

Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}