29

この 2 つの言語での多言語プログラミングのガイドを探しています。

両方とも同じ Java VM 上で実行されており、両方とも同じバイトコードにコンパイルされているため、それらの間の相互運用が可能であることはわかっています。しかし、いくつかの面倒なことがあります:

  • を使用して Clojure コードをコンパイルできますか?
  • を使用して Scala コードをコンパイルできますか?

(ええ、ええ、ある言語のjarをプラグインして、他の言語でプロジェクトでき​​ることを知っています。)

問題は、Scala と Clojure で多言語開発をセットアップする方法です。

4

5 に答える 5

17

短い答え:Maven3を使用する

clojure用のziプラグインとmaven-scala-pluginを備えたmaven3を使用すると、Javaである限り、任意の言語を使用できる、うまく統合されたポリグロットプロジェクトを作成できます;)

Maven3の大きな変更の1つは、多くの言語でPOMを作成する機能を含む多言語JVMプログラミングへの取り組みでした。このルートをとると、ライニンゲンの磨きが失われますが、見返りはたくさんあります。

于 2012-03-13T00:49:55.343 に答える
9

私は使っていませんが、Leiningen にはscalac サポートがあります。

于 2012-03-13T12:07:25.467 に答える
6

個人的には、受け入れられた答えであるにもかかわらず、Maven を直接使用することは避けたいと思います。以下は、単純な Leiningen プロジェクトの定義です。

  • ANTLR4 文法から Java ソースを生成します (ボーナスとして)。
  • Java ソースをコンパイルします。
  • Scala ソースをコンパイルします (生成された ANTLR4 Java コードの上で Scala を使用することを好みます。より簡潔で使いやすいためです)。
  • Clojure の話を続けます。
(defproject polyglot "0.1.0-SNAPSHOT"
  :description "FIXME: 説明を書く"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse パブリック ライセンス"
            :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"]]
  :反射時に警告 true
  :antlr4-source-paths ["antlr4"]
  :antlr4-options {:package "parser" :listener true}
  :antlr4-compile-path "ターゲット/antlr4/パーサー"
  :java-source-paths ["target/antlr4/parser" "src/java"]
  :scala-source-path "src/scala"
  :prep-tasks ["antlr4" "javac" "scalac" "compile"])

ANTLR4 プラグインを使用するには、 lein-antlr4プラグインをダウンロードして「lein install」します。必要ない場合は、プロジェクト定義から関連する行を削除してください。

Scala プラグインを使用するには、ダウンロードして変更する必要がありました

[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 コンパイラから。

于 2013-05-22T09:49:27.853 に答える
3

Mavenの代替手段として:gradleは両方の言語をコンパイルできます。

于 2012-03-13T06:45:40.097 に答える
3

Scala のDynamictrait は、動的型付け言語との統合を容易にするために作成されましたが、独自のフォワーダーを作成する必要があります。また、少し変更されているため、Scala 2.10 で書き直す必要があります。おそらく、実際には Scala 2.10 を使用する必要があります (マイルストーン 2 が利用可能です)。Scala 2.10 CAT サポートは、Scala 側での統合にも役立ちます。

SBT は非常に柔軟であるため、SBT を使用して Clojure をコンパイルできますが、より実用的に言えば、すぐに利用できる Clojure コンパイル サポートはありません。このプラグインは、他の言語のコンパイルを追加する方法の例として見ることができます。

Scala と Clojure の統合がほとんどないように見えるのは興味深いことです。それらはよく比較され、どちらか一方を選択すると言っている人をよく見かけます。

于 2012-03-13T16:36:41.610 に答える