Scala - замечательный язык, но мне интересно, как можно улучшить, если у него есть собственное время выполнения?
То есть какие варианты дизайна были сделаны из-за выбора JVM?
Какие компромиссы Scala сделаны для запуска JVM?
Ответ 1
Эта статья является дискуссией с Мартином Одерским (создателем Scala) и включает компромиссы, которые были сделаны в Scala для совместимости с Ява. В статье упоминается:
- Статическая перегрузка методов
- Имея оба свойства и классы
- Включение указателей
null
.
Ответ 2
Два наиболее важных компромисса, о которых я знаю, следующие:
- type erasure ( " отражающий тип "): Он должен управлять манифестом, чтобы обойти компиляцию Java (независимо от JVM, для соображения обратной совместимости).
- коллекция примитивного типа: например: массивы
новая схема обработки массивов в Scala 2.8. Вместо бокса /unboxing и другой магии компилятора схема использует неявные преобразования и манифесты для интеграции массивов
Это два основных ограничения JVM, когда дело доходит до управления общим типом (с ограничениями): Java JVM не поддерживает точное использование типа в универсальном объекте и имеет "примитивные" типы.
Но вы также можете подумать:
- Оптимизация Tail-call еще не полностью поддерживается JVM, была трудно сделать в любом случае (и тем не менее Scala 2.8 вводит аннотация
@tailrec
) - UAP (универсальный принцип доступа) нуждается в эмулировании (не поддерживается Java) и скоро будет завершено для Value Holder (
@proxy
) - необходимо также эмулировать весь механизм микширования.
- В более общем плане огромное количество статических типов, представленное Scala необходимо (для большинства из них), которое должно быть сгенерировано в Java:
Чтобы охватить как можно больше возможностей, Scala обеспечивает:
- Обычные типы классов,
- Типы классов значений,
- Необязательные типы,
- Типы монады,
- Типы признаков,
- Типы объектов Singleton (процедурные модули, служебные классы и т.д.),
- Составные типы,
- Функциональные типы,
- Примеры классов,
- Типы, зависящие от пути,
- Анонимные типы,
- Типы типов,
- Введите псевдонимы,
- Общие типы,
- Ковариантные общие типы,
- Контравариантные общие типы,
- Ограниченные общие типы,
- Абстрактные типы,
- Экзистенциальные типы,
- Неявные типы,
- Расширенные типы,
- Просмотр ограниченных типов и
- Структурные типы, которые допускают форму утиного ввода, когда все остальное терпит неудачу
Ответ 3
Меньше проблемы с временем выполнения, чем культурное похмелье: универсальное равенство, хеширование, toString.
Более глубоко привязаны к ВМ: строгая оценка по умолчанию, нечистые функции, исключения.