clojurescript - and - vim cancel edit
¿Cómo se compara Elm con ClojureScript? (3)
Estoy llegando a un punto en el que la codificación de la GUI con el patrón MVC orientado a objetos Backbone.js se está volviendo bastante complejo, y mirando a otros paradigmas. MDV , FRP , ECS , oh mi.
¿Cómo se compara Elm con ClojureScript ? ¿Dónde se superponen?
Ambos son idiomas muy diferentes de JS que compilan a JS. Entiendo que Elm es un lenguaje de programación reactiva funcional (FRP). ClojureScript no es necesariamente FRP, pero puede hacer FRP con él. Elm compila con Haskell y ClojureScript con JVM, por lo que ambos son requisitos adicionales para una tienda Node.
Tal vez solo se reduce a Clojure vs Haskell .
Ambos son FRP (Programación Reactiva Funcional) en su núcleo, lo que significa que tienen un árbol mapeado en el DOM y solo representan el componente o los niños que necesitan representarse. (Como alguien señaló anteriormente, Elm ha abandonado los principios de FRP para buscar su propia idea de ellos)
Ambos compilan en JavaScript (aunque con la biblioteca ClojureScript / Om o Reactivo puedes obtener objetos React reales en tu js) mientras que Elm hace lo suyo. No me gusta que Elm tenga que instalarse a través de npm aunque czapliki, como yo entiendo, está trabajando en un instalador independiente)
Elm es más agradable en mi opinión porque maneja el estado un poco más amigable con los codificadores y tiene una muy buena (como se mencionó) sintaxis similar a Haskell y también mueves los RuntimeErrors a CompileTimeErrors, que es mucho más agradable como desarrollador - además, tiene una facilidad de mantenimiento del código más sencilla.
Por otro lado, cljs tiene bibliotecas de lotsa, algunas de ellas como he mencionado devuelven componentes de reacción reales (cljs / Om coincide con 1: 1 con R.js LifeCycle); otros simplemente respetan la mentalidad de FRP y LifeCycle sin verse obstaculizado por ello. Puede que desee buscar en Om / Next con una forma GraphQL de solicitar datos de un punto final y haber descartado las chas de asincronización que se usaron en cljs / Om simples.
Es una cuestión de gusto ser honesto, pero yo preferiría Elm (habiendo escrito en ambos idiomas). Sin embargo, si sigues con clj, asegúrate de obtener una buena biblioteca y no hagas cosas en cljs de vanilla o lo lamentarás cuando quieras mantener 5k + LOC. (Busca Fulcro, Reagent, om, OmNext, hoplon, etc.)
Ambos te obligan a utilizar un estilo de programación más declarativo / funcional que el JS puro. ClojureScript es más como un reemplazo JS, mientras que Elm es más como un reemplazo para toda la pila de desarrollo web (HTML / CSS / JS).
Otras diferencias
- La sintaxis de Elm es mucho más parecida a Haskell
- ClojureScript está mucho más cerca de la sintaxis Lisp tradicional
- Elm está altamente optimizado para valores variables en el tiempo ("señales" en Elm)
- ClojureScript es más maduro y puedes encontrar algunas herramientas de desarrollo para él (plug-ins de Eclipse, LightTable, etc.)
- Elm está tipificado estáticamente, ClojureScript se escribe de forma dinámica
Espero que esto ayude. Todavía estoy aprendiendo ambos idiomas, así que puede haberme perdido algo.
Solo para actualizar esto para 2017.
Elm ya no es FRP, que se fue hace unos pocos lanzamientos a favor de la arquitectura Elm.
La gran victoria de Elm es que tiene un sistema de tipo estático que permite al compilador hacer muchas afirmaciones sobre la corrección del programa en tiempo de compilación. Por ejemplo, usted sabe con certeza que nunca habrá un momento en que una declaración de caso no cubra un caso específico. O que el HTML de la función de vista producirá un evento que la actualización no sabe cómo manejar.
Otras ventajas de Elm
- Grandes mensajes de error
- Los paquetes han aplicado versiones semánticas
- Los paquetes y herramientas tienden a tener nombres realmente obvios