2011-12-18 8 views
27

Disculpe el título divertido, lo estoy usando en analogía con "zip bomb". ¿Es posible crear un archivo fuente de scala que, una vez compilado, producirá una gran cantidad de archivos de clase (o un archivo de clase único muy grande)? ¿Hay alguna manera de que el tamaño de los archivos de clase crezca más rápido que linealmente con el tamaño del archivo fuente?Scala bomb? (como una bomba zip)

+1

¿Para qué diablos podrías necesitar eso? –

+1

@NikitaVolkov Suena como un ejercicio mental interesante, pero tengo un problema tratando de encontrar una aplicación práctica. – Vatine

+6

Ok, para aquellas personas que necesitan aplicaciones prácticas: intentar proteger un servicio que compila el código Scala de los ataques DOS. –

Respuesta

32

La especialización es inherentemente exponencial en la cantidad de parámetros de tipo especializados.

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 

patrón de juego también puede implicar una gran cantidad de duplicación de código para los casos complejos (aunque me resulta difícil predecir exactamente cuándo ocurrirá esto).

+0

¡Ah, nunca he utilizado la especialización, gran respuesta! –

+2

Rex, para información, hay un error planteado para la coincidencia de patrones https://issues.scala-lang.org/browse/SI-1133, falla porque se genera demasiado código. Esto debería ser arreglado con la nueva coincidencia de patrón virtual en 2.10. –

Cuestiones relacionadas