Тут недавно возник такой вопрос - а чем, собственно, по существу отличаются Scala и Clojure?
У меня такие соображения:
- static vs dynamic typing
- компилятор найдет больше ошибок
- но зато писать дольше - за это время можно и юнит-тест наговнякать
- ориентированность на concurrency (иммутабельные структуры, STM) - в Clojure из коробки, в Scala через Akka
- ленивые вычисления vs ?
- большой, сложный язык (классы, объекты, типы, наследование, микс ФП и ООП, сидит сразу на всех стульях - Scala) vs маленький, компактный, открытый, композабельный (данные, функции, неймспейсы, только ФП - Clojure)
- принципиальная академичность (Scala) vs прагматичность (Clojure)
- расширяемость - макросы в Clojure, в Scala что есть, то есть
- примат данных (Clojure) vs примат системы типов (Scala)
- единый семантически богатый формат обмена данными (edn) vs выбери сам
- eval и там, и там (в Scala используется редко)
- REPL и там, и там
- долгая промышленная разработка, большая команда vs быстрое прототипирование
- ни то, ни то не отдать [junior] developers в энтерпрайз.
- многоплатформенность (Clojure переносится на js, .net, python) vs только jvm
- оба потихоньку где-то используются, но killer apps ни у кого нет
- interop в clojure хороший, в скале вроде неплохой (но коллекции надо конвертировать)
- про производительность Scala я слышал много хорошего by default, а в Clojure надо спускаться к java-примитивам в узких местах
Прошу высказаться, что вам кажется важным, поправить если я где ошибся, и уточнить пропуски по Scala, если знаете.
А вообще Clojure
побеждает по всем фронтам.