2012-03-13 9 views
27

私はこの2つの言語で多言語プログラミングのガイドを探しています。1つのプロジェクトでScalaとClojureの両方

私が知っているのはinterop between them is possibleです。それらは両方とも同じJava VM上で動作しており、どちらも同じバイトコードにコンパイルされています。 しかし、いくつかのcumbersomesがあります:

  • 私はClojureのコードをコンパイルするを使用することはできますか?
  • を使用してScalaコードをコンパイルできますか?

( はええ、ええ、私はちょうど他のLANGに突出する一つの言語からjarファイルをプラグインすることができます知っている。)

  • boilerplate interop codeを書いてから私を救うことができるいくつかのライブラリはありますか?

  • ので、そこで問題は、どのようにスカラ座とのClojureでセットアップポリグロット開発をするのですか?

  • +0

    ボイラープレートを減らすために、私は既存のライブラリを知りません。しかし、ClojureマクロとScala暗黙の変換の間には、おそらく長い道のりがあります。 – leedm777

    +0

    1つの質問に対して複数の質問をしないでください。パートには答えることができますが、他のパートには答えることができない人には不公平であり、受け入れられた回答は1つの側面では最良の答えではないかもしれません。 –

    +0

    @ DanielC.Sobral一般的に、私はそのような状況を避けようとしています。その理由から私は最後の行を書きました。本文の質問は、私がそのガイドで見たいものを説明しています(私は何かの投稿へのリンクを期待しています)。 –

    答えて

    9

    私はそれを使っていませんが、Leiningenはscalac supportです。

    17

    短いANSER:使用Maven3

    zi Clojureのためのプラグインとmaven-scala-pluginはあなたがそのJavaの限り、あなたが望む任意の言語を使用することができますうまく統合ポリグロットのプロジェクトを持つことができるようになるとmaven3 ;)

    Maven3の大きな変化の1つは、多言語のJVMプログラミングに向けたプッシュであり、多くの言語でPOMを書くことができます。あなたはこのルートを取っているときにライニングの磨きを失いますが、あなたは多くの利益を得ます。

    +0

    +1これは、MavenはJVM上の多言語コーディングに最適です。私はScala + Mavenの経験は少ししかありませんが、同じプロジェクトでJavaとClojureにはうってつけです。 – mikera

    3

    代わりに、gradleは両方の言語をコンパイルすることができます。

    2

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

    SBTは非常に柔軟に対応できるため、SBTを使用してClojureをコンパイルしますが、実際的にはClojureコンパイルのサポートはありません。他の言語のコンパイルを追加する方法の例として、this pluginを見ることができます。

    私はScalaとClojureの統合がほとんど存在しないように思っています。彼らはしばしば比較されます、そして、あなたはしばしば人々がそれを他のものよりも一つを選ぶと言っているのを見るでしょう。

    5

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

    • は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-antlr4プラグインを使用します。必要がない場合は、プロジェクト定義から関連する行を削除してください。

    私はdownloadにそれを必要とScalaのプラグインを使用して

    プラグインのproject.cljで
    [org.scala-lang/scala-compiler "2.10.1"] 
    

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

    を変更するには、その後、それをローカルに 'レインインストール'。古い従属バージョンでは、Scalaコンパイラから

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

    が得られました。