Кто-нибудь использует Scala в гневе (и какой совет для Java-программиста)? [закрытый]
Я был программистом Java более 10 лет с тех пор, как начал работать с Smalltalk. По моему мнению, следующие большие языки , скорее всего, будут работать на вездесущей виртуальной машине Java. Я хотел бы воспользоваться преимуществами некоторых функций, которые Scala (среди других языков) имеет - case
операторы для иерархий классов, замыкания, вывода типа, поскольку это позволит мне написать более сжатый и ясный (я надеюсь) код. Немного ближе к Smalltalk!
Все то, что есть вторая натура в Java:
- здание с
ant
- развертывание приложений / библиотек в логические
jar
s - отличная поддержка инструментов IDE
- написание GUI (или наличие Swing GUI, говорящего с ним через какое-то удаленное управление?)
- сторонние библиотеки / фреймворки
- конфигурация (свойства,
XML
,Spring
и т.д.) - драйверы БД и т. д.
Меня беспокоит, что разница между игрой с каким-то домашним проектом и фактическим созданием переход к использованию его в гневе на рабочем месте - это немного чересчур.
-
Кто - нибудь совершил этот прыжок?
- стоило ли оно того? Какие уроки вы усвоили?
(очевидно, что люди используют Scala - но кто-нибудь строит реальные, за неимением лучшего слова, корпоративные приложения?)
8 ответов:
Я использовал Scala в нашей существующей инфраструктуре Java для запроса и обработки больших xml-документов. Было невозможно использовать стандартные библиотеки Java xml или не так легко.
У меня был соблазн использовать его для расчета производительности портфеля, но я уже закончил версию Java. Версию Scala было бы легче поддерживать, так как легче перевести формулы непосредственно в код.
Еще одна область, где вы можете проникнуть в Scala, - это многопоточность. У меня нет реальный опыт с этим, но, кажется, легче в Scala.
Суть в том, что пока не пытайтесь рассматривать его как замену Java, но используйте его там, где вы можете использовать его усиленно рядом с вашим существующим кодом Java.
Я использовал Intellij с плагином Scala в качестве IDE, но его еще нет. Это можно сделать в сочетании с плагином maven и консолью.
Я также программист Smalltalk и люблю использовать блоки кода в Scala. По сравнению с Java там меньше кода, но все же не так читаем, как Smalltalk код.
кстати, сообщество smalltalk снова растет благодаря платформе Seaside, поэтому вы можете вернуться
Вещи, которые я узнал или получил лучшее понимание:
- использование конструкторов
- неизменное понятие
- работа со списками и рекурсия
- функциональное программирование в целом
Так что да, я думаю, что это того стоит.
Жонас Бонер для одного: http://jonasboner.com/2009/01/30/slides-pragmatic-real-world-scala.html
Я в основном ударил всех по голове кодом Scala в нашем последнем проекте, так как мне надоело отлаживать те же проблемы, вызванные отсутствием понимания Hibernate + JBoss. (Это действительно удивительно. Разработчики, которые написали оригинальную систему, все еще там и все еще теряются в деталях гибернации.)
Что у нас было -> дурацкая система, построенная в основном с кучей безгосударственных EJB-бобов, связанных вместе с некоторым кодом hibernate, брошенным вместе с некоторым SQL. (Мы жерех, в основном. Производственный кластер довольно мал-всего около 100 машин.)
Что я сделал -> собрал различные службы на основе REST, где мы пересмотрели RPC между некоторыми серверами. Это делает все очень простым в коде, плюс, реализация публичного API в то, что было системой, где не уделялось никакого внимания зависимостям.
До сих пор мы начали развертывать код в экземплярах JBoss и из них без каких-либо реальных проблем. При первой попытке использовать Scala
До сих пор прошло около 5 месяцев с тех пор, как мы действительно начали. Мы провели несколько серьезных ревизий, и впоследствии отстали, но система гораздо, гораздо лучше протестирована, чем в прошлом. Итак, хотя у нас были некоторые плохие идеи, проникшие туда, когда мы действительно изучали систему, теперь мы смогли удалить их все и очень близко подойти к развертыванию производства. В общем, я бы сказал, что типичный чувак нуждается 2-3 месяца, чтобы перестать кодировать, как Java-программист, и "освоиться" с большинством стандартных библиотек.object
в Ява, ты, наверное, сморщишь нос. Но в остальном этого никто не замечал.Написание кода JDBC вместо системы ORM в основном выбросило почти все наши проблемы с производительностью. Скорость была на самом деле значительно лучше, но это было главным образом потому, что я мог делать все, что хотел, с меньшим количеством реального кода приложения.
Инструменты, которые я использую:
- Restlet : очень доволен этой структурой. Наш слой restlet является возмутительно тривиальный код.
- JDBC - > Примечание: мы изменили то, что было в основном в wiki
- XML (и вскоре, JSON)
[18]}buildr, maven на пару проектов, которые я не хотел конвертировать (плюс Nexus и Hudson). Я экспериментирую с sbt, который уже Очень хорош для проектов scala.У нас не было абсолютно никаких проблем с повторным использованием любой из старых библиотек java, но мы склонны упаковывать их в scala-fied слои. В основном только для того, чтобы пишите меньше кода.
И шаблонpimp my library , безусловно, самый важный, с которым следует ознакомиться. Шаблон "торт" хорош, но вы должны контролировать создание экземпляров, что иногда не совсем полезно. Я также использовал Guice в смешанной среде,не очень трудно, либо. Но я нахожу, что смешивание кода гораздо менее полезно, чем я первоначально думал, хотя это, вероятно, потому, что я заменяю много очень, очень плохого кода Java.
Моя среда редактирования в основном TextMate на OS X, но мы развертываем на серверах Linux.
P.S. Да, я знаю, что это около 4 месяцев, но все равно. Это актуально, особенно сейчас, когда у нас есть некоторый опыт.
Я добавил в Clojure программного обеспечения инфраструктуры, используемых в Кеплер научная деятельность миссии Центра. Прямо сейчас он предназначен для выполнения интерактивной отладки; запустите REPL, загрузите некоторые классы и выполните методы нерегулярно.
EDIT: OK, поэтому "загрузить некоторые классы и выполнить методы" - это неопределенно. Например, мы можем загрузить наши классы crud и затем выполнить метод для преобразования одного вида космического времени в другое.
user=> (import '(gov.nasa.kepler.hibernate.dr LogCrud)) user=> (def crud (new LogCrud)) #'user/crud user=> (def shortCadences (.longCadenceToShortCadence crud 0 2500)) user=> (prn shortCadences) #>Существуют и другие методы, которые могут быть вызывается для преобразования этого времени в другие форматы времени, которые могут быть полезны для отладки. Мы могли бы сделать инструменты командной строки, чтобы инкапсулировать всю эту функциональность, но в этом нет необходимости, так как все доступно из clojure.
Смотрите также: реальные примеры приложений Scala?
Я увидел это на связанных ссылках,и решил, что я подключусь, теперь мы на пару лет вперед.
Поддержка IDE значительно улучшилась, IntelliJ 11 имеет довольно хорошую поддержку Scala на данный момент. Подсветка синтаксиса работает отлично, хотя отладка все еще может немного раздражать.
Похоже, что SBT быстро заменяет maven или ant / ivy, и, слава богу, SBT гораздо легче работать, чем Maven, и подходит Scala гораздо лучше. IntelliJ for one также имеет консоль SBT, и в сочетании с интерактивной отладкой можно сделать отладку в Scala действительно очень быстро, хотя, честно говоря, с подсветкой синтаксиса теперь становится действительно хорошо, количество отладки, которое мне нужно, значительно уменьшается. Scala просто работает намного лучше, чем Java, и, похоже, приводит к гораздо менее подверженному ошибкам коду.Взаимодействие с базой данных все еще кажется немного витающим в воздухе, но есть несколько фреймворков, которые не плохи и могут заставить вас работать с базой данных так или иначе довольно быстро.
Сторонних библиотек и фреймворков на данный момент предостаточно, и, конечно, вы все еще можете использовать любую простую старую библиотеку Java сторонних разработчиков.
На этом этапе я задаюсь вопросом: почему бы вам не использовать Scala или другой язык JVM следующего поколения для проекта? И хотя простой ответ заключается в том, что многие разработчики просто не готовы иметь дело с Scala сегодня, честно говоря, им нужно получить свою голову из своих коллективных задниц и войти в игру, а также в компанию, которая обязывает это использование будет иметь большое значение для того, чтобы это произошло (все мы иногда нуждаемся в толчке, чтобы вернуться в игру). Кроме того, если вы занимаетесь какой-либо "корпоративной" или крупномасштабной разработкой, и вы не понимаете функционального программирования и не можете понять его, сделайте нам всем одолжение, отложите IDE или, не дай бог, vim, придерживайтесь сценариев или найдите новый карьерный путь.
На сегодняшний день существует множество компаний высокого профиля, использующих Scala, самой публичной из которых, вероятно, является Twitter. Они они также внесли некоторые из своих фреймворков в мир открытых исходных текстов.
Да, люди создают реальные "корпоративные" приложения с помощью Scala (и Clojure). Просто сделай это.
Конечно, люди также используют Smalltalk, так что если вам нравится Smalltalk, почему бы не использовать его?
Однажды я использовал его в "пробном гневе", чтобы загрузить несколько гигабайт данных (довольно легкая нагрузка для того, что мы делаем). Я надеялся, что он будет иметь более высокую производительность и меньшую нагрузку на память, чем PyPy. Это плохо сказалось на использовании памяти. Так ужасно, что я ужаснулась, смутилась, что заговорила об этом, и больше никогда не смотрела на него.