我正在寻找这两种语言的多语言编程指南。
我知道interop between them is possible,因为它们都在同一个Java VM上运行,并且都被编译为相同的字节码。 但是有一些麻烦:
( 是的,是的,我知道我可以用一种语言插入jar来投射其他语言。)
所以问题是如何在Scala和Clojure中设置多语言开发?
答案 0 :(得分:17)
简短的缩写:使用Maven3
maven3与clojure的zi插件和maven-scala-plugin将允许你有一个很好地集成的多语言项目,你可以使用任何你想要的语言,只要它的Java;)
Maven3的一个重大变化是推动多语言JVM编程,包括以多种语言编写POM的能力。虽然你获得了丰厚的回报,但是当你走这条路线时,你会失去莱宁根的光彩。
答案 1 :(得分:6)
就个人而言,尽管接受了答案,我还是不会直接使用Maven。这是简单的Leiningen项目定义:
(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"])
使用ANTLR4插件下载和'lein install'lein-antlr4插件。如果您不需要它,只需从项目定义中删除相关的行。
要使用Scala插件我需要download并更改
[org.scala-lang/scala-compiler "2.9.1"]
到
[org.scala-lang/scala-compiler "2.10.1"]
在插件的project.clj中,然后在本地“lein install”。随着旧的依赖版本我得到了
java.lang.Error: typeConstructor inapplicable for <none>
来自Scala编译器。
答案 2 :(得分:3)
作为maven的替代方案:gradle能够编译两种语言。
答案 3 :(得分:3)
创建了Scala的Dynamic
特征,以便更轻松地与动态类型语言集成,但您必须编写自己的转发器。此外,你必须用Scala 2.10重写它,因为它已经改变了一点。实际上,您可能应该使用Scala 2.10(里程碑2可用)。 Scala 2.10 CAT支持也可以帮助您在Scala端集成。
你可以使用SBT编译Clojure,因为SBT非常灵活,但更实际的是,没有Clojure编译支持随时可用。您可以查看this plugin作为如何添加其他语言编译的示例。
我觉得很奇怪,Scala和Clojure之间的这种集成似乎很少。它们经常被比较,你会经常看到人们说它选择了一个而不是另一个。