scala clojure

¿Qué clase de problemas es bueno/malo para resolver Clojure con respecto a Scala?



(3)

Ambos idiomas son extremadamente capaces y adecuados para casi todos los dominios. En particular, no puede equivocarse con ninguno de los dos idiomas, me atrevería a decir que probablemente sean los dos idiomas más prometedores del momento.

Todavía creo que hay un par de áreas en las que cada una tiene ventajas distintivas:

Las fortalezas particulares de Clojure en relación con Scala:

  • Concurrencia : Clojure tiene un soporte de concurrencia único y muy potente integrado en el lenguaje, basado en una nueva forma de pensar acerca de la identidad del objeto y el estado mutable. Esto se ha explicado muy bien en otros lugares, por lo que no voy a entrar en detalles aquí, pero este video de Rich Hickey es un gran lugar para obtener información.
  • Metaprogramación : Clojure es un homoiconic que lo hace especialmente adecuado para la metaprogramación basada en macros, la creación de DSL y la generación de código. Sigue la filosofía de Lisp "El código es datos" a este respecto.
  • Escritura dinámica : Clojure es un lenguaje dinámico, con todas las ventajas que generalmente se asocian con lenguajes dinámicos (menos repetitivo, prototipado rápido, código muy conciso, etc.)
  • Programación funcional : aunque puedes hacer FP en Scala, Clojure definitivamente se siente más como un lenguaje funcional (mientras que Scala probablemente se describe mejor como multi-paradigma). Este énfasis funcional en Clojure se manifiesta de varias maneras, por ejemplo, construido en un soporte de evaluación perezoso en todas las bibliotecas principales, todas las estructuras de datos son inmutables, el "estilo de codificación" idiomático de Clojure es funcional más que imperativo / OOP.

Las fortalezas particulares de Scala en relación con Clojure:

  • Orientación a objetos : Scala está conceptualmente más cerca de Java y tiene mejor soporte para los enfoques OOP de estilo Java. Si bien puedes hacer OOP en Clojure, no es un ajuste tan cómodo.
  • Familiaridad sintáctica : la sintaxis de Scala probablemente sea más cómoda para las personas que vienen de otros idiomas que no son Lisp
  • Escritura estática : Scala tiene un sistema de tipo estático muy sofisticado. En situaciones donde la escritura estática es ventajosa, Scala tendrá una ventaja clara. Se aplican las ventajas habituales de la escritura estática: el compilador puede detectar más posibles errores de "tipo", el compilador tiene más oportunidades de realizar optimizaciones de rendimiento, etc.
  • Más maduro : Scala ha existido un poco más que Clojure (2003 vs. 2007) y, como resultado, tiene algunos de los beneficios que se esperan de un lenguaje más maduro (mejor soporte de herramientas, comunidad un poco más grande)

Para completar, hay un par de ventajas distintivas que ambos idiomas comparten:

  • Comunidades activas e innovadoras : ambos idiomas han creado una comunidad activa con una amplia variedad de colaboradores
  • Excelente interoperabilidad con Java : ambos lenguajes pueden hacer uso fácilmente de la enorme variedad de bibliotecas y herramientas en el ecosistema de Java
  • Ventajas de JVM : ambos lenguajes se benefician de toda la gran ingeniería en JVM (compilador JIT, algoritmos de recolección de basura, entorno de ejecución optimizado, etc.)

Ambos lenguajes están basados ​​en JVM con un fuerte soporte para la programación funcional. Soy consciente de que habría una gran cantidad de problemas en los que ambos idiomas brindarán excelentes soluciones. Lo que me gustaría saber es si hay algún tipo de problema en particular en el que las características de Clojure le den una ventaja notable a Scala y viceversa. En este momento realizamos una gran parte de nuestro trabajo en Scala, pero me gustaría estar atento a los espacios de problemas particulares en los que Clojure puede ofrecer una mejor solución.


Prefiero usar Clojure para escribir DSL debido al sistema de macros de Clojure. Además, prefiero Clojure para ciertos tipos de sistemas concurrentes. El soporte nativo de Clojure para la memoria transaccional de software es bastante diferente al modelo de actor de Scala.

Clojure no tiene un gran soporte para la programación orientada a objetos. Para los proyectos en los que el paradigma orientado a objetos funciona bien, o confiará mucho en las bibliotecas / marcos de trabajo de Java, prefiero Scala.


Una de las mejores cosas de Clojure y Scala es que puede usar ambos en el mismo lugar, con un mínimo de fricción. Solo sugeriría hacer la mayor parte de la interoperabilidad en Clojure, ya que creo que tiene una ventaja allí.

Solo intente ambos, y vea qué problemas e idiomas encajan. Siempre puede interoperar entre Java, Scala y Clojure en el mismo sistema con mucha facilidad.