Подтвердить что ты не робот

Какие классы проблем Clojure хорошие/плохие при решении vis-a-vis Scala?

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

4b9b3361

Ответ 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-компилятор, алгоритмы сбора мусора, оптимизированная среда исполнения и т.д.).

Ответ 2

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

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

Ответ 3

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

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