2012-03-13 12 views
27

Sto cercando una guida per la programmazione poliglotta in queste due lingue.Scala e Clojure in un unico progetto

So che è interop between them is possible, poiché entrambi sono in esecuzione sulla stessa macchina virtuale Java ed entrambi sono stati compilati nello stesso bytecode. ma c'è qualche cumbersomes:

  • posso usare per compilare il codice Clojure?
  • Posso utilizzare per compilare il codice Scala?

( Sì, sì, so che posso solo plug in vaso da una lingua di proiettare in altri lang.)

Quindi la domanda è Come configurare lo sviluppo poliglotte a Scala e Clojure?

+0

Per la riduzione del codice, non conosco alcuna libreria esistente. Ma tra le macro Clojure e le conversioni implicite di Scala, puoi probabilmente fare molto. – leedm777

+0

Non chiedere più di una domanda su una domanda. Non è giusto per le persone che possono rispondere di una parte ma non dell'altro, e la risposta accettata potrebbe non essere la migliore risposta per un aspetto. –

+0

@ DanielC.Sobral Generalmente, sto cercando di evitare quella situazione. Per questo motivo ho scritto l'ultima riga. Le domande nel corpo descrivono ciò che voglio vedere in quella guida (mi aspettavo il link ad alcuni post o qualsiasi altra cosa). –

risposta

17

La breve Anser: uso Maven3

maven3 con il plugin zi per clojure e la maven-scala-plugin vi permetterà di avere un progetto poliglotta ben integrato in cui è possibile utilizzare qualsiasi lingua che si desidera a patto che il suo Java ;)

Uno dei grandi cambiamenti in Maven3 era una spinta verso la programmazione JVM poliglotta inclusa la possibilità di scrivere POM in molte lingue. Perderti lo smalto di leiningen quando percorri questa strada, anche se guadagni molto in cambio.

+0

+1 per questo: Maven è ottimo per la codifica poliglotta sulla JVM. Ho un po 'meno esperienza con Scala + Maven, ma funziona perfettamente per Java e Clojure nello stesso progetto. – mikera

3

Come alternativa professionale: gradle è in grado di compilare entrambe le lingue.

2

Il tratto Dynamic di Scala è stato creato per consentire una più facile integrazione con linguaggi digitati dinamicamente, ma dovrai scrivere il tuo proprio spedizioniere. Inoltre, dovrai riscriverlo con Scala 2.10, poiché è stato modificato un po '. Forse, in effetti, dovresti usare Scala 2.10 (milestone 2 è disponibile). Il supporto di Scala 2.10 CAT può anche aiutarti con l'integrazione sul lato Scala.

È possibile utilizzare SBT per compilare Clojure, poiché SBT è molto flessibile, ma, in modo più pragmatico, non è disponibile alcun supporto per la compilazione Clojure. Puoi guardare this plugin come esempio di come aggiungere la compilazione di altre lingue.

Trovo curioso che così poca integrazione tra Scala e Clojure sembra esistere. Sono spesso confrontati e spesso vedrai persone dire che scelgono l'una rispetto all'altra.

5

Personalmente, starei lontano dall'usare Maven direttamente nonostante sia la risposta accettata.Ecco la semplice definizione del progetto Leiningen che:

  • genera sorgenti Java dalla grammatica ANTLR4 (come bonus);
  • compila sorgenti Java;
  • compila sorgenti Scala (preferisco usare Scala sopra al codice Java ANTLR4 generato poiché è molto più conciso e piacevole con cui lavorare);
  • continua con roba 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"]) 

Per utilizzare ANTLR4 plugin scaricare e 'Lein install' il lein-antlr4 plugin. Se non ne hai bisogno, rimuovi solo le righe pertinenti dalla definizione del progetto.

Per utilizzare plug-in Scala avevo bisogno di download e cambiare

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

a

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

in project.clj del plugin, quindi 'Lein install' localmente. Con la versione di dipendenza più vecchia stavo ottenendo

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

dal compilatore Scala.

Problemi correlati