Scala - замечательный язык, но мне интересно, как можно улучшить, если у него есть собственное время выполнения?
I.e. какие варианты дизайна были сделаны из-за выбора JVM?Какие компромиссы Scala запустили на JVM?
ответ
This article - это дискуссия с Мартином Одерски (создателем Скалы) и включает компромиссы, которые были сделаны в Scala для совместимости с Java. В статье упоминается:
- Статическая перегрузка методов
- Наличие обоих признаков и классов
- включение
null
указателей.
Два наиболее важных компромиссов я знаю о являются:
- type erasure («reflecting on Type»): Он должен manage a Manifest обойти компиляции Java (независимо от виртуальной машины Java, для обеспечения обратной совместимости причине).
- коллекция примитивного типа: например .: arrays
новой схема обработки массивов в Scala 2.8. Вместо того, чтобы бокс/распаковка и другой магия компилятор схема опирается на неявных преобразованиях и манифестах для интеграции массивов
Таковы два основных ограничения виртуальной машины Java, когда дело доходит до управления общего типа (с границами): Java JVM не поддерживает точное использование типа в универсальном объекте и имеет «примитивные» типы.
Но вы могли бы также рассмотреть вопрос:
- оптимизация Tail-вызов not yet full supported by the JVM, был hard to do anyway (и еще Scala 2.8 вводит the
@tailrec
annotation) - UAP (universal Access Principle) потребности для подражания (не поддерживается Java) , и скоро будет completed for Value Holder (
@proxy
) - все смешанные механизмы необходимо также эмулировать
- mor е вообще, huge number of static types введен Scala необходимости (для большинства из них), которые будут созданы в Java:
Для того, чтобы охватить как можно больше возможностей, насколько это возможно, Scala предоставляет:
- Условный класс типы,
- типы класса Value,
- Nonnullable типы,
- типы Монада,
- Типы признаков,
- Типы объектов Singleton (процедурные модули, служебные классы и т. Д.)
- типа Compound,
- Функциональных типов,
- классов Case,
- зависимых от пути типов,
- Анонимных типов,
- типов Самостоятельно,
- Типа псевдонимы,
- Generic типы,
- Covariant generic types,
- Cont ravariant общие типы,
- Кольцевые общие типы,
- Абстрактные типы,
- экзистенциальные типы,
- неявные типы,
- дополненной типы,
- Посмотреть ограниченные типы и
- Структурные типы, которые позволяют форма утиного набора, когда все остальное не работает
Примечание для себя: этот список типов рассматривается (со ссылками) в http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC
Меньше проблемы со временем выполнения, чем культурное похмелье: универсальное равенство, хеширование, toString.
Более глубоко привязаны к ВМ: строгие оценки по умолчанию, нечистые функции, исключения.
+1 для всеобщего равенства и хэширования. Что случилось с универсальной 'toString'? – missingfaktor
1) Легко случайно отобразить 'Object # toString' пользователю. 2) 'Collection [A] # toString' является негибким в том, как он отображает элементы типа' A'. См. «Scalaz.Show» для альтернативы. – retronym
Хорошо. Спасибо за ответ. – missingfaktor
Отличная ссылка. +1 – VonC