2013-08-23 5 views
37

Я достигаю точки, где GUI-кодирование с объектно-ориентированным шаблоном MVC Backbone.js становится довольно сложным и рассматривает другие парадигмы. MDV, FRP, ECS, о мой.Как Elm сравнивается с ClojureScript?

Как Elm по сравнению с ClojureScript? Где они пересекаются?

Оба языка очень отличаются от JS, которые скомпилированы для JS. Я понимаю, что Elm - это язык функционального реактивного программирования (FRP). ClojureScript не обязательно FRP, но вы можете сделать FRP с ним. Elm компилируется с Haskell и ClojureScript с JVM, поэтому оба эти требования являются дополнительными требованиями для магазина Node.

Возможно, это просто сводится к Clojure vs Haskell.

+1

Этот вопрос может дать некоторую помощь: http://stackoverflow.com/q/15490053/90874 – thSoft

ответ

36

Оба заставляют вас использовать более декларативный/функциональный стиль программирования, чем чистый JS. ClojureScript больше похож на замену JS, тогда как Elm больше похожа на замену всего веб-стека разработки (HTML/CSS/JS).

Других отличия:

  • Elm синтаксис намного более Haskell, как
  • ClojureScript гораздо ближе к традиционному синтаксису Лиспа
  • Elm высоко оптимизированный для изменяющихся во время значений («сигналы» Эльм)
  • ClojureScript более зрелый, и вы можете найти для него сладостные инструменты для разработки (плагины Eclipse, LightTable и т. Д.)
  • Elm статически типизирован, ClojureScript динамически типичен ed

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

+3

Это пропустит самую большую разницу: типы. ClojureScript динамически типизирован, что очень гибко, но Elm статично типизирован, менее гибкий, но устраняет почти все неперехваченные ошибки времени выполнения. – jmite

+0

@jmite хорошая точка, я обновил свой ответ. Хотя я бы сказал, что это не самая большая разница, она по-прежнему большая. – hoosierEE

7

Просто обновить это для 2017.

Вязов больше не является стеклопластик, который ушел несколько релизов назад в пользу Вязов архитектуры.

Основная победа Elm заключается в том, что у нее есть система статического типа, которая позволяет компилятору делать много утверждений о правильности программы во время компиляции. Например, вы знаете, что никогда не будет времени, когда case case не распространяется на конкретный случай. Или что HTML из функции view создаст событие, которое обновление не знает, как с этим бороться.

Другие преимущества Elm

  • Большие Сообщения об ошибках
  • пакеты применяются семантические управления версиями
  • пакеты и инструменты, как правило, имеют очень очевидные имена
1

Они оба FRP (функциональная реактивная Программирование) в их основе - это означает, что у них есть дерево, сопоставленное с DOM, и только визуализировать этот компонент или детей, которые нужно визуализировать.(как кто-то указывал ранее, Elm отказался от принципов FRP, чтобы преследовать их собственную идею о них)

Они оба скомпилированы в JavaScript (хотя с библиотекой ClojureScript/Om или реагентом вы можете получить фактические объекты React в js) white Вяз делает свое дело. Мне не нравится, что Elm должен быть установлен через npm, хотя czapliki, как я понимаю, работает над автономным установщиком)

Elm лучше, на мой взгляд, потому что он управляет государством немного более удобным для кодера, и он очень приятный (как уже упоминалось -) синтаксис типа Haskell, а также вы перемещаете RuntimeErrors в CompileTimeErrors, который гораздо приятнее как разработчик, плюс он имеет более удобную поддержку кода.

С другой стороны, в cljs есть библиотеки лотов - некоторые из них, как я упоминал, возвращают фактические компоненты React (cljs/Om соответствуют 1: 1 с R.js LifeCycle) - другие просто уважают менталитет FRP и LifeCycle, не становясь обремененными им. Возможно, вам стоит взглянуть на Om/Next, у которого есть метод GraphQL для вызова данных из конечной точки и сбросил параметры async, которые использовались в простых cljs/Om.

Это вопрос вкуса быть честным, но я бы предпочел Элм (написав на обоих языках). Если вы все же делаете с cljs, убедитесь, что у вас хорошая библиотека и не делайте ничего в vanilla cljs, иначе вам будет жаль, если вы хотите поддерживать 5k + LOC. (Посмотрите Fulcro, Reagent, om, OmNext, hoplon и т. д.)

Смежные вопросы