Подтвердить что ты не робот

Scala и Clojure как в одном проекте

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

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

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

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

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

4b9b3361

Ответ 2

Короткий anser: использовать Maven3

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

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

Ответ 3

Лично я бы держался подальше от использования 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 компилятора.

Ответ 4

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

Ответ 5

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

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

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