Каково практическое максимальное количество полей, допустимое в классе дел Scala, теперь, когда 22 больше не является пределом? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть проект, который генерирует ошибку переполнения стека во время компиляции.

Я использую Quill для сохранения, который использует макросы.У меня есть класс дел с 600+ полями, который представляет таблицу базы данных.

Во время компиляции я получаю следующую бесконечную рекурсию:

ervice.scala: 27: ОБНОВЛЕНИЕ email_user SET password_hash =?ГДЕ user_id =?[info] .run (цитата {[info] ^ java.lang.StackOverflowError на scala.tools.nsc.transform.Erasure $ Eraser.adaptMember (Erasure.scala: 686) на scala.tools.nsc.transform.Erasure $ Eraser.typed1 (Erasure.scala: 773) в scala.tools.nsc.typechecker.Typers $ Typer.runTyper $ 1 (Typers.scala: 5584) в scala.tools.nsc.typechecker.Typers $ Typer.typedInternal (Typers.scala:5616) по адресу scala.tools.nsc.typechecker.Typers $ Typer.body $ 2 (Typers.scala: 5557) по адресу scala.tools.nsc.typechecker.Typers $ Typer.typed (Typers.scala: 5562) по адресу scala.tools.nsc.typechecker.Typers $ Typer. $ anonfun $ typed1 $ 38 (Typers.scala: 4708) в scala.tools.nsc.typechecker.Typers $ Typer.silent (Typers.scala: 698) в scala.tools.nsc.typechecker.Typers $ Typer.normalTypedApply $ 1 (Typers.scala: 4710) на сайте scala.tools.nsc.typechecker.Typers $ Typer.typedApply $ 1 (Typers.scala: 4757) на сайте scala.tools.nsc.typechecker.Typers $ Typer.typedInAnyMode 1(Typers.scala: 5530) по адресу scala.tools.nsc.typechecker.Typers $ Typer.typed1 (Typers.scala: 5547) по адресу scala.tools.nsc.transform.Erasure $ Eraser.typed1 (Erasure.scala: 773) в scala.tools.nsc.typechecker.Typers $ Typer.runTyper $ 1 (Typers.scala: 5584)

Несмотря на то, что в поле 22 ограничено количество регистраполя пропали, есть ли какой-то практический предел, на который я наткнулся?

Эта ошибка компиляции возникает, если я не использую Quill для доступа к рассматриваемому классу таблицы / огромного дела.

Спасибо за любыепонимание!

1 Ответ

0 голосов
/ 14 сентября 2018

Вы наталкиваетесь на максимальный размер стека JVM, на котором вы компилируете, если вы хотите назвать это практическим пределом. Считается нормальным, что вам нужно увеличивать размер стека JVM, если вы хотите скомпилировать код, который является необычно глубоким или использует необычно большие классы падежей. Передав аргумент -Xss6m в JVM, вы можете установить максимальный размер стека в 6 МБ. Вы можете попытаться увеличить это число, пока оно не заработает.

...