Какие классы проблем хороши / плохи в Clojure при решении проблем с Scala? - PullRequest
25 голосов
/ 01 октября 2011

Оба языка основаны на JVM с сильной поддержкой функционального программирования. Я знаю, что существует большой класс проблем, в которых оба языка могут предложить отличные решения. Я хотел бы знать, есть ли какие-то особые типы проблем, в которых функции Clojure дают ему заметное преимущество перед Scala и наоборот. В настоящее время мы выполняем большую часть нашей работы в Scala, но я хотел бы быть в поиске конкретных проблемных областей, где Clojure потенциально может предоставить лучшее решение.

Ответы [ 3 ]

38 голосов
/ 01 октября 2011

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

Я все еще думаю, что есть пара областей, где у каждой из них есть отличительные преимущества:

Конкретные сильные стороны Clojure по отношению к Scala:

  • Параллелизм - Clojure имеет уникальную и очень мощную поддержку параллелизма, встроенную в язык, основанную на новом способе мышления об идентификации объекта и изменчивом состоянии. Это было хорошо объяснено в других местах, поэтому я не буду здесь вдаваться в подробности, но это видео от Rich Hickey - отличное место для получения некоторой информации.
  • Метапрограммирование - Clojure - это гомоичный язык , который делает его особенно подходящим для макропрограммирования на основе макросов, создания DSL и генерации кода. В этом отношении она следует философии Lisp «код - данные».
  • Динамическая типизация - Clojure - это динамический язык со всеми преимуществами, обычно связанными с динамическими языками (меньше шаблонов, быстрое создание прототипов, очень лаконичный код и т. Д.)
  • Функциональное программирование - хотя вы можете использовать FP в Scala, Clojure определенно ощущается скорее как функциональный язык (тогда как Scala, вероятно, лучше всего описывать как мультипарадигму). Этот функциональный акцент в Clojure проявляется несколькими способами, например, встроенная поддержка отложенной оценки во всех основных библиотеках, все структуры данных являются неизменными, идиоматический Clojure «стиль кодирования» является функциональным, а не императивным / ООП.

Конкретные сильные стороны Скалы по отношению к Clojure:

  • Ориентация объекта - Scala концептуально ближе к Java и имеет лучшую поддержку подходов ООП в стиле Java. Хотя вы можете выполнять ООП в Clojure, это не очень удобно.
  • Синтаксическое знакомство - Синтаксис Scala, вероятно, будет более удобным для людей, пришедших с других не Лиспских языков
  • Статическая типизация - Scala имеет очень сложную систему статических типов. В ситуации, когда статическая типизация является преимуществом, у Scala будет четкое преимущество. Применяются обычные преимущества статической типизации: компилятор может отлавливать больше потенциальных ошибок типа, компилятор имеет больше возможностей для оптимизации производительности и т. Д.
  • Более зрелый - Scala работает чуть дольше, чем Clojure (2003 против 2007), и в результате имеет некоторые преимущества, которые можно ожидать от более зрелого языка (лучшая поддержка инструментов) немного большее сообщество)

Для полноты, есть пара отличительных преимуществ, которыми обладают оба языка:

  • Активные и инновационные сообщества - оба языка создали активное сообщество с широким кругом участников
  • Отличная совместимость с Java - оба языка могут легко использовать огромный массив библиотек и инструментов в экосистеме Java
  • Преимущества JVM - оба языка извлекают выгоду из всей замечательной инженерии в JVM (JIT-компилятор, алгоритмы сборки мусора, оптимизированная среда выполнения и т. Д.)
11 голосов
/ 01 октября 2011

Я предпочитаю использовать Clojure для написания DSL из-за макросистем Clojure. Кроме того, я предпочитаю Clojure для некоторых видов параллельных систем. Собственная поддержка Clojure для программной транзакционной памяти сильно отличается от актерской модели Scala.

Clojure не имеет большой поддержки объектно-ориентированного программирования. Для проектов, в которых объектно-ориентированная парадигма работает хорошо, или если вы будете в значительной степени полагаться на библиотеки / инфраструктуры Java, я предпочитаю Scala.

4 голосов
/ 01 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...