There’s been a recent thread in scala-user e-mail list that touched an interesting topic: How and Why is Scala Used in Aerospace Industry?

A few highlights from the thread:

* Scala and Akka are currently used for spacecraft telemetry data display, storage and analysis for European Space Agency. The software is used for all missions at GSOC (the Columbus Module of the ISS, the SAR earth observation satellites TerraSAR-X/TanDEM-X, and some other missions) and for LEOPs at Eutelsat.

* DLR GSOC ( http://www.dlr.de/rb/en/ ) will be using Scala and Spire for space mission planning. The next generation of the GSOC scheduling engine PLATO (http://www.dlr.de/rb/en/desktopdefault.aspx/tabid-6816/4256_read-6303/) is currently being written in Scala.

* Scala is also used for telemetry analysis at JPL (NASA’s Jet Propulsion Laboratory), and more generally for development of modeling DSLs. We are part of a research lab (Laboratory for Reliable Software), which works in close interaction with missions.

* Rüdiger Klaehn’s words: “I am absolutely convinced that functional programming (meaning not just a language that has closures, but programming using almost exclusively with pure functions) is the correct path to reliable software. The most ubiquitous and accepted platform in space operations at DLR and in general in european space operations is the JVM. Even the next generation European Mission Control system (MCS) is going to be written for the JVM: http://www.egscc.esa.int/system.html. So you need a functional language that runs on the JVM and can seamlessly consume JVM libraries. This leaves Scala and Clojure as serious contenders. Since I favour strongly typed languages, the choice was clear.”

Some reasons given by programmers that chose Scala for aerospace industry software:* The coherent combination of object oriented and functional programming (higher order functions, functions as values, pattern matching).

* Support for collections (sets, lists, maps), and iterators over these – although we have them now in most modern languages.

* Specific constructs for DSL development (nice to haves):

** implicit functions

** partial functions defined by the case-construct​ ** call by name: arguments of the form def f(someCode : => Unit) {…}

** allowing dots and parentheses to be omitted in method calls.

There are other gems buried inside that thread , don’t forget to check it out if you are curious about why people choose Scala for industrial-strength software development in the domain of aerospace engineering.