我正在寻找这两种语言的Polyglot编程指南。

我知道它们之间的互操作是可能的,因为它们都在同一Java VM上运行,两者都被编译为相同的字节码。 但有一些苦难:

  • 我可以使用编译Clojure代码?
  • 我可以使用编译Scala代码?

( 是的,是的,我知道我可以从一种语言插入jar,在其他郎。)

  • 是有一些图书馆可以从写作
有帮助吗?

解决方案

我没用过它,但leinineen确实有 scalac支持

其他提示

短ANSER:使用maven3

maven3与 zi maven-scala-plugin 将允许您拥有一个很好的集成多格项目,您可以在那里只要其java使用您想要的任何语言;)

Maven3的一个大变化是推动Polyglot JVM编程,包括在许多语言中编写POM的能力。在进行这条路线时,你会松开leinineen的波兰语,虽然你得到了充足的回报。

个人,尽管是被接受的答案,我会远离使用Maven。这是简单的leinineen项目定义:

  • 从Antlr4语法(作为奖励)生成Java来源;
  • 编译Java源;
  • 编译scala源(我更喜欢在生成的antlr4 java代码的顶部使用scala,因为它更简洁,令人愉悦);
  • 继续与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"])
.

使用antlr4插件下载和'lein安装' lein-antlr4 插件。如果您不需要它,只需删除项目定义中的相关行。

要使用Scala插件,我需要下载它并更改

[org.scala-lang/scala-compiler "2.9.1"] 
.

[org.scala-lang/scala-compiler "2.10.1"]
.

在plugin的project.clj中,然后'lein安装'它在本地。较旧的依赖版本我得到

java.lang.Error: typeConstructor inapplicable for <none>
.

从scala编译器。

作为maven替代: gradle 能够编译两种语言。

Scala的Dynamic特征是创建的,以便以动态类型的语言更轻松地集成,但您必须编写自己的转发器。此外,您必须使用Scala 2.10重写它,因为它已被更改了一下。也许,事实上,您应该使用Scala 2.10(可用的里程碑2)。Scala 2.10 CAT支持也可以帮助您在Scala侧面集成。

you can 使用SBT编译Clojure,因为SBT非常灵活,但更务实地,没有Clojure-Compilation支持,可以随时可用。你可以看看这个插件作为如何添加其他语言的编辑的示例。

我发现很好,即Scala和Clojure之间的一点似乎存在。他们经常比较,你经常看到人们说它选择一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top