Pregunta

En los próximos 3 años voy a tener que trabajar con la JVM (requisito del proyecto) mediante una API muy específica de terceros. Ellos quieren Java, pero me han dado libertad de acción para alejarse de Java. Tenía la esperanza de que pudiéramos volver a la plataforma .NET para que pudiera desarrollar código en C #, siendo absolutamente enamorado de OCaml. NET ha sido golpeado por nuestros clientes. Es un no ir.

Me he vuelto a mirar, leer y hurgando programación blogs / foros tratando de entender qué idioma puede resultar atractivo para mí más allá: Scala o Clojure. Los que parecen tener la mayor base de la comunidad / ventilador. Que se vive con los lenguajes ML veo un montón de gente que compara Scala a ML. Sin embargo, hay algunas personas negativas reales al hacer esta comparación. Si Scala fue que cerca de ML mi productividad y la curva de aprendizaje se beneficiaría hacer este cambio.

El Internet está lleno de información errónea y se preguntan si estoy sufriendo de este tipo. No me gusta la sintaxis de Lisp (no me hagas daño!) Pero si Scala tiene las verrugas estoy leyendo (mala soporte IDE, en el marco de pruebas Unidad de flujo, problemas de rendimiento) Me pregunto si Clojure es el mejor opción. Quiero ser productivos fuera de la puerta, utilizando funciones como objetos de primera clase, y reducir al mínimo el dolor de concurrencia.

Así que de todos modos, antes de que paso demasiado tiempo en internet y no funciona ... tengo que cargar con la JVM, enfermo de Java y preguntándose dónde ir?

¿Fue útil?

Solución

Ha considerado maravilloso? Creo que no es tan funcional como Scala / Clojure, pero es sin duda mucho más funcional que Java **. En general, puedo conseguir el mismo trabajo realizado en Groovy con alrededor del 50% del código que me llevaría en Java.

Esto se debe a Groovy es sintácticamente similar a Java y proporciona un acceso transparente a las bibliotecas JDK, pero la adición de una gran cantidad de características del lenguaje (cierres, meta-programación, propiedades) y tipado dinámico elimina casi todo el repetitivo asociado con Java la programación.

** Me refiero funcional en el sentido de 'programación funcional' en lugar de 'trabajar correctamente'

Otros consejos

En mi opinión, tanto Clojure y Scala no tienen un gran apoyo IDE, si eso es realmente importante para usted. Dicho esto, esto es lo que puede cobrar a mi lectura y experiencia.

pros de Scala

  • Más rápido que Clojure gracias a una escritura más estática
  • Más cerca de ML (sintaxis, la programación de tipo dirigida)
  • Más grande API estándar (API de Clojure crecer muy lentamente, porque quieren asegurarse de que encontrar las mejores frases hechas antes de hacerlos públicos. Dicho esto, Clojure todavía tiene APIs suplementarios semi-oficiales)
  • Una mejor integración prácticas con el conjunto de herramientas Java típica (Clojure sigue haciendo algunas opciones, por lo menos firmemente establecido todavía en este sentido)
  • Mayor de Clojure (pero Clojure está construida en la parte superior de una muy antigua y probada núcleo: Lisp)
  • Las personas dicen que tiene posibilidades de llegar a la corriente principal , mientras que ellos no decir lo mismo de Clojure

pros de Clojure

  • Increíblemente fácil, rápido y derecho de concurrencia gracias a STM basadas en MVCC y otros mecanismos de concurrencia
  • La inmutabilidad de forma predeterminada ayuda a hacer lo correcto primera
  • API estándar más estable
    • Cuando las cosas cambian, por lo general usted no tiene que volver a escribir el código existente
    • (colecciones de Scala están siendo rehecho de nuevo por 2,8)
    • (También he leído en alguna parte que es de conocimiento común que la aplicación de Actores de Scala necesita un replanteo y volver a escribir.)
  • más fácil de aprender (lenguaje pequeño, siendo una (muy limpio) Lisp)
  • Una oportunidad para que se desarrolle por aprender algo diferente
  • el rendimiento de Clojure sólo va a mejorar con el tiempo; todavía hay espacio para agradables optimizaciones en el compilador
  • atar de Scala para Java siente más limitante que de Clojure (interacciones entre Scala de y sistemas de tipo estático de Java). A veces se puede decir lo mismo de Clojure (Apoyo de la orientación a objetos no es una relación 1: 1 en forma, pero el soporte para este pronto se pondrá mejor)
  • Rich Hickey tiene un don para la toma de decisiones que ponen Clojure en la posición de tener características principales técnicas que serán adoptadas por otras lenguas en las décadas siguientes. Y también tiene un don para explicarlos . Así que los utilizan hoy en día en Clojure, o esperar para usarlos en otro idioma en cierto número de años. :)

En concurrencia distribuido

Si se distribuyen sus necesidades de concurrencia, Clojure todavía no tiene nada de esto a menos que se ejecuta en la parte superior de terracota o algo similar, en cuyo caso podrás utilizar todas sus características de concurrencia. Si lo hace, el resultado final será con una experiencia de concurrencia distribuye mejor que con los actores de Scala, la OMI.

Conclusión

OMI Scala trata de hacer todo, y tiene éxito en hacer la mayor parte de ella. Clojure no trata de la misma cosa, pero lo que se centra en es más que suficiente y tiene éxito tan bien que la mayoría de la gente saber realmente clojure no querrían volver a otra cosa. Divulgación : mi preferencia personal va, por supuesto, a Clojure. Espero haber sido capaz de ser objetivo en lo que escribí.

Voy a abordar los puntos que ha planteado sobre Scala.

  • apoyo IDE :

    Scala no tiene el mismo nivel de apoyo o IDE Java tiene - o, para el caso, que F # debe tener con VS10.

    Una vez dicho esto, que tiene uno de los mejores (tal vez incluso la mejor?) IDE apoya en JVM, fuera de Java. En este momento NetBeans es lo suficientemente bueno, y la gente ha dicho consistentemente IDEA es aún mejor (de oídas). El plug-in de Eclipse es inestable sin embargo.

    Pero usted ha mencionado un rango de 3 años, y el soporte IDE para Scala debe ser mucho mayor una vez Scala 2.8 está fuera, ya que proporcionará algún compilador soporte para entornos de desarrollo. No hay fecha de lanzamiento definida, pero parece estar dentro de los próximos seis meses, tal vez tres. Y el plug-in de Eclipse será actualizada junto con él.

  • En marco de pruebas de unidad de flujo

    Sí, si nos referimos es vibrante, evolucionando y bien apoyado, en lugar de estancamiento y abandonado. ScalaTest, Ficha técnica y ScalaCheck son los marcos de alta calidad, compatibles entre sí, y son compatibles con otros marcos de Java y las bibliotecas, tales como JUnit y JMock.

    Las infraestructuras de prueba, de hecho, son casi un cartel del niño de lo que es posible con Scala.

    EDIT: Scala tiene soporte de prueba de unidad básica en su biblioteca estándar (scala.testing.SUnit). Sin embargo, dado que han aparecido muchas alternativas superiores, apoyados activamente y gratuitas, esto ha quedado obsoleto y es probable que no sea parte de la biblioteca se incluye con Scala 2.8.

  • temas Rendimiento

    Estoy al tanto de ninguna, aparte del hecho de que se puede escribir código pésimo, al igual que con cualquier otra lengua. La gente no se utilizan para la programación funcional a menudo hacer cosas que no son eficientes, tales como no usar la recursión de cola, o la concatenación de las listas, y el cambio de paradigma que permite Scala presenta esa a la luz.

    En cualquier caso, se puede escribir código Scala tan rápido como código Java (aún más rápido con algunas características próximas). Y se puede escribir código Scala con características funcionales casi tan rápido como el código de Java.

Francamente, conseguir otro trabajo.

Si va a pasar los próximos tres años se siente incómodo en lo que está haciendo, usted debe considerar la búsqueda de alternativas más atractivas.

Incluso si logras conseguir un idioma que desee, si usted es parte de un equipo (que supongo que lo son) el resto del equipo no le guste ese idioma. Si el resto de ellos código en Java y que en " rellene el en blanco" lenguaje de programación, entonces pueden surgir problemas.

No es tan malo después de todo.

Reacciona con su jefe, le hizo saber cómo se siente. Empezar a buscar alternativas y tener un agradable y profesional "permiso".

No hay razón por la que no puede todavía tener una buena relación con su jefe actual. Si, finalmente, tienen un nuevo proyecto para .NET puede volver. Hablar de que también con ellos. Dejar sus puertas abiertas.

No es realmente un juego de suma cero, aprender a todos!
PS: Yo voto por Clojure , creo que es lo más divertido!

Debe considerarse afortunado que puede utilizar la JVM, debido a que la JVM se está volviendo más y más popular para los lenguajes de programación alternativos que Java.

Además de Java que hay maravilloso , Scala , Clojure (un dialecto Lisp en la JVM), JRuby (rubí en la JVM), Jython (Python en la JVM), Jaskell (Haskell en el JVM), Ventilador (se ejecuta en la JVM, así como el CLR .NET) y mucho más, y no hay también un OCaml en Java , OCaml que se ejecuta en la JVM.

Por lo tanto, hay un montón de opciones en lenguajes de programación en la JVM, desde puramente funcional a secuencias de comandos simples y lenguajes orientados a objetos anvanced.

Herramienta de apoyo para la Scala y Clojure puede ser inmaduro, pero está mejorando constantemente.

Ya que le gusta F #, a continuación, Scala es más probable que su mejor opción. Yo digo que probarlo y formar su propia opinión - puede encontrarse con que las cosas que la gente quejarse de cosas que no le interesan, o cosas que puede evitar

.

No se olvide jruby y observe que un IDE es opcional para no Java

Yo creo que hay una gran situación. ¿Cuántas personas padecen permiso para elegir el lenguaje de implementación? Con todo lo disponible para la JVM que su entorno elegido no es mucho de una restricción.

  • No necesitará un gran apoyo IDE en los idiomas menos detallado
  • En un lenguaje tan poderoso como el rubí, sin declaraciones de tipo, usted no necesita un IDE en absoluto
  • Scala fue desarrollado específicamente para curar las prolijas-java-blues
  • considerarse afortunado de que tiene tres años de trabajo en fila: -)
  • Clojure podría ser divertido y proporciona patrones de diseño de concurrencia de fallos funcionales

Noop? http://code.google.com/p/noop/ (experimental aunque)

En términos de apoyo IDE y otras dudas que está teniendo, Clojure no hace nada mejor que Scala. Y para una persona con ML / F # fondo (o en general que, en sentido estricto, con tipos estáticos idiomas FP), que sin duda encontrará Scala mucho más cerca de lo que estamos acostumbrados.

Si te gusta ML te pueden gustar CAL que es más o menos 98 por Haskell la JVM.

Es de alta calidad y muy estable, y tiene un buen soporte IDE de Eclipse, pero lamentablemente ya no está bajo desarrollo activo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top