Scala и Clojure в одном проекте - PullRequest
29 голосов
/ 13 марта 2012

Я ищу руководство по программированию полиглотов на этих двух языках.

Я знаю, что взаимодействие между ними возможно , так как они работают на одной и той же виртуальной машине Java и оба скомпилированы в один и тот же байт-код. Но есть несколько громоздких:

  • Могу ли я использовать для компиляции кода Clojure?
  • Можно ли использовать для компиляции кода Scala?

( Да, да, я знаю, что могу просто вставить банку с одного языка для проецирования на другой язык.)

Итак, вопрос Как настроить разработку полиглотов в Scala и Clojure?

Ответы [ 5 ]

17 голосов
/ 13 марта 2012

Короткий ансер: используйте Maven3

maven3 с плагином zi для clojure и maven-scala-plugin позволит вам иметь красиво интегрированный проект полиглота, в котором вы можете использовать любой язык, который захотите, пока его Java;)

Одним из больших изменений в Maven3 стал толчок к программированию JVM с использованием полиглота, включая возможность писать POM на многих языках. При прохождении этого маршрута вы теряете блеск лейнингена, но получаете много взамен.

9 голосов
/ 13 марта 2012

Я не использовал его, но у Leiningen есть поддержка скаляка .

6 голосов
/ 22 мая 2013

Лично я бы держался подальше от использования Maven, несмотря на то, что был принят. Вот простое определение проекта Leiningen, которое:

  • генерирует источники Java из грамматики ANTLR4 (в качестве бонуса);
  • компилирует исходники Java;
  • компилирует исходники Scala (я предпочитаю использовать Scala поверх сгенерированного Java-кода ANTLR4, так как с ним гораздо лаконичнее и приятнее работать);
  • продолжается с 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 install' плагин lein-antlr4 . Если вам это не нужно, просто удалите соответствующие строки из определения проекта.

Чтобы использовать плагин 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.

3 голосов
/ 13 марта 2012

Черта Dynamic от Scala была создана для упрощения интеграции с динамически типизированными языками, но вам придется написать свой собственный перенаправитель.Также вам придется переписать его с помощью Scala 2.10, так как он немного изменился.Возможно, на самом деле вы должны использовать Scala 2.10 (Milestone 2 доступен).Поддержка Scala 2.10 CAT также может помочь вам с интеграцией на стороне Scala.

Вы можете использовать SBT для компиляции Clojure, поскольку SBT очень гибок, но, что более прагматично, Clojure не существует-поддержка компиляции легко доступны.Вы можете посмотреть этот плагин как пример того, как добавить компиляцию других языков.

Мне кажется любопытным, что такая небольшая интеграция между Scala и Clojure, кажется, существует.Их часто сравнивают, и вы часто будете видеть, как люди говорят, что выбирают одно над другим.

3 голосов
/ 13 марта 2012

Как альтернатива maven: gradle может компилировать оба языка.

...