Оба языка чрезвычайно способны и подходят практически для всех доменов. Вы не можете особенно ошибиться с любым языком - я бы зашел так далеко, чтобы сказать, что они, вероятно, являются двумя наиболее перспективными языками в настоящее время.
Я все еще думаю, что есть пара областей, где у каждой из них есть отличительные преимущества:
Конкретные сильные стороны 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-компилятор, алгоритмы сборки мусора, оптимизированная среда выполнения и т. Д.)