Eclipse Scala IDE работает медленно и падает из-за сгенерированного Slick HCon (HList)

Я использую Eclipse 4.3.2 Scala IDE 3.0.3, и пока все в порядке. Однако в последнее время я начал использовать генератор кода Slick 2.0.1. и поскольку в моей базе данных есть несколько довольно тяжелых таблиц (до 200 столбцов), генератор кода Slick использует «реализацию HList для преодоления ограничения размера кортежа Scala».

Отсюда целый букет проблем:

  1. Открытие файла, содержащего сгенерированные генератором кода классы, останавливает eclipse на несколько минут.
  2. Я часто получаю eclipse Error in Scala compiler java.lang.StackOverflowError, после чего мне советуют закрыть приложение...
  3. «Content Assist» аварийно завершает работу со следующей ошибкой:

The 'Scala Completion Proposal Computer' proposal computer from the 'org-scala-ide.sdt.core' plug-in did not complete normally. Unable to instantiate the extension.

4. «Обновление аннотаций вхождения» работает целую вечность

Я предполагаю, что все эти проблемы связаны с памятью (в противном случае дайте мне знать), поэтому я попытался увеличить параметры памяти на eclipse.ini:

-Xss8M
-XX:MaxPermSize=1024m #this one seems to be irrelevant since I'm running Java 8
-Xms512m
-Xmx4096m

Есть ли что-нибудь еще, что я могу сделать, чтобы сделать мой рабочий процесс терпимым?

Мой стек:

Scala 2.10.4/Play Framework 2.2.2/Java 8/Ubuntu 13.10 64 бит

ОБНОВЛЕНИЕ: проблема связана с этим файлом: http://pastebin.com/BDhhPHXB

До сих пор я заметил это: открытие файла / его сохранение / компиляция / использование предложений кода каждый раз занимает примерно 70 секунд. Итак, я предполагаю, что код этого файла запускается против компилятора практически для любого действия, связанного с ним?


person Caballero    schedule 03.04.2014    source источник
comment
Использует ли ваша Scala IDE компилятор презентаций Scala 2.10.4 или более раннюю версию? Это может быть проблемой. Должно быть ›=2.10.4 Также примерно сколько у вас таблиц, использующих HLlist, с каким количеством столбцов?   -  person cvogt    schedule 03.04.2014
comment
@cvogt Ну, в моей системе установлена ​​Scala 2.10.4, но как мне узнать, действительно ли Scala IDE использует ее? Я не нашел никаких настроек по этому поводу.   -  person Caballero    schedule 03.04.2014
comment
Извините, я не знаю, но это может быть причиной. Или большое количество столов. Slick 2.1 или 2.2, вероятно, переключится на создание классов для ›22 вместо HLists.   -  person cvogt    schedule 04.04.2014
comment
@cvogt на данный момент у меня есть только одна большая таблица в моем Tables.scala - это около 160 столбцов, и это вызывает все проблемы, о которых я упоминал выше.   -  person Caballero    schedule 04.04.2014
comment
3.0.3 final поставляется со Scala 2.10.4. Вы можете найти точную версию, просмотрев Eclipse Installation Details, или вы можете получить упрощенный номер, который можно скопировать и вставить, если вы перейдете в меню Scala/Report a Bug.   -  person Iulian Dragos    schedule 04.04.2014
comment
occurrence annotations, к сожалению, работает медленно и по умолчанию отключено. Я рекомендую отключить его и включать только тогда, когда он вам нужен (легко добавить ярлык, если по умолчанию его нет).   -  person Iulian Dragos    schedule 04.04.2014
comment
@IulianDragos Что такое аннотации вхождения и как их отключить?   -  person Caballero    schedule 04.04.2014
comment
Кабальеро, не могли бы вы попробовать, какое время компиляции вы получаете с sbt? И не могли бы вы выложить где-нибудь сгенерированный код, чтобы посмотреть?   -  person cvogt    schedule 04.04.2014
comment
Время компиляции @cvogt этого конкретного файла составляет примерно минуту: pastebin.com/BDhhPHXB . Это всего лишь несколько таблиц, вся база данных делает работу с ней невозможной.   -  person Caballero    schedule 04.04.2014
comment
@Caballero, проверьте эту страницу   -  person Iulian Dragos    schedule 04.04.2014


Ответы (1)


Что касается сбоев, мне удалось воспроизвести переполнение стека компилятора с вашим кодом ровно один раз, и я сообщил об ошибке: https://issues.scala-lang.org/browse/SI-8477 Увеличение размера стека java может помочь, но подозрительно, что это происходит спорадически.

Что касается зависаний и времени компиляции: я исследовал время компиляции с помощью Slick HLists, и хотя они стали намного лучше в Scala 2.10.4, они по-прежнему кажутся медленными (и на самом деле экспоненциальными), когда мы достигаем размеров в несколько сотен элементов. как и в случае с вашими таблицами, которые имеют несколько сотен столбцов. Это может быть ошибка компилятора Scala, или просто есть место для улучшения, или, может быть, в компиляторе ничего нельзя сделать. В лучшем случае Slick может обойти это, если мы найдем несколько способов выразить одно и то же, и один из них будет быстрее, чем существующий, но это предположение. Я создал свернутый пример кода и запросил улучшение компилятора: https://issues.scala-lang.org/browse/SI-8478

ОБНОВЛЕНИЕ: мы работаем над обходным решением для Slick. Еще не сделано. https://github.com/slick/slick/pull/749

person cvogt    schedule 06.04.2014
comment
Спасибо, скрестим пальцы, Scala 2.11 и Play 2.3 сделают это более терпимым. - person Caballero; 07.04.2014
comment
Добавлена ​​ссылка на PR, где мы работаем над обходным решением. - person cvogt; 07.04.2014