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