Спустя два с половиной года после выхода Scala 2.12 вышла новая версия языка 2.13. В эту версию вошло более 1500 пулл-реквестов, а контрибьюторами стали 162 человека. Список изменений и нововведений довольно внушающий. Целью многих из них стало упрощение языка и стандартной библиотеки. Перечислим некоторые из них.
- Более простые сигнатуры методов и упрощение иерархии коллекций (больше нет CanBuildFrom, Traversable, TraversableOnce).
- Новые более эффективные реализации HashMap и HashSet с лучшей совместимостью с java.util.HashMap/HashSet.
- Новые типы коллекций (immutable.LazyList, immutable.ArraySeq, mutable.ArrayDeque, immutable.VectorMap, immutable.TreeSeqMap и т.д.). immutable.Stream стал deprecated.
- Множество новых методов в существующих классах (Seq.lengthIs, Seq.sizeIs, Seq.sizeCompare, Iterable.lazyZip, String.toIntOption, Left.withRight, Right.withLeft, pipe, tap и т.д.).
- Интероперабельность с Java теперь является частью стандартной библиотеки.
- Появилось автоматическое управление ресурсами (scala.util.Using).
- Новые языковые возможности (типы-литералы, частичная унификация, by-name implicits, подчёркивания в числовых литералах).
- Стали deprecated процедурный синтаксис (
def m() { ... }
) и View bounds (A <% B
). - Новый компилятор стал быстрее на 5-10% по сравнению с 2.12.
Как и Scala 2.12, Scala 2.13 требует Java 8 для работы (и оба работают на Java 11).
2.12 и 2.13 не являются бинарно совместимыми, поэтому необходима перекомпиляция всех существующих библиотек.