]]> ]]>

Scala 2.0.0

Версия реализации Scala for JVM языка программирования Scala

Версия Scala 2.0.0 выпущена 12 марта 2006.

Основные изменения относительно версии Scala 1.4.0.4:

  • полностью переписан компилятор Scala
  • экспериментально поддерживает Java generics (опция -Xgenerics)
  • Java инсталлятор использует IzPack вместо InstallAnywhere

Изменения в синтаксисе языка

Добавлены три новых ключевых слова, которые не могут быть использованы в качестве идентификаторов: implicit, match, requires

Новая строка может быть использована в качестве разделителя выражений наравне с ;

Ключевое слово match теперь используется как инфиксный оператор между выражением и множеством вариантов:

    expr match {
      case Some(x) => ...
      case None => ...
    }
//старые варианты вида отныне не работают
    expr.match {...}
    match {...}

Изменен синтаксис с with:

//отныне старый вариант не поддерживается
    class C with M { ... }
//и считается правильными ниже приведенные варианты
    class C extends AnyRef with M { ... }
    class C extends M { ... }
    class C extends S with M { ... }

Поддерживается форма регулярных выражений, которая заканчивается символами _*:

    case List(1, 2, _*) => ... // соответствуют варианты начинающиеся с  1,2

Изменен синтаксис объявления типов. Старый синтаксис поддерживается компилятором, но считается устаревшим:

// старый синтаксис
    class C: T extends B { ... }
// новый синтаксис
    class C requires T extends B { ... }

Выражение for отныне может принимать значения и использовать по образцу определения:

    for {  
      val x <- List.range(1, 100)
      val y <- List.range(1, x)
      val z = x + y
      isPrime(z)
    } yield Pair(x, y)

Правила преобразования неявных методов к функциям были изменены. В результате изменений некоторые вполне легальные конструкции в прошлом считаются неверными:

    def sum(f: int => double)(a: int, b: int): double =  if (a > b) 0 else f(a) + sum(f)(a + 1, b)

    val sumInts = sum(x => x)  // ошибка: отсутствует аргумент
    val sumInts: (int, int) => double = sum(x => x)  // верный вариант

Были ослаблены требования к пустым спискам параметров. Это позволило отказаться от использования метода с явным, но пустым списком параметров. Ниже приведенный пример отныне является вполне легальным:

    class C {
      override def toString: String = //...
    }

Параметры класса могут теперь быть описаны с префиксами val или var

Изначально язык Scala содержал 3 уровня видимости private, protected и public. Но не было возможности ограничить доступ к членам текущего пакета, как я Java. Были произведены изменения:

    private[C] def f(...) // доступ к `f` будет ограничен в пределах класса или пакета С (который содержит определение `f`)

Изменена работа с неявными параметрами в соответствии с общим понятием неявных параметров


Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам