Релиз Scala 2.10

в 19:31, , рубрики: scala, метки:

Сегодня, наконец-то, вышла финальная версия Scala 2.10.0, о чем на сообщают на официальном сайте.

Новые возможности:

Value классы

Теперь пользовательские классы могут наследоваться от AnyVal (раньше было возможно только от AnyRef). Позволяют добиться большей производительности, выделяя память для объектов во время компиляции.

class Wrapper(val underlying: Int) extends AnyVal

У класса должен быть единственный, публичный val параметр, тип которого будет типом вашего класса во время рантайма.
Есть некоторые ограничения, частично из-за текущей реализации JVM.
docs.scala-lang.org/overviews/core/value-classes.html

Неявные классы

Ключевое слово implicit теперь можно применять не только к методам, но и к классам. Добавлены для того, чтобы упростить расширение существующих классов и уменьшить нагрузку на implicit методы. Так же, очевидно, могут иметь только один параметр (можно больше, если остальные неявные). В классе можно определять только методы, исключение — параметр конструктора.
Синтаксис:

implicit class RichInt(n: Int) extends Ordered[Int] {
  def min(m: Int): Int = if (n <= m) n else m
}

docs.scala-lang.org/sips/pending/implicit-classes.html

Интерполяция строк

val lang = "Scala"
println(s"Наконец-то в $lang появилась интерполяция!")

Чтобы компилятор интерполировал строку, перед ней нужно добавить специальный метод — интерполятор строки. Из коробки есть три интерполятора: s, f и raw.
S дозволяет вставлять в строку переменные (перед ними нужно поставить $) и выражения (заключите в ${}), f форматирует в стиле старого, доброго printf, а с raw, как можно догадаться из названия, вы можете использовать в строке упраляющие последовательности (escape sequences) — println(raw'somentext') напечатает одну строку.
Пока не работает с pattern matching, но обещают исправить к 2.11

val height = 1.9d
val name = "James"
println(f"$name%s is $height%2.2f meters tall")  // James is 1.90 meters tall

docs.scala-lang.org/overviews/core/string-interpolation.html

Futures и Promises

Новые возможности для паралельного программирования. Идея в следующем — вы можете присвоить объекту значение, которого еще не существует. Например, результат функции, которая делает асинхронный запрос.

import scala.concurrent._
import ExecutionContext.Implicits.global
val session = socialNetwork.createSessionFor("user", credentials)
val f: Future[List[Friend]] = future {
  session.getFriends()
}

docs.scala-lang.org/overviews/core/futures.html

Dynamic

Устраняет некоторые недостатки статической типизации.
Если вы вызвали метод, который не определен для данного класса и класс расширяет (extends) scala.Dynamic, тогда вызов метода заменяется на object.applyDynamic(«methodName») или, в зависимости от контекста, на applyDynamicNamed, selectDynamic или updateDynamic.
docs.scala-lang.org/sips/pending/type-dynamic.html

Зависимые типы методов

def identity(x: AnyRef): x.type = x // возвращаем то, что получили

Новый компилятор в байт-код, основанный на ASM

Поддерживает JDK 1.5, 1.6 и 1.7. По умолчанию генерирует байткод для 1.6. Использование генератора 1.5 не рекомендуется (deprecated).

Новый Pattern Matcher

Переписан с нуля, чтобы генерировать лучший код (больше никаких экспоненциальных взрывов). Теперь анализ и генерация кода независимы (первое можно отключить ключом -Xno-patmat-analysis).

Улучшеный Scaladoc

  • Implicits (ключ -implicits)
  • Диаграммы (ключ -diagrams, нужен graphviz)
  • Группы (-groups)

Модуляризация функций

Чтобы использовать некоторые продвинутые и специализированные функции теперь нужно явно их импортировать.
docs.scala-lang.org/sips/pending/modularizing-language-features.html

Возможность конфигурировать thread pool для параллельных коллекций

Акторы Akka теперь в стандартной поставке

Улучшена производительность

  • Более быстрый inliner
  • `Range#sum теперь O(1)
  • Обновление библиотеки ForkJoin
  • Исправления в immutable TreeSet/TreeMap
  • Улучшения для PartialFunctions

Добавлены ??? и NotImplementedError

Добавлены классы IsTraversableOnce и IsTraversableLike

Литералы для чисел с плавающей точкой и восьмеричных числе теперь deprecation

Удален scala.dbc

Экспериментальные возможности

Полный список изменений по сравнению с 2.9.2

Автор: shock_one

Источник

Поделиться

* - обязательные к заполнению поля