Six Years of Scala Development

Part II: Retrospective

Published on 2017-05-16.

For the last six years I had been deeply committed to improving every aspect of Scala. Looking back it has been quite a journey:

I proposed and implemented the deprecation of procedure syntax and abstract methods without return type, made Either right-biased, deprecated Scala’s JSON parser, removed octal numbers, substantially overhauled @deprecated and introduced @deprecatedInheritance and @deprecatedOverriding, deprecated view bounds, turned automatic () insertion in argument lists into a deprecation.

I got quite close to eliminating scala.util1 altogether, raised the issue that got removed, removed scala.testing, deprecated scala.text, cleaned up a lot of code in the compiler backend, implemented better compiler support for enums and annotations, and added support for parameter names in class files (JEP-118).

In the period of time I was active (until end-2016), I have been the first- or second-most active external2 contributor to the main Scala repository (either ahead or behind of Andrew, depending on what is measured).

In numbers, my work amounted to more than 90 resolved issues, 140 merged pull requests which added 17k lines of code, removed 35kloc, with a negative total of more than -17kloc against the main Scala repository (scala/scala).3

Considering both paid and unpaid contributors in that period, this makes me 10th in lines added, 6th in lines deleted and 8th in committed changes as well as 4th in issues reported since Scala’s migration to Trac.

Outside of scala/scala, I proposed, implemented and presented a website overhaul that merged the separate sites of, and the language specification into one coherent site with a responsive design that worked on all kinds of devices and ran on a consistent, reproducible and updated technology stack.

I copy-edited, proof-read and updated substantial amounts of existing documentation (the frontpage, the tour, various guides and tutorials, the glossary etc.) and added new content where it was necessary (available platforms, IDE and editor support, tooling, FAQ etc.).

I bootstrapped the site in an effort to support the contributors behind Scala on Android and provide developers who wanted to use Scala on smartphones with a single point of entry to tools, documentation and support venues that was kept accurate and updated.

I implemented sbs, a tool that benefits both new users, experienced developers, library authors and library contributors:

  • New users enjoy a seamless introduction to Scala without requiring any kind of manual software setup like installing a JDK, setting up SBT or downloading the Scala distribution.
  • Experienced developers enjoy reproducible builds by having a tool that makes sure that the JDK dependency never drifts due to updates of the host system or differences between machines.
  • Library contributors enjoy the assurance that their build process corresponds exactly to the configuration the library maintainer has specified.

I ported the java.time package to Scala and Scala.js. I also fixed bugs in Scala-Native’s handling of equality, debugged its LLVM backend, uncovered bugs in the linker, ported an implementation of java.util.regex to Scala-Native, and implemented few additional collection classes to make java.time work on native platforms.

I extended SBT’s TestNG plugin with some basic Scala.js support, ported many algorithms for arbitrary-precision arithmetic to Scala, with the intention to provide a shared implementation of BigInt and BigDecimal that runs consistently on Scala, Scala.js and Scala-Native, and did a lot of other stuff that I fail to remember.

  1. scala.util.{automata,regexp}, scala.util.logging, scala.util.parsing.ast, scala.util.parsing.combinator, scala.util.grammar 

  2. i. e. not affiliated with EPFL, Typebend or ScalaCenter 

  3. this does not take into account work done earlier than July 2011, for which detailed records have been lost during the migration from svn to git: example, example and most of the work on the scaladoc tool