2012-03-13 2 views
27

이 두 언어로 다국어 프로그래밍을위한 가이드를 찾고 있습니다.하나의 프로젝트에서 Scala와 Clojure 모두

둘 다 동일한 Java VM에서 실행되고 둘 다 동일한 바이트 코드로 컴파일 되었기 때문에 interop between them is possible을 알고 있습니다.

  • 내가 Clojure의 코드를 컴파일 를 사용할 수 : 하지만 거기에 몇 가지 cumbersomes입니까?
  • 을 사용하여 스칼라 코드를 컴파일 할 수 있습니까?

  • boilerplate interop code를 작성에서 저를 절약 할 수있는 몇 가지 라이브러리가 있는가 ( 그래, 그래, 나는 다른 랭에서 프로젝트. 난 그냥 하나 개의 언어에서 항아리에 연결할 수 있습니다 알고)?

그래서 질문이 입니다에 어떻게 설치 수개 국어 개발에 스칼라 및 Clojure의에서?

+0

상용구를 줄이기 위해 기존 라이브러리를 알지 못합니다. 그러나 Clojure 매크로와 Scala 암시 적 변환 사이에는 먼 길을 갈 수 있습니다. – leedm777

+0

한 가지 질문에 두 가지 이상의 질문을하지 마십시오. 일부는 대답 할 수 있지만 다른 대답은 할 수없는 사람들에게는 불공평합니다. 허용 된 대답은 한 가지 측면에 대한 최선의 대답이 아닐 수도 있습니다. –

+0

@ DanielC.Sobral 일반적으로 나는 그 상황을 피하려고 노력하고있다. 그런 이유로 나는 마지막 줄을 썼다. 본문에있는 질문은 내가 그 가이드에서보고 싶은 것을 설명합니다 (나는 어떤 게시물이나 어떤 것에 대한 링크를 기대했습니다). –

답변

9

저는 사용하지 않았지만 Leiningen에는 scalac support이 있습니다.

17

짧은 답변 : 사용 Maven3

zi Clojure에 대한 플러그인과 maven-scala-plugin 당신이 자바만큼 당신이 원하는 어떤 언어를 사용할 수있는 잘 통합 된 수개 국어 프로젝트가 할 수와 maven3 ;)

Maven3의 큰 변화 중 하나는 여러 언어로 POM을 작성하는 기능을 포함하여 다중 언어 JVM 프로그래밍을 추진하는 것이 었습니다. 이 길을 택할 때 당신은 leiningen의 광택을 느슨하게합니다.

+0

+1 : Maven은 JVM에서 다중 언어 코딩에 적합합니다. Scala + Maven에 약간의 경험이 있지만, 동일한 프로젝트에서 Java와 Clojure에 잘 작동합니다. – mikera

3

대안으로 : gradle은 두 언어를 모두 컴파일 할 수 있습니다.

2

스칼라의 Dynamic 특성은 동적 유형 지정 언어와의 통합을 쉽게하기 위해 작성되었지만 직접 전달자를 작성해야합니다. 또한 스칼라 2.10은 조금 변경되었으므로 다시 작성해야합니다. 사실, 스칼라 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 코드 위에 스칼라를 사용하는 편이 훨씬 더 간결하고 즐겁기 때문에 선호합니다).
  • 이 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 플러그인을 사용합니다. 필요하지 않은 경우 프로젝트 정의에서 관련 줄을 제거하십시오.

내가 download에 필요한 스칼라 플러그인을 사용하여 플러그인의 project.clj에서

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

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

는 다음 로컬로 'lein 설치'로 변경합니다. 이전 버전의 종속성 버전에서는 Scala 컴파일러에서

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

이 발생했습니다.

관련 문제