15

Pasé mucho tiempo buscando un lenguaje funcional que pueda acceder sin problemas al código heredado de Java (código Weka). El autocompletado de los métodos de clase Java importados sería excelente. Voy a presentar mis impresiones, corrígeme si me equivoco.¿Qué lenguajes funcionales de JVM son compatibles con IDE? (IDE: IDEA, Netbeans, Eclipse o similar)

Yeti es muy atractivo para mí porque es simple y ML -como, pero no he podido configurar un buen IDE para ello. Tampoco sé si el idioma en sí ya se puede usar en la vida real.

maravilloso, JRuby y Jython parece muy maduro, pero no son realmente funcional. Scala es maduro pero también es OO y al menos en Netbeans (y Eclipse si no recuerdo mal) tiene errores.

"OCaML-Java" es OO también y no viene listo para usar (3 o 4 proyectos por separado). Supongo que en IDEs estaría aún menos preparado para usar.

Parece que Jaskell está muerto.

Clojure parece maduro y funciona muy bien en IntelliJ IDEA (La Clojure plug-in), pero no estoy seguro de que quiero escribir más de 2 parens por línea mientras que la codificación.

SISC y ABCL que no lo intenté. Creo que no hay soporte IDE.

CAL (o Quark ... Blah ...) el lenguaje conduce a un sitio SAP y después de eso mi paciencia en busca de lenguajes JVM funcionales terminó.

Hay preguntas similares pero no exhaustivas. Por ejemplo: Which Functional programming language offers best support in Eclipse?

es un poco de lenguaje funcional JVM que es capaz de llamar directamente a las clases de Java que falta? Si Yeti tenía soporte IDE como Clojure tiene (en IDEA), sería perfecto para mí.

Gracias

EDITAR -----------------------------------

I podría usar Clojure + Scala en Intellij IDEA. Ejemplo de interoperabilidad:

código

Scala código

package a 
class ScalaMain { 
    def test = { 
    "testing!" 
    } 
} 

Clojure

(import '(a ScalaMain)) ;' 
(def scalainstance (new ScalaMain)) 
(print "printing: " (. scalainstance test)) 

espectacular!

+0

Tutorial para Scala + IDEA: http://confluence.jetbrains.net/display/SCA/Getting+Started+with+IntelliJ+IDEA+Scala+Plugin –

Respuesta

9

Scala + eclipse IDE (última versión) http://www.scala-ide.org/ parece estar mejorando cada vez más. Lo mismo para el complemento IntellijIDEA. Hay muchas personas/compañías que se están desarrollando con Scala ... No creo que todos usen solo editores de texto.

Creo que la mayoría de los lenguajes de FP en este momento son Scala (multi-paradigma) y Clojure (funcional puro) ¿Qué hay de malo en que Scala sea OO?

Puede esperar que nuevos lenguajes como Kotlin y Ceilán también tengan características funcionales, pero también serán OO, así que creo que su única opción ahora es entre Scala y Clojure.

De su lista usted extraña lenguaje Fantom. También tiene características funcionales, pero creo que carece de soporte IDE (o al menos no se actualiza a las últimas versiones)

ACTUALIZACIÓN: Ahora hay un IDE basado en eclipse para el lenguaje de programación Fantom que se ve muy bien. Puede encontrarlo aquí: http://www.xored.com/products/f4/

+0

vi Fantom sólo después de la publicación. El primer inconveniente es la sintaxis similar a Java. –

+1

La sintaxis similar a Java se aplica también a Scala. El creador de Clojure, Rich Hickey, tiene una fuerte opinión en contra del modelo OO, usted podría estar interesado en [escucharlo] (http: //www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey). – skuro

+0

@skuro Ok, la sintaxis de Fantom y Scala son similares, pero no entiendo el punto de Fantom en absoluto. Una diferencia que pude encontrar es sobre trabajos: http://www.indeed.com/jobtrends?q=Scala%2CClojure%2CJython%2Cfantom%2CJRuby&l= –

5

Clojure es excelente cuando se trata de interoperabilidad Java + funcional + con ventajas de lisp. Aunque el resto de IDE admite clojure, emacs funciona muy bien, excepto que toma tiempo aprender y acostumbrarse a la forma de codificación de emacs.

1

Frege tiene ahora también (aún muy básico) eclipse plugin.

+0

¿Podría comparar Frege y Yeti por favor? Si entendí, Frege es puro. Tal vez viene con todas las complicaciones que no me gustan en Haskell. –

+1

@davips - Bueno, Yeti es estricto y no puro, Frege no es estricto y puro. No puedo decir más aquí debido a las restricciones de espacio y no saber bien el Yeti. En cuanto a las complicaciones de Haskell, es posible que desee comprobar las breves diferencias Haskell/Frege http://code.google.com/p/frege/wiki/DifferencesFregeHaskell, tal vez encuentre sus puntos dirigidos, si no puede enviarme un correo (encuentre mi dirección de correo electrónico en la página del proyecto de frege). – Ingo

2

La historia de la interoperabilidad de Clojure es fantástica. Una gran victoria con clojure es que todas sus colecciones implementan las interfaces que vienen en la API de colecciones de Java, no es necesario adaptar las colecciones de Clojure ni copiarlas en las colecciones de Java para pasarlas a código Java, siempre que el código de Java no lo haga modificar sus contenidos Lo contrario también es cierto, las colecciones de Java se pueden utilizar con muchas de las funciones de Clojure que son útiles como mapreducefilter etc ... Conozco a alguien que abandonó Scala por Clojure por este motivo, entre otros.

También es fácil escribir el código de interoperabilidad de Java en Clojure que utiliza menos pares de los que usaría en el código equivalente de Java.

p. Ej.

blondie.callMe().callMe().any().any().time(); 

(-> blondie .callMe .callMe .any .any .time) 

Toma un tiempo para acostumbrarse, pero si lo piensas bien, no es tan diferente. Compare la siguiente línea de código Java v.s. Clojure, creo que entenderás ambas cosas.

System.out.println("Hello World"); 

(println "Hello World") 

Descontando la calificación de System.out y el punto y coma adicional en el ejemplo de Java, la única diferencia real es que el paren ahora está en frente de la llamada a la función. ¡Charla loca!

Es diferente, pero puede no ser tan malo como crees, y si lo intentas, puedes encontrar beneficios convincentes en el idioma. Si desea soporte de IDE, consulte LaClojure en IntelliJ o Enclojure de Netbeans. Sé que Enclojure ofrece un buen soporte de finalización, lo que creo que en realidad solo es útil si se trata de mucho Java. Actuar sin una red en Clojure funciona bien.

Cuestiones relacionadas