Eclipse Scala IDE — от мертвого осла уши…

Scala — это изумительный язык программирования, которым я наслаждался года 4 назад. Я, наверное, был его фанатом: покупал книги и курсы на Coursera, использовал в pet- и продуктивных проектах et cetera, et cetera, et cetera.

Scala открыл для меня увлекательный мир функционального программирования, вернул во времена студенчества со «сферическими задачами в вакууме» от Martin'a Odersky…

Но вот он уже года два как Scala для меня мертва. Виной этому…

Нет, не Java 8 и даже, скорее всего, не SBT с его загадочной инкрементальной компиляцией, а Eclipse Scala IDE.

К Scala, как к экосистеме, у меня есть только две претензии: непомерное время компиляции и отвратительный tool'инг.

Если со временем компиляции я еще худо бедно могу мириться, то tool'инг…

Но обо всем по порядку.

Мы, силою обстоятельств, плотно (и навечно?) прикованы к Eclipse IDE. Как-то так случилось, что те проекты, которые нужны для рабочего процесса есть только под Eclipse и их нет (и не будет) под IntelliJ IDEA (например, тот же BIRT).

Да, никто не запрещает мне для pet project'ов использовать Scala и IntelliJ IDEA, но это уже не так интересно и гораздо приятнее развлекаться с IntelliJ IDEA и Clojure (я, конечно же, говорю о Cursive).

Что же не так с Eclipse Scala IDE?


В двух словах — это самая глючная, нестабильная и загадочная «хрень» которой мне приходилось пользоваться для разработки в XXI веке. Попросту говоря ты никогда не знаешь будет ли твой scala code им компилироваться, как долго, что произойдет при обновлении Scala IDE, Scala, Eclipse'a, crash'е workspace'a и почему твой код не будет компилироваться у коллеги, и в какие бубны нужно будет бить чтобы это все снова заработало.

Здесь надо сделать два уточнения: я говорю о смешанных Java+Scala проектах и Scala 2.11.x (это версия на которой мы «сдались» и решили дальше историю со Scala не продолжать).

Возможно, Eclipse Scala IDE идеален для «pure Scala» проектов, но для сложных и смешанных как наш — это ужас и кошмар почище атомной войны.

Пример вчерашнего дня. Два компьютера с Eclipse Oxygen.2 (4.7.2) с OSX.

package com.XXX
import java.util.{List=>JList}
import scala.collection.JavaConversions._
...
abstract class REScalaVariablesConfiguration {
	def calculateVariables (runtimeObject: GBObject): JList[Variable] = {
	    val result = for {(name, result) <- variables(runtimeObject)
	    				  if result != null
	      			 } yield result match {
	      case x:LWDecimal => new NumberVariable(name, x.getJavaDecimal, runtimeObject)
	      case x:Number => new NumberVariable(name, x, runtimeObject)
	      case x:String => new StringVariable(name, x, runtimeObject)
	      case x:Boolean => new BooleanVariable(name, x, runtimeObject)
	      case x:LWDate => new DateVariable(name, x.getJavaDate, runtimeObject)
	      case _ => throw new IllegalStateException("Not supported result type for rule engine variable: " + name)
	    }
	    new ArrayList[Variable](result)
	}
	
	protected def variables(runtimeObject: GBObject): Map[String, Any]
}

Идентичные версии всего (кроме JVM и версий OSX) получаем при компиляции Eclipse:

  1. SBT builder crashed while compiling. The error message is 'Could not create directory /XYZ/lib/print'.
  2. Error in Scala compiler: REScalaVariablesConfiguration

Слегка подправив исходный код (при этом «родным» SBT он компилируется без проблем)

package com.XXX
import scala.collection.JavaConversions._
...
abstract class REScalaVariablesConfiguration {
	def calculateVariables (runtimeObject: GBObject): java.util.List[Variable] = {
...

Мне удается избавиться от ошибок, но лишь на одном из MacBook'ов.

Такое волшебство происходит постоянно. Например, у меня был проект, где autocompletion приводил к crash'у всего проекта (но только если в файлы была ссылка на scala code).

Коллеги, это снова у меня что-то идет не так или у Вас подобный опыт общения со Scala?
Оцените Ваш опыт использования Scala в реальных проектах

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться публикацией
Ой, у вас баннер убежал!

Ну, и что?
Реклама
Комментарии 41
  • +4

    Eclipse вообще очень странная IDE. Насчет глючности даже не знаю, мне хватило странности чтобы очень быстро отказаться от нее.

    • +1
      Спорно. Порядка 10 лет использую Eclipse. То ли привык к глюкам, то ли мне после Visual Studio .Net он раем казался :)

      Т.е. да бывают какие-то «заезды» но если я встретил 3-4 bug'a eclipse Java compiler'a за 10+ лет с ним, то со Scala IDE/SBT… Ну, вы читали…
      • +1
        если только VS.Net была 10 летней давности, какой нибудь бета версии
        • –2
          Не-не-не. Не надо здесь этот Ваш новодел. Последнюю VS.NET которую я мучал была в 2005 году. Она была так себе. Eclipse ее как тот тузик…
          • 0

            Она и сейчас такая (2017 Community Edition, C#). Элементарных же вещей нету. Хоткеи явно какой-то псих придумал. Скажите, кому вообще взбрело в голову делать их «многоступенчатыми»? Для такой часто используемой операции, как комментирование/раскомментирование кода? Да ещё и разные?! Почему нет хоткея для копирования/дублирования строк? Чёрт возьми, почему элементарно нельзя перейти к методу базового класса, переопределённому в текущем классе? Посмотреть список реализаций интерфейса? Почему поиск по файлу такой убогий? И ещё вагон и маленькая тележка подобных несуразностей.

            • 0
              я отвечал на это:
              То ли привык к глюкам, то ли мне после Visual Studio .Net он раем казался :)

              Насчет хоткеев — дело привычки. Community, да, линз не хватает, да обрезан еще какой функционал, про Starter вообще не стоит говорить. Но на Community можно поставить Resharper и все выше перечисленное как-то уходит.
              Чистая студия — за последние несколько лет — ни одного вылета. А за последний год даже с Resharper'ом. Глюков, таких, как даже в IDEA я не встречал. Даже Rider не может похвастаться стабильностью, хотя вроде как уже полностью от Jetbrains. В последнее время пишу исключительно на Scala, использую IDEA и Pro и Community. Всё устраивает, но привык к функционалу VS+R#, и к стабильности, которой, как мне кажется у продуктов MS больше.
              • 0
                Насчет хоткеев — дело привычки.

                К сожалению, нет. Без сторонних плагинов нельзя сделать включение/выключение комментария по хоткею. А именно это чаще всего и нужно: закомментировать одно и раскомментировать другое. По дефолту же нужно ставить пальцы в раскоряку и одной рукой это точно не сделать (ну, если вы не осьминог).


                Но на Community можно поставить Resharper

                Resharper тоже не бесплатный вообще-то и через 30 дней превращается в тыкву. Хотя не спорю, с ним удобнее на порядок. Но в основном за счёт всяческой кодогенерации и рефакторинга типа вытащить метод там, перенести поле туда, а тут поменять порядок и тип аргументов. Пока выстраивал архитектуру приложения, он сильно мне помог. И то, всё равно всех потребностей он не закрывает (навигация по коду, например).


                Что касается стабильности: на днях буквально столкнулся с багом «mscorlib recursive resource lookup bug», пришлось переставлять студию с потерей всех плагинов и настроек. Конечно, подозреваю, это какое-то кривое взаимодействие с плагинами (стек трейc проходил через кишки Codinion, да и пока экспериентировал с плагинами, много их ставил и удалял, пока не остановился на достаточном для себя минимуме), но как бы название намекает. Соль в том, что в сообщении об ошибке так и пишется — «обнаружил баг бесконечной рекурсии». Ну так, блин, ну отключи ты тогда этот плагин, зачем рушишь всю систему без возможности восстановления (только переустановка)?

                • 0
                  Потому что этот баг — это баг в коде который обрабатывает ошибки. Что-то вроде Double Fault. Такие баги практически невозможно нормально обработать…
                  • 0

                    Это же не баг вида «что-то произошло, но что — хрен знает». Чётко обозначена проблема в самом заголовке окна информационного сообщения: «баг с рекурсией». То есть, худо-бедно, но ошибка обрабатывается. Только почему после этого нельзя штатно (пусть и принудительно) закрыть студию? Вместо этого «Программа не отвечает и Windows её закроет, бла-бла». Triple Fault что ли? Вот тебе и стабильность.

                    • 0
                      Обрабатывается другая ошибка. Исходная не может быть обработана потому что обработчик ошибок повис в рекурсии.
          • 0
            Я наткнулся на сносящую крышу особенность, когда пытался приспособить Eclipse как среду для компиляции arm-gcc (для микроконтроллеров). Собственно, это был уже готовый пакет на базе эклипса, скачанный с официального сайта производителя микроконтроллеров.
            Так вот, эклипс каким-то образом кэширует исходники! То есть когда вы редактируете код, вы редактируете файлы не там где они у вас на диске лежат, а где-то в другом месте, известном одному эклипсу! Поскольку у меня кроме эклипса было еще несколько инструментов, работающих с исходным кодом, я очень быстро удивился: как же так, вот оно изменение, вот сохраняю файл — а в моих исходниках на диске остался старый код.
            Этого оказалось достаточно чтобы распрощаться с этой средой разработки навсегда.
            • 0
              Это скорее вопрос рук тех «орлов» кто писал plugin который Вы использовали. Т.е. по большому счету к Eclipse JDT у меня претензий нет (хотелось бы больше, но жить можно), а вот со Scala все просто отвратительно (на наших сценариях). К слову, похожие на Ваши «глюки» я с какой-то периодичностью отлавливаю для Eclipse Clojure plugin'a (Counterclockwise) — т.е. ты вроде редактируешь ф-ию, обновляешь ее через repl, а эффекта 0, но возможно дело в другом. Эта проблема случайная…
              • 0
                Если я правильно помню, то в идее тоже сразу редактируется не файлы на диске, а некоторое внутреннее представление. Рассказывали в каком-то докладе что основной паттерн для иде — огромное количество маленьких файлов. И для диска это плохо. И внутри используется один гигантский файл — кэш. Так что у эклипса явно другая проблема — изменения не скидываются на диск. В идее сброс на диск производится не только при сохранении файла, но и просто при смене фокуса с иде на что-то другое. А при обратной фокусировке диск сканируется на наличие изменений.
          • +3
            Невольно хочется спросить, вы пробовали Scala плагин для IDEA?
            • 0
              Нет, так как для pet-projects мне что-то уже Scala не хочется, а для работы IDEA не применим пока :(

              А как там? Все хорошо?
              • +1
                а для работы IDEA не применим пока

                Мда, сочувствую, а в чем проблема-то? Если что есть бесплатная Community версия IDEA, где плагин для Скалы работает
                • 0
                  Это не только (и столько) про деньги, как про те проекты на которые мы завязаны и которым нет аналогов под IDEA. Например, Eclipse BIRT и пр. (таких штук 5-6). Они развиваются и мы ими более менее довольны…
                  • 0
                    А кто мешает писать код в IDEA, а, например, BIRT отчеты редактировать в Eclipse?
                    • 0
                      Лень и наличие коллег которым нужно будет делать то же самое :) Там же не только BIRT. 5-6 подобных Eclipse based projects
                      • +1
                        На одном из моих прошлых проектов несколько человек спокойно пользовались разными средами разработки (NetBeans, Idea, Eclipse) на разных ОС (разные дистрибутивы Linux и разные версии Windows), и чем пользоваться каждый выбирал сам. Так что коллеги не обязаны пользоваться теми же инструментами.
            • +5
              Как-то все же не очень верно, на мой взгляд, делать выводы о языке из-за глючности используемой IDE.
              • 0
                Scala очень классный язык, но это ж как в том анекдоте про русалку «а как!?». Ну да, все отлично, но он мне нужен в прикладной плоскости (для решения рабочих и не очень задач), а здесь я каждый раз отгребаю от инструментов. Самое в этом отвратительное, что ты не понимаешь, что произошло, как долго ты будешь бороть очередной глюк incremental SBT compiler'a (я все таки очень сильно подозреваю, что дело в нем) и что потом со всем этим делать коллегам.
                • +4
                  Автор жалуется на экосистему. Согласитесь, что сколько нибудь масштабная разработка невозможна без IDE и отсутствие комфортной и доступной IDE это существенный аргумент при выборе технологии разработки.
                  • 0
                    Конечно невозможна. Но автор взял самый фиговый вариант из всех возможных, а выводы делает не про свой выбор, а про экосистему…
                    • 0
                      Согласен с предыдущим оратором. Это, как и любое другое мнение, субъективно. Переименовал для однозначности, что все плохо только в Scala Eclipse мире.
                • –2
                  Scala сам по себе умирает уже. Не взлетела.
                  • 0
                    Как язык — Scala очень хороша. Что значит «не взлетела». Это не main stream, но у него есть своя ниша и она очень комфортная. Мы бы с превеликим удовольствием писали на Scala если бы это было технически возможно. Я просто такого «шаманства» давно не видел :) см. выше…
                    • 0

                      Почему такие мысли? Язык очень приятный, для него написаны библиотеки высочайшего класса для работы с сетью, в Java такого пока нет. И все это активно развивается.

                      • 0
                        … для него написаны библиотеки высочайшего класса для работы с сетью, в Java такого пока нет

                        Интересное заключение. Вы не могли бы привести пример этих самых библиотек, для которых которых, как вы говорите, нет аналогов в Java?
                        • 0

                          Akka и Twitter Finagle. Конечно, у них есть java api, но из Java их использовать значительно неудобнее.

                          • 0

                            И обе основаны на Netty.
                            Akka как-то трудно назвать "библиотекой для работы с сетью", это огромный набор инструментов. Но да, Lightbend сейчас гарантирует что api для Java будет не хуже чем для Scala, поэтому вполне можно работать и из Java.
                            На счет Twitter Finagle сложно что-то сказать, с ней не работал, но она не выглядит с виду чем-то невероятным, чего нельзя найти в Java. Тот же Armeria вполне может быть аналогом.

                            • 0

                              Akka отказались от Netty, но не суть. Важные инновации, которые есть в технологиях Scala — асинхронность, ретраи, таймауты, отмена запросов, мультиплексирование, умные балансеры.


                              И еще один немаловажный момент — многие популярные библиотеки разваливаются под нагрузкой в 2-3 сотни запросов в секунду — из-за неэффективных алгоритмов, непродуманного использования памяти, неудачного логгирования. Эти нет.

                    • –1
                      Мартышка к старости слаба глазами стала;
                      А у людей она слыхала,
                      Что это зло еще не так большой руки:
                      Лишь стоит завести Очки.
                      Очков с полдюжины себе она достала;
                      Вертит Очками так и сяк:
                      То к темю их прижмет, то их на хвост нанижет,
                      То их понюхает, то их полижет;
                      Очки не действуют никак.
                      • +2
                        Scala IDE откровенно плоха, согласен. К тому же это мертвый проект.

                        Dotty IDE будет судя по всему на Visual Studio Code
                        • +1
                          Заголовок надо бы переименовать на «Eclipse Scala IDE — от мертвого осла уши…». C Intellij IDEA работается хорошо.
                        • 0
                          Мы, силою обстоятельств, плотно (и навечно?) прикованы к Eclipse IDE.

                          похоже вас всё устраивает, иначе, я думаю, вы нашли бы другую работу, без привязки к Eclipse IDE и с Scala.

                          • +1

                            так а о чем статья то вообще?

                            • +3
                              о том что жизнь — боль у кого-то. жмём плечами и возвращаемся к своим делам.
                            • +1

                              Недостаточно вы Скалу любите :)
                              Я видел энтузиастов, которые вообще текстовым редактором (Sublime, например) пользуются. В том числе люди, непосредсвенно причастные к разработке хардкорных Scala библиотек (cats, например).
                              Я лично (и большинство коллег) пользуюсь IDEA. Там своих глюков хватает. Иногда не может правильно определить возвращаемый тип, например. Такое случается при использовании сторонних библиотек со сложными типами и кучей implicits (тот же cats). Но мне Intellij как платформа очень нравится. Плюсов куда больше, чем минусов. Да и на Scala я и сам в текстовом редакторе готов писать, если б с IDE совсем дела были плохи.

                              • 0
                                Я IDE не осилил. Один коллега пользовался Eclipse, вроде как вполне успешно (сейчас он уже в другую фирму перебрался). Но в основном все в команде пользуются коммерческой IDEA со Scala-плугином, и очень довольны. Там даже паттерны работы из Type Driven Development работают, такие как подставление доступной в контексте переменной по типу, даже с учетом имплиситов.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое