Какие задачи вы решали на Scala?

223 views
Skip to first unread message

Alexey Zasimov

unread,
Mar 5, 2012, 9:33:53 AM3/5/12
to scala-enthus...@googlegroups.com
Привет!

Поделитесь опытом, какие задачи успешно решались на Scala вами? Где можно посмотреть эти решения?

Vasil Remeniuk

unread,
Mar 5, 2012, 9:42:27 AM3/5/12
to scala-enthus...@googlegroups.com
Привет! 

В моем случае, большая часть решений проприетарная, входящая с большие системы, написанные на java. Сл-но в отрыве от над-систем показать их не удастся. То немного, что можно посмотреть, я выкладываю на github (https://github.com/remeniuk), или отписываюсь в блоге (http://blog.vasilrem.com/tag/scala).

В целом, (если это проект не на Scala целиком), на Scala, чаше всего, я реализую внутренние DSL (тут очень помогает SBT, который можно подкрутить, чтобы для вашего DSL сразу было и окружение его выполнения на лету), и компоненты, требующие высокой конкурентности (простой около-dataflow на Akka или Scalaz, актеры из Akka).

Vasil Remeniuk

unread,
Mar 5, 2012, 9:47:00 AM3/5/12
to scala-enthus...@googlegroups.com
В целом, на scala-стеке решались теже задачи, что [могли бы] и на java, но с большим удовольствием, значительно меньшим количеством кода, и меньшее время :)
--
-----

Twitter: twitter.com/remeniuk
Blog: vasilrem.com
Github: github.com/remeniuk
Scala Enthusiasts Belarus: scala.by

Alexey Zasimov

unread,
Mar 5, 2012, 10:10:25 AM3/5/12
to scala-enthus...@googlegroups.com
Сам больше пишу на Питоне и Хаскеле. Слышал о Scale много интересного, в частности то, что язык хорошо взаимодействует с Java.

Хотелось бы понять сильные и слабые стороны языка. Например у Питона хорошее развивающееся сообщество, с производительностью неплохо дело обстоит, и программистов сейчас на этом языке миллион =) 

А вот причин для использования Scala в проекте найти не могу. Можете ли пробежаться по основным характеристикам языка, с точки зрения практика?
 
Заранее прошу прощения за "размазанный" вопрос, в большей степени меня, конечно, интересует сравнение: Cpp vs Scala, Java vs Scala, Python vs Scala, Haskell vs Scala и так далее =)

понедельник, 5 марта 2012 г. 18:47:00 UTC+4 пользователь Vasil Remeniuk написал:
В целом, на scala-стеке решались теже задачи, что [могли бы] и на java, но с большим удовольствием, значительно меньшим количеством кода, и меньшее время :)

Vasil Remeniuk

unread,
Mar 6, 2012, 3:27:53 AM3/6/12
to scala-enthus...@googlegroups.com
>> А вот причин для использования Scala в проекте найти не могу. Можете ли пробежаться по основным характеристикам языка, с точки зрения практика?

Самый простой use-case - вам нужна платформа JVM, для решения определенных задач (вы хотите написать быстрый, NIO-сервер на Netty, поюзать, через родной API, Hadoop, или рашить любую другую сложную задачу, требующую мощности, ресурсов и библиотек JVM). 

Реальные альтернативы на JVM - Java, Scala, Groovy и Clojure. Java - дефолтный вариант, с лучшей поддержкой IDE, но вызывающий приступы тошноты, и острой боли в запястьях у тех, , кто пришел из языков с хоть какой поддержкой ФП, удобной работой с коллекциями, динамическими типами (или выведением типов), миксинами, и т.п. Надо смотреть правде в глаза - Java сильно устаревший язык (посмотрите, хотя бы, насколько опережает джаву C#). 
Groovy - язык с динамичкской типизацией и слабым перфомансом. Планировался, как альтернатива RoR на JVM. План провалился.
Clojure - для ценителей lisp. 

Итого, остается Scala: 

0. Перфоманс, аналогичный Java (см. бенчмарки Google)
1. Мощная система типов (слабее, чем у Haskell, сравнима с F#, и значительно круче, чем у всего мейнстрима). Живой пример крутизны системы типов scala, - возможность реализовать ее средствами union-type (одна из киллер-фич другого java-убийцы, Ceylon'a). При этом, в scala вполне пристойный вывод типов, сл-но, те, кто пришел из динамических языков, страдают от аннотаций типов не так сильно;
2. Сильная функциональаная составляющая (повзоляющиая писать "чистый", не простерлив себе ногу). См. scalaz - библиотека, позволяющая писать на scala, в чистом, haskell-подобном, стиле;
3. Имплициты (ститически-типизированный duck-typing), динамическое расширение функциональности библиотек, и мн. др.
4. Мультинаследование/миксины, и CDI из коробки
5. Удобные коллекции, и паттерн-матчинг

Минусы:

1. Поддержка в IDE, в сравнении с Java, намного слабее (особенно, дебаггер);
2. Если писать в pure стиле, генерится много коротко-живущего мусора (который, правда, эффективно подчищается современными GC);
3. Родные immutable коллекции достаточно медленные;
4. SBT, дефолтовый scala-билдтул, вызывает у новичков неподдельный ужас. Он по-настоящему сложный. Конечно, можно пользоваться вместо него javaвскими maven или gradle (что, с успехом, многие и делают), но рано или поздно, устав от тормознутости компилятора, неудобности работы с тестами, и пр., многие всё-равно переползают на SBT (с инкрементальной компиляцией, расширяемостью, continuous compilation/reload/whatever). 
5. Мультипарадигмальность - и плюс, и минус. Scala настолько гибкая, что единого, хорошего стиля, не существует, и если его жестко не ввести в рамках одного проекта, будет хаос.

Oleg Aleshko

unread,
Mar 6, 2012, 3:54:51 AM3/6/12
to scala-enthus...@googlegroups.com
 Новичку  (не испорченому мавеном) я бы рекомендовал sbt,  но и при зависимости от мавена не все потеряно.
В мавене+идее инкрементальная компиляция таки есть, жребел работает, тесты работают как надо (specs2, maven-surefire-plugin, JUnitRunner, specs2-spring), а дебаг не нужен.
В остальном согласен.
Reply all
Reply to author
Forward
0 new messages