Scala et Clojure tous deux dans un seul projet
-
12-12-2019 - |
Question
Je recherche un guide pour la programmation polyglotte dans ces deux langages.
Je sais que l'interopérabilité entre eux est possible, car ils fonctionnent tous les deux sur la même machine virtuelle Java et ont tous deux été compilés avec le même bytecode.Mais il y a quelques lourdeurs :
(Ouais, ouais, je sais que je peux simplement brancher un pot d'une langue à un projet dans d'autres Lang.)
- Existe-t-il des bibliothèques qui pourraient m'éviter d'écrire Code d'interopération de chaudron?
- et ainsi de suite
La question est donc Comment configurer le développement polyglotte dans Scala et Clojure ?
La solution
Je ne l'ai pas utilisé, mais Leiningen a support Scalac .
Autres conseils
L'anser court: Utilisez Maven3
maven3 avec le Zi plugin pour clojure et
L'un des gros changements de Maven3 a été une poussée vers Polyglot JVM Programmation, y compris la possibilité d'écrire des POM dans de nombreuses langues.Vous perdez le vernis de Leiningen lorsque vous prenez cet itinéraire, bien que vous gagniez beaucoup en retour.
Personnellement, je resterais loin d'utiliser Maven directement malgré la réponse acceptée. Voici la simple définition de projet Leiningen qui:
- génère des sources Java de la grammaire AntLR4 (en bonus);
- compile les sources Java;
- compile des sources de scala (je préfère utiliser Scala sur le code Java généré en AntLR4, car il est beaucoup plus concis et agréable à travailler avec);
- continue avec des trucs 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"])
Pour utiliser AntlR4 Plugin Télécharger et 'Lein Install' the plugin LEIN-ANTLR4 . Si vous n'en avez pas besoin, supprimez simplement les lignes pertinentes de la définition du projet.
Utiliser Scala Plugin, j'avais besoin de télécharger it et modifier
[org.scala-lang/scala-compiler "2.9.1"]
à
[org.scala-lang/scala-compiler "2.10.1"]
dans le projet du plugin.clj, puis "LEIN Installez-la" localement. Avec une version de dépendance plus âgée, je reçois
java.lang.Error: typeConstructor inapplicable for <none>
du compilateur Scala.
comme une alternative Maven: gradle est capable de compiler les deux langues.
Scala Dynamic
trait a été créé pour permettre une intégration plus facile avec les langages typés dynamiquement, mais vous devrez écrire votre propre redirecteur.De plus, vous devrez le réécrire avec Scala 2.10, car il a été un peu modifié.Peut-être, en fait, devriez-vous utiliser Scala 2.10 (le jalon 2 est disponible).La prise en charge de Scala 2.10 CAT peut également vous aider avec l'intégration côté Scala.
Toi peut utilisez SBT pour compiler Clojure, car SBT est très flexible, mais, de manière plus pragmatique, il n'existe pas de support de compilation Clojure facilement disponible.Vous pouvez regarder ce plugin comme exemple de la façon d'ajouter une compilation d'autres langues.
Je trouve curieux que si peu d'intégration entre Scala et Clojure semble exister.Ils sont souvent comparés et vous verrez souvent des gens dire qu'il faut choisir l'un plutôt que l'autre.