Six Years of Scala Development
Part II: Retrospective
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.util
1 altogether,
raised the issue that got scala.mobile
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
scala-lang.org,
docs.scala-lang.org 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 scala-android.org 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.
-
scala.util.{automata,regexp}
,scala.util.logging
,scala.util.parsing.ast
,scala.util.parsing.combinator
,scala.util.grammar
↩ -
i. e. not affiliated with EPFL, Typebend or ScalaCenter ↩
-
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 ↩