2012-03-13 6 views
27

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

Я знаю, что interop between them is possible, так как они оба работают на одной виртуальной машине Java и оба скомпилированы в один байт-код. Но есть некоторые cumbersomes:

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

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

  • Есть некоторые библиотеки, которые могли бы спасти меня от написания boilerplate interop code?
  • и так далее

Так что вопрос Как настроить развитие полиглот в Scala и Clojure?

+0

Для уменьшения шаблона, я не знаю каких-либо существующих библиотек. Но между макросами Clojure и неявными преобразованиями Scala вы, вероятно, можете пройти долгий путь. – leedm777

+0

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

+0

@ DanielC.Sobral Вообще-то я стараюсь избегать этой ситуации. По этой причине я написал последнюю строку. Вопросы в теле описывают то, что я хочу видеть в этом руководстве (я ожидал ссылку на какую-то должность или что-то еще). –

ответ

17

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

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

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

+0

+1 для этого: Maven отлично подходит для полиглоточного кодирования на JVM. У меня немного меньше опыта с Scala + Maven, но он отлично работает для Java и Clojure в том же проекте. – mikera

3

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

2

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

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

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

5

Лично я бы держался подальше от использования 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 установить' lein-antlr4 плагин. Если вам это не нужно, просто удалите соответствующие строки из определения проекта.

Чтобы использовать Scala плагин мне нужно download и изменить

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

в

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

в project.clj плагина, затем 'Lein установить' локально. С более старой версией зависимостей я получал

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

от компилятора Scala.

Смежные вопросы