Подтвердить что ты не робот

Кто-нибудь использует Scala в гневе (и какой совет для Java-программиста)?

Я был программистом на Java более 10 лет с момента запуска с Smalltalk. По моему мнению, следующие большие языки, вероятно, будут такими, которые будут работать на вездесущей виртуальной машине Java. Я хотел бы воспользоваться преимуществами некоторых функций, которые Scala (среди других языков) имеет инструкции case для иерархии классов, закрытия, вывода типа, поскольку это позволит мне писать более кратким и понятным (я надеюсь) код. Немного ближе к Smalltalk!

Все, что является второстепенным в Java:

  • Здание с ant
  • развертывание приложений/библиотек в логические jar s
  • Большая поддержка инструментов IDE
  • Написание графических интерфейсов (или наличие графического интерфейса Swing с ним связано с помощью какого-то удаленного взаимодействия)
  • Сторонние библиотеки/рамки
  • Конфигурация (свойства, XML, Spring и т.д.)
  • Драйверы DB и т.д.

Я обеспокоен тем, что разница между игрой вокруг с каким-то домашним проектом и фактическим переворотом его использования в гневе на рабочем месте слишком много.

  • Кто-нибудь сделал этот прыжок?
  • Стоило ли этого?
  • Какие уроки вы узнали?

(Очевидно, что люди используют Scala - но кто-нибудь, кто строит фактическое, из-за лучшего слова, Предприятие?)

4b9b3361

Ответ 1

Я использовал Scala в нашей существующей инфраструктуре Java для запросов и обработки больших XML-документов. Не удалось использовать стандартные библиотеки Java xml или не так легко.

У меня возникло соблазн использовать его для расчета производительности портфеля, но уже закончил версию Java. Версия Scala была бы проще в обслуживании, так как было бы проще перевести формулы непосредственно в код.

Другая область, где вы можете прокрасться в Scala, - это многопоточность. Не имейте реального опыта с этим, но, похоже, в Scala проще.

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

Я использовал Intellij с плагином Scala как IDE, но он еще не существует. Он работает в сочетании с плагином maven и консолью.

Я также программист Smalltalk и люблю использовать кодовые блоки в Scala. По сравнению с Java меньше кода, но все же не так читается, как код Smalltalk.

BTW, сообщество smalltalk растет снова благодаря каркасу Seaside, поэтому вы можете вернуться

То, что я узнал или получил лучшее понимание:

  • использование конструкторов
  • неизменяемое понятие
  • работа со списками и рекурсией
  • функциональное программирование вообще

Итак, я думаю, что это того стоит.

Ответ 3

Я в основном ударил всех по голове с помощью кода Scala в нашем последнем проекте, так как мне надоело отлаживать те же проблемы, вызванные отсутствием понимания Hibernate + JBoss. (На самом деле это потрясающе. Разработчики, которые написали оригинальную систему, все еще там и все еще теряются в подробностях Hibernate.)

Что у нас было → дурацкая система, построенная в основном с кучей безстоящих EJB beans проводных вместе с некоторым спящим кодом, брошенным вместе с некоторым SQL. (Мы - ASP, в основном. Производственный кластер довольно небольшой → всего около 100 машин.)

Что я сделал → собрал различные службы на основе REST, где мы переопределили RPC между некоторыми серверами. Это упрощает кодирование кода, а также реализует публичный API в том, что было системой, в которой не было обращено внимания на зависимости.

До сих пор мы начали внедрять код в экземпляры JBoss и из него без реальных проблем. В первый раз, когда вы пытаетесь использовать Scala object в Java, вы, вероятно, будете морщить свой нос. Но в остальном никто не заметил.

До сих пор прошло уже около 5 месяцев с тех пор, как мы действительно начали. Мы сделали пару серьезных изменений, а затем отстали, но система намного лучше тестировалась, чем в прошлом. Таким образом, хотя у нас были некоторые плохие идеи, пробирались туда, пока мы действительно изучали систему, теперь мы смогли удалить их все и очень близко к развертыванию производства. В общем, я бы сказал, что типичному чуваку требуется 2-3 месяца, чтобы прекратить кодирование, как программист на Java, и получить "знакомый" с большинством стандартных библиотек.

Написание кода JDBC вместо системы ORM в основном выкидывало почти все наши проблемы с производительностью. Скорость была на самом деле значительно лучше, но это было главным образом потому, что я смог сделать все, что хотел, с менее реальным кодом приложения.

Инструменты, которые я использую:

  • Restlet: Очень рад этой структуре. Наш рестайлинг-слой является чрезмерно тривиальным кодом.
  • JDBC → примечание: мы изменили то, что было в основном там, в wiki
  • XML (и вскоре JSON)
  • buildr, maven на пару проектов, которые я не хотел конвертировать (плюс Nexus и Hudson). Я экспериментирую с sbt, который уже очень хорош для проектов Scala.

У нас не было абсолютно никаких проблем с повторным использованием какой-либо из старых java-библиотек, но мы склонны обертывать их в scala -fied layers. В основном просто написать меньше кода.

И сутенер моей библиотеки, безусловно, самый важный, с которым нужно познакомиться. Шаблон "торт" хорош, но вам нужно контролировать экземпляр, что иногда не очень полезно. Я также использовал Guice в смешанной среде, а не очень сложно. Но я считаю, что код микширования менее полезен, чем я думал изначально, хотя это, вероятно, потому, что я заменяю много действительно, действительно плохого кода Java.

Моя среда редактирования - это в основном TextMate для OS X, но мы развертываем на серверах Linux.

P.S. Да, я знаю, что это около 4 месяцев, но что угодно. Это актуально, особенно сейчас, когда у нас есть некоторый опыт.

Ответ 4

Я добавил clojure в инфраструктуру программного обеспечения, используемую в Kepler центр исследований миссий. Прямо сейчас он там для интерактивной отладки; запускать REPL, загружать некоторые классы и выполнять методы специальным образом.

EDIT: ОК, поэтому "загрузить некоторые классы и выполнить методы" является неопределенным. Например, мы можем загрузить наши классы 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.

Ответ 6

Я видел это на связанных ссылках, и решил, что я буду звонить, теперь мы через пару лет по дороге.

Поддержка IDE значительно улучшилась, IntelliJ 11 имеет довольно хорошую поддержку Scala на этом этапе. Выделение синтаксиса отлично работает, хотя отладка все еще может быть немного раздражающей.

SBT выглядит так быстро, заменяя maven или ant/ivy, и, слава богу, SBT намного проще работать, чем Maven, и лучше подходит Scala. IntelliJ для одного также имеет консоль SBT, и в сочетании с интерактивной отладкой может сделать отладку в Scala очень быстрым, но, честно говоря, с подсветкой синтаксиса, которая теперь становится действительно хорошей, объем отладки, который я нахожу, мне очень нужен снижается. Scala просто течет намного лучше, чем Java, и, похоже, приводит к значительно меньшему количеству ошибок, подверженных ошибкам.

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

На данный момент существуют сторонние библиотеки и фреймворки, и, конечно же, вы все равно можете использовать любую обычную старую библиотеку сторонних разработчиков Java.

В этот момент мне остается задавать вопрос: почему бы вам не использовать Scala или другой JVM-язык следующего поколения для проекта? И хотя простой ответ заключается в том, что многие разработчики просто не готовы сегодня разбираться с Scala, честно говоря, им нужно получить свою голову от своих коллективных ослов и попасть в игру, и компания, обязавшая ее использовать, пойдёт долгий путь к тому, чтобы это произошло (всем нам нужно толкать иногда, чтобы вернуться в игру). Кроме того, если вы занимаетесь какой-либо "корпоративной" или крупномасштабной разработкой, и вы не понимаете функционального программирования и не можете понять это, сделайте нам все одолжение, положите вашу среду IDE или бог- запретить vim, придерживаться сценариев или найти новую карьеру.

Сегодня существует много компаний с высоким рейтингом, использующих Scala, наиболее популярным из которых, вероятно, является Twitter. Они также внесли некоторые из своих рамок в мир с открытым исходным кодом.

Ответ 7

Да, люди создают реальные "Enterprise" приложения с помощью Scala (и Clojure). Просто сделайте это.

Конечно, люди также используют Smalltalk, поэтому, если вам нравится Smalltalk, почему бы не использовать это?

Ответ 8

Я использовал его в "пробном гневе" один раз, чтобы загрузить несколько гигабайт данных (довольно небольшая рабочая нагрузка для того, что мы делаем). Я надеялся, что он будет иметь более высокую производительность и меньше накладных расходов памяти, чем PyPy. Это не удалось BADLY, по использованию памяти. Так ужасно я был в ужасе, смущен, чтобы поговорить с ним и никогда больше не смотрел на него.