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

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

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

Действительно ли я прав в размышлении так?

56
задан jaco0646 4 May 2018 в 16:22
поделиться

2 ответа

Основное преимущество системы типов Scala не столько в том, что она сильнее , сколько в том, что она намного богаче (см. « Система типов Scala »).
(Java может определять некоторые из них и реализовывать другие, но в Scala они встроены).
См. Также Создатели мифов 1: «Типы типов» Scala , комментируя сообщение в блоге Стива Йегге , где он «отвергает» Scala как «монстра Франкенштейна», потому что «существуют типы типов, и тип тип типы ».

74
ответ дан 26 November 2019 в 17:25
поделиться

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

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

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

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

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

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

16
ответ дан 26 November 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: