scala - lenguaje - haskell for jvm
Scala y Clojure ambos en un solo proyecto. (5)
Estoy buscando una guía para la programación políglota en estos dos idiomas.
Sé que la interoperabilidad entre ellos es posible , ya que ambos se ejecutan en la misma máquina virtual de Java, y ambos se compilaron con el mismo bytecode. Pero hay algunos engorrosos:
- ¿Puedo usar sbt para compilar el código de Clojure?
- ¿Puedo usar leiningen para compilar el código Scala?
(Sí, sí, ya sé que puedo conectar el jar de un idioma para proyectar en otro idioma).
- ¿Hay algunas bibliotecas que podrían salvarme de escribir código de interoperabilidad repetitivo ?
- y así
Entonces, la pregunta es ¿Cómo configurar el desarrollo políglota en Scala y Clojure?
Como alternativa experta: gradle puede compilar ambos idiomas.
El rasgo Dynamic
de Scala fue creado para permitir una integración más fácil con idiomas tipificados dinámicamente, pero tendrá que escribir su propio reenviador. Además, tendrás que volver a escribirlo con Scala 2.10, ya que se ha cambiado un poco. Quizás, de hecho, debería usar Scala 2.10 (el hito 2 está disponible). El soporte de Scala 2.10 CAT también puede ayudarlo con la integración en el lado de Scala.
Puede usar SBT para compilar Clojure, ya que SBT es muy flexible, pero, más pragmáticamente, no hay soporte para compilación de Clojure disponible. Puede ver este complemento como un ejemplo de cómo agregar compilación de otros idiomas.
Me parece curioso que parece existir tan poca integración entre Scala y Clojure. A menudo se comparan, y a menudo verás a personas que dicen que eligen una sobre la otra.
La respuesta corta: usar Maven3
maven3 con el plugin zi para clojure y el plugin maven-scala-plugin te permitirá tener un proyecto políglota bien integrado en el que puedes usar cualquier idioma que desees siempre que sea Java;)
Uno de los grandes cambios en Maven3 fue un impulso hacia la programación JVM políglota que incluye la capacidad de escribir POM en muchos idiomas. Pierdes el pulimento de leiningen cuando tomas esta ruta, aunque ganas mucho a cambio.
No lo he usado, pero Leiningen tiene soporte para scalac .
Personalmente, me mantendría alejado de usar a Maven directamente a pesar de ser la respuesta aceptada. Aquí está la definición simple del proyecto Leiningen que:
- genera fuentes Java desde la gramática ANTLR4 (como un bono);
- compila fuentes de Java;
- compila fuentes de Scala (prefiero usar Scala sobre el código Java ANTLR4 generado porque es mucho más conciso y agradable para trabajar con él);
- Sigue con las cosas de Clojure.
(defproject polyglot "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :plugins [[lein-antlr4 "0.1.0-SNAPSHOT"] [lein-scalac "0.1.0"]] :dependencies [[org.clojure/clojure "1.5.1"] [org.antlr/antlr4 "4.0"] [org.scala-lang/scala-library "2.10.1"]] :warn-on-reflection true :antlr4-source-paths ["antlr4"] :antlr4-options {:package "parser" :listener true} :antlr4-compile-path "target/antlr4/parser" :java-source-paths ["target/antlr4/parser" "src/java"] :scala-source-path "src/scala" :prep-tasks ["antlr4" "javac" "scalac" "compile"])
Para usar la descarga del complemento ANTLR4 y ''instalar lein-antlr4 '', el complemento lein-antlr4 . Si no lo necesita, simplemente elimine las líneas relevantes de la definición del proyecto.
Para usar el plugin de Scala necesitaba descargarlo y cambiarlo.
[org.scala-lang/scala-compiler "2.9.1"]
a
[org.scala-lang/scala-compiler "2.10.1"]
en el plugin project.clj, luego ''lein install'' localmente. Con la versión de dependencia más antigua que estaba recibiendo
java.lang.Error: typeConstructor inapplicable for <none>
del compilador de Scala.