Какие компромиссы Scala сделаны для запуска JVM?

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

Ответ 1

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

  • Статическая перегрузка методов
  • Имея оба свойства и классы
  • Включение указателей null.

Ответ 2

Два наиболее важных компромисса, о которых я знаю, следующие:

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

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

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


Но вы также можете подумать:

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

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

Ответ 3

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

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