Ответ 1
Оба языка чрезвычайно эффективны и подходят практически для всех доменов. Вы не можете ошибиться ни с одним из языков - я бы сказал, что они, вероятно, являются двумя наиболее перспективными языками в настоящее время.
Я все еще думаю, что есть пара областей, где каждый из них имеет отличительные преимущества:
Clojure особые сильные стороны относительно Scala:
- Concurrency - Clojure имеет уникальную и очень мощную поддержку concurrency, встроенную в язык, основанную на новом способе мышления об идентичности объекта и изменяемом состоянии. Это было очень хорошо объяснено в другом месте, поэтому я не буду особенно подробно останавливаться на этом, но этот видео Rich Hickey - отличное место, чтобы получить некоторые понимание.
- Метапрограммирование - Clojure - это homoiconic, что делает его особенно подходящим для метапрограммирования на основе макросов, Создание DSL и генерация кода. В этом отношении следует философия Lisp "код - данные".
- Динамическая типизация - Clojure - это динамический язык со всеми преимуществами, обычно связанными с динамическими языками (меньше шаблонов, быстрого прототипирования, очень сжатого кода и т.д.).
- Функциональное программирование - хотя вы можете делать FP в Scala, Clojure определенно больше похож на функциональный langauge (тогда как Scala, вероятно, лучше всего описывается как мультипарадигма). Этот функциональный акцент в Clojure проявляется несколькими способами, например, встроенный в ленивую поддержку оценки во всех основных библиотеках, все структуры данных неизменяемы, идиоматический Clojure "стиль кодирования" является функциональным, а не императивным/ООП.
Scala особые сильные стороны относительно Clojure:
- Ориентация объектов - Scala концептуально ближе к Java и имеет лучшую поддержку подходов OOP в стиле Java. Хотя вы можете делать ООП в Clojure, это не так удобно.
- Синтаксический синтаксис - Scala синтаксис, вероятно, будет более удобным для людей, приходящих с других языков Lisp
- Статическая типизация - Scala имеет очень сложную систему статического типа. В ситуации, когда статическая типизация является преимуществом, Scala будет иметь четкое преимущество. Применяются обычные преимущества статической типизации - компилятор может поймать больше потенциальных "типов" ошибок, у компилятора больше возможностей для оптимизации производительности и т.д.
- Более зрелый - Scala был примерно дольше, чем Clojure (2003 против 2007), и, как результат, некоторые из преимуществ, которые вы ожидаете от более зрелых язык (лучшая поддержка инструмента, немного более крупное сообщество).
Для полноты есть несколько отличительных преимуществ, которыми обладают оба языка:
- Активные и инновационные сообщества. На обоих языках создано активное сообщество с широким кругом участников.
- Отличная совместимость с Java - оба языка могут легко использовать огромный массив библиотек и инструментов в экосистеме Java.
- Преимущества JVM - оба языка выигрывают от всей большой инженерии в JVM (JIT-компилятор, алгоритмы сбора мусора, оптимизированная среда исполнения и т.д.).