比較するスカラ2.7.7(最後の2.7.xリリース)スカラ2.8.1(最新の 2.8.x リリース) 次のメトリックを収集しました。
Scala version | 2.7.7 2.8.1
------------------------------------------------
Compressed jar file | 3.6 MB 6.2 MB
Uncompressed files | 8.3 MB 16.5 MB
.class files in . | 1.8 MB 1.7 MB
in ./actors | 554.0 KB 1.3 MB
in ./annotation | 962 B 11.7 KB
in ./collection | 2.8 MB 8.8 MB
in ./compat | 3.8 3B 3.8 KB
in ./concurrent | 107.3 KB 228.0 KB
in ./io | 175.7 KB 210.6 KB
in ./math | --- 337.5 KB
in ./mobile | 40.8 KB 47.3 KB
in ./ref | 21.8 KB 26.5 KB
in ./reflect | 213.9 KB 940.5 KB
in ./runtime | 271.0 KB 338.9 KB
in ./testing | 47.1 KB 53.0 KB
in ./text | 27.6 KB 34.4 KB
in ./util | 1.6 MB 1.4 MB
in ./xml | 738.9 KB 1.1 MB
最も大きな犯罪者はscala.コレクション(3.1倍)そしてscala.reflect(4.4 倍)。コレクション パッケージの増加は、2.8 のコレクション フレームワーク全体の大規模な書き換えと同じ時期に行われたため、これが原因であると考えられます。
私は常に、コレクション クラス メソッドの最適な戻り値の型を計算する型システムのマジック (2.8 での大きな変更点) はコンパイル時に実行され、その後は表示されないだろうと想定していました。
- 書き換えによってサイズがこれほど大きく増加したのはなぜでしょうか?
私の知る限りでは改善が計画されているスカラ、scala.reflectそしてscala.swing少なくとも2つの他のアクターライブラリが同じことを行っています。scala.actor(リフトアクター)またはもっとたくさん(アッカ)とscala.テスト正式にはサードパーティのテスト ライブラリに置き換えられています。
改善されるスカラ、scala.reflectまたはscala.swing同等のサイズの増加をもたらすか、scala.コレクション本当に特別な状況ですか?
JDK 8 に使用可能なモジュール化システムがある場合、アクターの実装を Lift または Akka に委任することを検討していますか?
最終的に削除する予定はありますか?scala.テストまたはライブラリの jar ファイルから分割しますか?
JDK7/JDK8 に SAM 型、Defender メソッド、または MethodHandles が組み込まれると、Scala コンパイラが匿名/内部クラス/シングルトンなどに生成する必要があるクラスの量が減る可能性はありますか?
ベストアンサー1
特殊化は 1 つの要因です (jar で約 0.9 MB 増加)。もう 1 つの要因はコレクション ライブラリです。コレクション ライブラリは、より大規模な実装タイプのセットに対してより大規模な操作セットを均一に実装するようになりました。増加の大部分はバイトコードのみで発生します。これは、新しいコレクション ライブラリが mixin 構成を非常に頻繁に使用し、クラス ファイルのサイズが増加する傾向があるためです。ソース ファイルのサイズに関するデータはありませんが、増加ははるかに小さいと思います。