Ten years ago today, Michel Schinz announced the first implementation of the Scala programming language. When announced, it was describe as "a language that smoothly integrates object-oriented and functional programming" and which "is designed to express common programming patterns in a concise, elegant and type-safe way."

The original announcement reads:

We'd like to announce availability of the first implementation of the Scala programming language. Scala smoothly integrates object-oriented and functional programming. It is designed to express common programming patterns in a concise, elegant, and type-safe way. Scala introduces several innovative language constructs. For instance: Abstract types and mixin composition unify ideas from object and module systems.

Pattern matching over class hierarchies unifies functional and object-oriented data access. It greatly simplifies the processing of XML trees.

A flexible syntax and type system enables the construction of advanced libraries and new domain specific languages. At the same time, Scala is compatible with Java. Java libraries and frameworks can be used without glue code or additional declarations. The current implementation of Scala runs on Java VM. It requires JDK 1.4 and can run on Windows, MacOS, Linux, Solaris, and most other operating systems. A .net version of Scala is currently under development.

Although the .net version is no longer being maintained, the goal was to provide a common language that would run on both VMs and allow portability between operating systems. However, advances in the JVM's JiT and an increasing dependence on the Java bytecode meant that the .net version was discontinued when Scala 2.10 was released.

Scala has brought functional programming to mainstream JVM languages, and directly stimulated Java 8's upcoming inclusion of lambdas (often incorrectly called closures) and default methods for interfaces. Both of these have been available in Scala since the early days via functions and traits, and their acceptance provided new ways of programming in more concise and testable ways.

With Scala's success came its complexity, as the language features can be used for both great and poor readability. By allowing any Unicode identifiers to be used as method names and functions (including symbolics) the standard Scala library has grown to include emoticons functions such as =:= , :+ and :\ amongst others. Scala's trade-off is to improve writeability at the potential cost of its readability.

Finally, Scala still sees itself as a research language, trying out new features and deprecating older functionality (such as the original Actors package, which brought it fame similar to Go's coroutines). The generated bytecode varies from release to release, which means there is limited open-source projects compiled for anything but the current release of Scala, and although 2.10 has been available for over a year, the transition between major Scala releases is often a painful one.

With this year's release of Java 8 bringing a subset of Scala features to the JVM it will be interesting to see what Scala adds next. Binary compatibility would bring stability to the language but seems as far off now as it did almost a decade ago, but time will tell.

Where do you think Scala will go in the next ten years?