2011-12-18 4 views
27

Извините смешное название, я использую его по аналогии с «zip bomb». Возможно ли создать исходный файл scala, который при компиляции производит большое количество файлов классов (или очень большой файл одного класса)? Есть ли способ увеличить размер файлов классов быстрее, чем линейно, с размером исходного файла?Scala bomb? (как молния)

+1

Что, черт возьми, вам это может понадобиться? –

+1

@NikitaVolkov Это звучит как интересное умственное упражнение, но у меня есть проблема с поиском практического приложения. – Vatine

+6

Хорошо, для тех людей, которые нуждаются в подходящих приложениях: Попытка защитить сервис, который компилирует Scala-код из DOS-атак. –

ответ

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. –

Смежные вопросы