Я никоим образом не связан ни с проектом Scala, ни с компаниями, которые его поддерживают. Так что примите все ниже, как мое личное мнение ·
- Почему перезапись привела к такому большому увеличению размера?
Скорее всего, не само переписывание, а специализация . В частности, это определение Function1
:
trait Function1[@specialized(scala.Int, scala.Long, scala.Float, scala.Double) -T1, @specialized(scala.Unit, scala.Boolean, scala.Int, scala.Float, scala.Long, scala.Double) +R]
означает, что все методы в Function1
будут реализованы 35 раз (по одному для каждого из Int
, Long
, Float
, Double
и AnyRef
T1
раз каждый Unit
, Boolean
, Int
, Float
, Long
, Double
и AnyRef
R
.
Теперь посмотрите на Scaladoc и посмотрите известные подклассы для Function1
. Я не буду даже копировать это здесь. Также специализируется там, где Function0
и Function2
, хотя их влияние намного меньше.
Во всяком случае, я бы поспорил, что переписывание уменьшило конечную площадь из-за расширенного повторного использования кода.
Что касается reflect
, то он практически не существовал и не предоставил фундаментальных функций новой библиотеке коллекций, поэтому неудивительно, что он значительно увеличился.
- Приведет ли улучшенный scala.io, scala.reflect или scala.swing к сопоставимому увеличению размера или случай scala.collection был действительно особым обстоятельством?
Несопоставимо, потому что переписывание не имеет к этому никакого отношения. Тем не менее, настоящая scala.io
библиотека, несомненно, будет намного больше той, что существует в наши дни, и я ожидал бы того же от истинной системы отражений для Scala (о последних были статьи). Что касается swing
, я не думаю, что есть что-то, кроме постепенных улучшений, в основном это обертки вокруг библиотек Java, поэтому я сомневаюсь, что это сильно изменится в размере.
- Считается ли делегированием реализации акторов Lift или Akka, если в JDK 8 будет использоваться используемая система модульности?
У каждой реализации есть свои сильные стороны, и пока я не видел никаких признаков сближения. Что касается JDK 8, как Scala должна быть совместима с JDK 5 при модульности для JDK 8? Я не имею в виду, что это невозможно, но, скорее всего, слишком много усилий для доступных ресурсов.
- Есть ли планы окончательно удалить scala.testing или разделить его из jar-файла библиотеки?
Это уже обсуждалось, но есть также проблема с наличием некоторого своего рода инфраструктуры тестирования, доступной для самого компилятора, с гибкостью, которую не может обеспечить сторонняя среда тестирования. Впрочем, его вполне можно переместить (или удалить и заменить чем-то другим) в компилятор jar.
- Может ли включение типов SAM, Defender Methods или MethodHandles в JDK7 / JDK8 привести к возможности уменьшения количества классов, которые компилятор Scala должен сгенерировать для анонимных / внутренних классов / синглетонов / и т. Д.?
Конечно, когда-то больше никто не использует JDK5 / JDK6. Конечно, если JDK7 / JDK8 получат широкое распространение и улучшения будут достаточно полезными, то вполне может наступить момент, когда Scala будет распространяться с двумя различными jar-файлами для своей библиотеки. Но на данный момент еще рано вызывать гипотетические сценарии.