Преимущества система типов в Scala


Я изучаю язык Scala. Одно утверждение, которое я часто слышу, это то, что у Scala есть сильнее тип системы, чем Java. Под этим я думаю, что люди имеют в виду, что:

  • scalac отвергает некоторые глючные программы, которые javac счастливо компиляции, только чтобы вызвать ошибку во время выполнения.
  • некоторые инварианты могут быть закодированы в программе Scala таким образом, что компилятор не позволит программисту написать код, который нарушает состояние.

Я прав, думая так?

2 55

2 ответа:

главным преимуществом системы типа Scala является не столько бытие сильнее а далеко богаче (см. "Система Типа Scala").
(Java может определить некоторые из них и реализовать другие, но Scala имеет их встроенный).
Смотрите также The Myth Makers 1: Scala 'S" Type Types", комментируя Стив Yegge блог, где он "отшил" Скала "монстр", потому что "есть тип типы и типы типов типа".

основная проблема безопасности с Java связана с дисперсией. В принципе, программист может использовать неверные объявления дисперсии, которые могут привести к возникновению исключений во время выполнения в Java, в то время как Scala не позволит этого.

на самом деле, тот самый факт, что Java Array is co-variant уже является проблемой, поскольку он позволяет генерировать неверный код. Например, на примере sepp2k:

String[] strings = {"foo"};
Object[] objects = strings;
objects[0] = new Object();

тогда, конечно, есть сырые типы в Java, что позволяет все виды вещей.

кроме того, хотя у Scala это тоже есть, есть кастинг. Java API богат приведениями типов, и нет такой идиомы, как Scala case x: X => // x is now safely cast. Конечно, один случай использования instanceof чтобы достичь этого, но нет никакого стимула, чтобы сделать это. На самом деле, Скала asInstanceOf намеренно многословен.

это то, что делает систему типов Scala сильнее. Он также намного богаче, как VonC показывает.