Какие компромиссы сделали Scala для запуска на JVM? - PullRequest
21 голосов
/ 21 апреля 2010

Scala - замечательный язык, но мне интересно, как его можно улучшить, если бы он имел собственную среду выполнения?
То есть какой выбор дизайна был сделан из-за выбора JVM?

Ответы [ 3 ]

26 голосов
/ 21 апреля 2010

Два самых важных компромисса, о которых я знаю:

  • стирание типа (" отражается на типе "): ему необходимо управлять манифестом , чтобы обойти компиляцию Java (независимо от JVM, для причина обратной совместимости).
  • коллекция примитивного типа: например: массивы

    новая схема обработки массивов в Scala 2.8. Вместо блокирования / распаковки и прочей магии компилятора схема опирается на неявные преобразования и проявляет себя для интеграции массивов

Это два основных ограничения JVM, когда дело касается управления универсальным типом (с границами): Java JVM не сохраняет точное использование типа в универсальном объекте и имеет «примитивные» типы.


Но вы также можете рассмотреть:

Чтобы охватить как можно больше возможностей, Scala предоставляет:

  • Обычные классы,
  • Типы классов значений,
  • Не обнуляемые типы,
  • Типы монад,
  • Типы черт,
  • Типы объектов Singleton (процедурные модули, служебные классы и т. Д.),
  • Типы соединений,
  • Функциональные типы,
  • Классы дел,
  • Типы, зависящие от пути,
  • Анонимные типы,
  • Самостоятельные типы,
  • Тип псевдонимов,
  • Общие типы,
  • Ковариантные универсальные типы,
  • Контравариантные родовые типы,
  • Ограниченные универсальные типы,
  • Абстрактные типы,
  • Экзистенциальные типы,
  • Неявные типы,
  • Расширенные типы,
  • Просмотр ограниченных типов и
  • Структурные типы, которые позволяют печатать утку, когда все остальное терпит неудачу
20 голосов
/ 21 апреля 2010

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

  1. Статическая перегрузка методов
  2. Наличие как черт, так и классов
  3. Включение null указателей.
3 голосов
/ 23 апреля 2010

Меньше проблем со временем выполнения, чем культурное похмелье: универсальное равенство, хэширование, toString.

Более тесно связаны с ВМ: строгая оценка по умолчанию, нечистые функции, исключения.

...