Skip to content

Instantly share code, notes, and snippets.

@soc
Created December 27, 2013 14:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save soc/8147909 to your computer and use it in GitHub Desktop.
Save soc/8147909 to your computer and use it in GitHub Desktop.
Scala 2013 – The year in review
Scala 2013 – The year in review
-------------------------------
January
-------
The new year started with a huge patch set by Paul, focused on improving scalac's handling of variance¹ and a large-scale cleanup of deprecated members and types² by Simon, as well as build managers in favor of SBT and Zinc¹¹ by Jason.
Heather added tons of documentation to IsTraversableLike³ while James fixed the handling of value type refinements which were causing a verify error on a getClass call ¹².
Paul later fixed an issue where SoftReferences were not used correctly, which lead to issues on alternative runtimes like Avian and JamVM.¹³
Grzegorz introduced a new kind of test which allows the test suite to inspect the generated bytecode²¹.
There were also a few smaller improvements to various parts of the collection classes, like Range or FlatHashTable.
¹ a painstaking examination of Variance – https://github.com/scala/scala/pull/1873
² SI-6811 Scheduled removal of deprecated items for 2.11 – https://github.com/scala/scala/pull/1921
³ SI-6946, SI-6924 Greatly improves IsTraversableLike docs – https://github.com/scala/scala/pull/1875
¹¹ SI-6964 Remove build managers, both simple and refined – https://github.com/scala/scala/pull/1897
¹² SI-5568 Fixes verify error from getClass on refinement of value type – https://github.com/scala/scala/pull/1904
¹³ SI-6969 Mishandling of SoftReferences in method cache – https://github.com/scala/scala/pull/1902
²¹ Add Bytecode test (ASM-based) to partest – https://github.com/scala/scala/pull/2014
February
--------
Paul fixed a long-standing issue with List's foldRight method which James moved cross the finish line.²
Vinicius made ListMap's remove method tail recursive, fixing a potential StackOverflowError on large ListMaps.¹
Michael added two lookup methods, firstKey and lastKey to LongMap.³
Adriaan landed a patch set improving the efficiency of the new pattern matcher.¹¹
James worked on improving tree-related code in Scala's collection library, introducing the iteratorFrom, keysIteratorFrom and valuesIteratorFrom methods on sorted collections.¹² He also did a lot of fixes on the compiler backend.
Paul later cleaned up boxing code related to erasure and post-earsure phases and value types.
Adriaan refactored the new pattern matcher and split it up into smaller files²¹, while Jason did a lot of spring cleaning all over the codebase.²²
² SI-2818 Makes List#foldRight work for large lists – https://github.com/scala/scala/pull/2026
¹ SI-6853 changed private method remove to be tail recursive – https://github.com/scala/scala/pull/1960
³ SI-5151 - Add firstKey and lastKey to LongMap – https://github.com/scala/scala/pull/2042
¹¹ pattern matching efficiency: addresses SI-6686 and SI-6941, affects SI-5739 – https://github.com/scala/scala/pull/2033
¹² SI-6642 Adds iteratorFrom, keysIteratorFrom, and valuesIteratorFrom – https://github.com/scala/scala/pull/2119
¹³ Boxing cleanup: erasure, post-erasure, value classes – https://github.com/scala/scala/pull/2145
²¹ refactor the pattern matcher into smaller files – https://github.com/scala/scala/pull/2120
²² Spring cleaning – https://github.com/scala/scala/pull/2165
March
-----
Paul worked on splitting scaladoc, interactive and continuations from the compiler and moving it into separate source trees.¹ He later added the REPL to the growing list of modularized parts.²
Paul fixed a bug in weak subtyping mentioning it's another one "in the category of bugs which involve narrowing,
widening, mediuming, dealiasing, weakening, normalizing,
denormalizing, supernormalizing, subnormalizing, and
double-bounded supersubnormalizing."³
James added support for the class file format used in Java 7.¹¹
Jason deprecated inheritance from TupleN types and made the compiler consider those types to be final in the future.¹² He also removed the arity limit from case classes, allowing the definition of types with more than 22 parameters.
Later, he optimized the compiler's type references by removing unnecessary outer references.²¹ Paul then proposed some of his own improvements, which shed another 4 references from that type.
Another patch from Paul fixed a potential StackOverflowError i Iterator's ++ method. ²³
¹ Modularized scaladoc and presentation compiler – https://github.com/scala/scala/pull/2226
² Modularized the repl – https://github.com/scala/scala/pull/2232
³ SI-7228 bug in subtyping – https://github.com/scala/scala/pull/2215
¹¹ Read version 51 (JDK 7) class files – https://github.com/scala/scala/pull/2257
¹² SI-7294 Towards finality for TupleN – https://github.com/scala/scala/pull/2299
¹³
²¹ SI-7186 Slim down some TypeRefs by 8 bytes – https://github.com/scala/scala/pull/2325
²²
²³ Iterator.++ no longer blows the stack – https://github.com/scala/scala/pull/2323
April
-----
Paul simplified how scalac treated type bounds, preventing the unnesseray addition of top/bottom types: A type T is not converted to type T :> Nothing <: Any anymore.¹
Simon added Serializable to List and Stream types, preventing unnecessarily large types to be infered in some cases.²
¹ Simplify type bounds – https://github.com/scala/scala/pull/2417
² List/Stream extends Serializable – https://github.com/scala/scala/pull/2441, https://github.com/scala/scala/pull/2442
May
---
George contributed a :kind command based on earlier work done by Eugene Y., which allows people to inspect kinds, just like types:
scala> :type List
scala.collection.immutable.List.type
scala> :kind List
scala.collection.immutable.List's kind is F[+A]
A commit by Paul now enables the compiler use consider bounds already declared in supertypes, so that they don't have to be redeclared unnecessarily.²
Another impressive patch set crafted by Paul improves the organization of typer states and removes a bunch of typer modes.³
Additionally, he reworked a large part of the code responsible for type parameter inference.¹¹
Simon added a commit which made the treatment of exceptions in parallel collections more consistent.¹²
¹ Added a :kind command to the REPL – https://github.com/scala/scala/pull/2340
² SI-1786 incorporate defined bounds in inference – https://github.com/scala/scala/pull/2518
³ Toward more organized typer state – https://github.com/scala/scala/pull/2492
¹¹ Sanitation of Infer – https://github.com/scala/scala/pull/2564
¹² SI-7474 Parallel collections: End the exception handling madness – https://github.com/scala/scala/pull/2563
June
----
Having worked on support for the Java 7 class file format earlier, James added support for reading Java 8's upcoming class file format.¹
Paul presented a patch which removed the usage of Option for types which already had their own sentinel value.²
A short time later another change was brought up by Paul which increased the eligibility requirements for implicit conversions so that conversions from Null or conversions to AnyRef are rejected.³
A commit by Simon deprecating octal escape literals was also merged this month.¹¹
Adriaan modularized Scala's support for XML and its parser combinators and moved those parts to separate JAR files.¹², ²¹
Viktor substantially reworked Scala's Future & Promises implementation for better performance and code reuse.¹³
¹ Test for reading JDK 8 (classfile format 52) class files – https://github.com/scala/scala/pull/2606
² Eliminate needless Options – https://github.com/scala/scala/pull/2617
³ SI-6899 Prohibit dangerous, useless implicit conversions – https://github.com/scala/scala/pull/2625
¹¹ SI-7292 Deprecate octal escape literals – https://github.com/scala/scala/pull/2342
¹² Spin off xml library as scala-library-xml – https://github.com/scala/scala/pull/2667
¹³ General SIP-14 Future method implementation cleanup – https://github.com/scala/scala/pull/2511
²¹ Modularize parsing – https://github.com/scala/scala/pull/2669
July
----
After a long time of reviewing and adjusting Miguel's new backend, the first parts of GenBCode were finally merged.¹
Reacting to concerns raised by Paul earlier, a patch by Simon migrated the compiler from using its own internal TreeSet implementation to the standard implementation of the collection library and removed the now ununsed implementation altogether. MultiHashMap followed later.²
Later this month, som-snytt introduced a lot of new features for Scala's REPL, including :edit, :settings and :save commands.³
The depracated version of floating points literals (the ones without a digit after the dot, e. g. `1.`) was also removed by Simon.¹¹
¹ new bytecode emitter, GenBCode (11th attempt) – https://github.com/scala/scala/pull/2620
² SI-7592 Replace s.t.n.u.TreeSet with s.c.m.TreeSet – https://github.com/scala/scala/pull/2663; SI-7592 Remove scala.tools.nsc.util.MultiHashMap – https://github.com/scala/scala/pull/2718
³ Repl edit command – https://github.com/scala/scala/pull/2706; SI-4594 Repl settings command – https://github.com/scala/scala/pull/2701; SI-6419 Repl save session command – https://github.com/scala/scala/pull/2697
¹¹ SI-7620 Remove floating-point-literals-without-digit-after-dot – https://github.com/scala/scala/pull/2690
August
------
September
---------
October
-------
November
--------
December
--------
==========
Ongoing work: Avian, Macros, GenBCode, Modularization, Deprecation, Clean-ups
==========
Missing:
Reflection thread safety
Quasiquotes
rjolly added JSR-223 scripting engine support to Scala.
Paul fixed an issue with scalac's home-grown TreeSet implementation in combination with Iterator, which reduced the time the lambdalift pahse took from 217 seconds down to 2 seconds. He added some warning words on having distinct, compiler-internal collection implementations and not using the battle-tested code everyone else uses. a)
a) Take the N^2 out of the compiler's TreeSet – https://github.com/scala/scala/pull/2331
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment