Как стать более продуктивным с помощью Scala? (Инструменты, IDE)
Какие инструменты вы используете для работы с Scala? Для моей фазы обучения я использовал Scala REPL и взломал некоторый код с помощью TextMate и скомпилировал его с CLI scalac
. Но по мере роста объемов проектов требуются гораздо более сложные инструменты.
Я знаю плагины Scala для Elipse, IntelliJ и Netbeans, и я пробовал их все. Лучший из них - IMHO IntelliJ, но все еще далек от совершенства.
Основная проблема, которую я испытываю, - это отсутствие автоматического завершения. Как не очень продвинутый кодер Scala, я до сих пор не знаю всего стандартного API и должен регулярно переключаться между Scaladoc и IDE. Это похоже на "убийство производительности". Но все они не могут автоматически завершить аргументы метода. (Я слышал, что аргументы метода не включены в скомпилированный код Scala, но как насчет прикрепления источника к автозавершению?)
Еще одна очень неприятная проблема - процесс сборки. Я использую Maven для создания моих проектов Scala и управления их зависимостями. Но тем не менее, я должен выполнить полную перестройку, чтобы проверить мои изменения. Возможно, я испорчен инкрементной перестройкой Eclipses, доступной в мире Java, но для меня это очень большая проблема.
Мне очень нравится Scala, и я чувствую себя более продуктивным во время кодирования, но отсутствие софистических инструментов позволяет мне чувствовать себя менее продуктивным. И оба, похоже, отменяют себя.
Итак, в чем мой вопрос? Я сомневаюсь, что каждый программист Scala использует добрые ol vim
или emacs
вместе с scalac
для выполнения своей работы. Итак, какие инструменты вы используете? Какие рабочие процессы вы разработали для ускорения разработки с помощью языка Scala?
Изменить
Уточнение того, что я использую при автозавершении аргументов метода.
val myList = "foo" :: "all your base" :: Nil
myList.partition(_.length > 3)
В приведенном выше коде IntelliJ не предоставит мне информацию, которую раздел требует, чтобы я передал функцию () => Boolean
. На самом деле IntelliJ не проверяет этот контраст. Я могу передать String
, и IntelliJ не укажет мою ошибку, пока не сделаю компиляцию.
Ответы
Ответ 1
scalac
Ознакомьтесь с параметрами командной строки для Scalac.
-
-deprecation
-
-Xprint:all
: следить за прогрессом вашего кода на этапах компилятора, очень полезно, чтобы увидеть, какие импликации применяются.
-
-help
/-X' /
-Y` список всех параметров.
Последние ночные сборки скаляса включают в себя файл завершения bash, который упрощает их использование.
IntelliJ IDEA
Выполнение метода с помощью Javadoc (CTRL - Space, CTRL - Q/Apple-J) Снимок экрана
Информация о параметрах для примера в вопросе (CTRL - P) Снимок экрана
Завершение аргумента метода (CTRL - SHIFT - Space). Снимок экрана
Вам нужно, чтобы источник или javadocs были связаны с зависимостями в IntelliJ, чтобы увидеть Javadoc.
В настоящее время он не выделяет ошибки типа "на лету", поскольку в сложном коде все еще слишком много ложных срабатываний. Это происходит, однако.
Инструмент простой сборки
SBT сохраняет резидентный компилятор и анализирует зависимости между классами, чтобы допускать инкрементную перекомпиляцию. Он также может отслеживать изменения исходных файлов и автоматически запускать повторную компиляцию и/или выполнение теста.
- Непрерывная компиляция:
>~compile
- Непрерывная компиляция + тест:
~test-quick
У меня есть проект SBT и IntelliJ, сконфигурированный в http://github.com/scalaz/scalaz, вы можете использовать это как ссылку.
Ответ 2
Я использую Scala ежедневно в течение последних шести месяцев. Я все еще использую vim (и ctags, чтобы найти материал), и Maven для сборки. Я получил хороший пробег из JRebel при работе над Lift веб-приложений - он будет перезаряжать изменения "на лету" без перезагрузки сервера.
Я потратил некоторое время на поиск в IDE, но он быстро удручающе. Сначала я действительно пропустил множество функций Eclipse, но после периода настройки я не думаю, что сейчас значительно менее эффективен.
Я слышал некоторые неурядицы, что NetBeans является текущим чемпионом для Scala IDE, но я не пробовал его из первых рук.
Ответ 3
Один простой способ - использовать fsc, автономный компилятор. Он поддерживает кеши информации, а стандартный компилятор будет разговаривать с fsc
(работает как демон) и использовать свою кешированную информацию во время компиляции, тем самым ускоряя цикл компиляции.
Ответ 4
Вот мой ответ на аналогичный поток. После предоставления часа Ensime. Я просто не могу не понять. Я должен сказать это очень, очень хорошо написано для пакета Emacs.
Ответ 5
Я боюсь, что вам нужно ждать, пока Scala станет твердым.
У меня была точно такая же проблема с Java десять лет назад. Это было еще хуже.
Я также пробовал их всех. Для Scala 2.7.7 побеждает IntelliJ, но для Scala 2.8.0-SNAPSHOT Eclipse не так уж плохо.
Подождите половину года после выхода 2.8.0 и повторите проверку. Он должен стать терпимым.
Ответ 6
С Scala 2.8, см. this для получения лучшей производительности из Maven.
Ответ 7
Вы также должны дать Netbeans 6.8 попробовать с ночной конструкцией Scala. Я очень доволен программированием Scala с этой IDE. Для построения я иногда также использую Ant. Самое лучшее в плагине NB Scala заключается в том, что он работает быстро и завершение кода работает безупречно.
В примере, который вы указали: NB дает мне эту ошибку
![alt text]()
код-завершение:
![alt text]()
Ответ 8
Eclipse Scala IDE теперь довольно зрелая (начиная с версии 3.0).