Ответ 1
Я не использовал его, но у Leiningen есть поддержка сканера.
Я ищу руководство по программированию многоугольников на этих двух языках.
Я знаю, что взаимодействие между ними возможно, поскольку они оба работают на одной виртуальной машине Java и оба скомпилированы в один и тот же байт-код. Но есть некоторые громоздки:
( Да, да, я знаю, что могу просто подключить банку с одного языка для проекта в другом языке.)
Итак, вопрос в том, как настроить разработку полиглота в Scala и Clojure?
Я не использовал его, но у Leiningen есть поддержка сканера.
Короткий anser: использовать Maven3
maven3 с плагином zi для clojure и maven-scala-plugin позволит вам иметь хорошо интегрированный проект polyglot, где вы можете использовать любой язык, который вы хотите, до тех пор, пока его Java;)
Одним из значительных изменений в Maven3 стало стремление к программированию многопользовательских JVM, включая возможность писать POM на многих языках. Вы теряете блеск leiningen при прохождении этого маршрута, хотя вы получаете много взамен.
Лично я бы держался подальше от использования Maven, несмотря на то, что был принят. Вот простое определение проекта Leiningen, которое:
(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 компилятора.
Как альтернатива maven: gradle может скомпилировать оба языка.
Scala Dynamic
был создан признак, позволяющий упростить интеграцию с динамически типизированными языками, но вам придется писать свой собственный форвардер. Кроме того, вам придется переписать его с помощью Scala 2.10, так как он немного изменился. Возможно, на самом деле вы должны использовать Scala 2.10 (имеется веха 2). Scala 2.10 Поддержка CAT также может помочь вам с интеграцией на стороне Scala.
Вы можете использовать SBT для компиляции Clojure, поскольку SBT очень гибко, но, более прагматично, нет свободной поддержки Clojure -компиляции. Вы можете посмотреть этот плагин в качестве примера того, как добавить компиляцию других языков.
Мне любопытно, что так мало интеграции между Scala и Clojure, кажется, существует. Их часто сравнивают, и вы часто будете видеть, как люди говорят, что они выбирают друг друга.