2011-12-18 8 views
27

面白いタイトルを許してください、私はそれを "zip bomb"と類推して使っています。コンパイル時に多数のクラスファイル(または非常に大きな単一クラスファイル)を生成するscalaソースファイルを作成することは可能ですか?クラスファイルのサイズがソースファイルのサイズに比例してより速く成長する方法はありますか?スカラ爆弾? (ジップ爆弾のような)

+1

地獄の中で何が必要なのでしょうか? –

+1

@NikitaVolkov面白い精神運動のように聞こえるが、実用的なアプリケーションを見つけようとすると問題がある。 – Vatine

+6

Ok、praticalアプリケーションが必要な人向け:DOS攻撃からScalaコードをコンパイルするサービスを保護しようとしています。 –

答えて

32

特殊化は、固有の型パラメータの数が本質的に指数関数的です。 (私はこれがいつ発生することは困難を正確に予測するために見つけるのに)

class Huge[@specialized A, @specialized B, @specialized C](
    val a: A, val b: B, val c: C 
) {} // 730 files, 2.9 MB 

class Gigantic[@specialized A, @specialized B, @specialized C, @specialized D](
    val a: A, val b: B, val c: C, val d: D 
) {} // 6562 files, 26 MB 

パターンマッチングはまた、複雑なケースのためのコードの重複の多くを含むことができます。

+0

ああ、私は特化、素晴らしい答えを使用したことがない! –

+2

Rex、情報のために、パターンがhttps://issues.scala-lang.org/browse/SI-1133に一致するために発生したバグがあります。コードが多すぎるために失敗します。これは2.10の新しい仮想パターンマッチャーで修正する必要があります。 –

関連する問題