2009-10-15 3 views
8

Например, возможно ли, что Scala, Java и Clojure полностью компилируются/строятся вместе внутри одного и того же проекта? Или я должен делать их как отдельные библиотеки проектов, а затем использовать все, что я выбираю как «главный» проект?Как объединить языки на основе JVM в одном проекте Netbeans?

Если ни один из них, как все это делают?

ответ

6

К сожалению, в то время как сообщество Java , похоже, с большим энтузиазмом относится к программированию полиглота, поставщики IDE на самом деле не справились. Они вообще do имеют плагины для Java, Scala, Clojure, Groovy, Ruby, ECMAScript, Python, C++ проектов, но смешивание несколько языков в один проект вообще не поддерживается.

В Ruby, например, довольно часто используется Swing в качестве графического интерфейса через JRuby. Но если вы хотите использовать Matisse, построитель GUI NetBeans Swing, вы должны использовать Java-проект, вы не можете использовать Matisse в проекте Ruby. Однако, если вы используете проект Java, тогда у вас не может быть основного исполняемого файла Ruby, у вас должен быть главный исполняемый файл Java. Кроме того, вы не получаете поддержку Rake и другие вещи, которые поддерживает тип проекта Ruby. (Уродливый обходной путь, чтобы написать основной исполняемый файл Java, который создает JRubyEngine экземпляр вручную, загружает Рубина основных исполняемые в нее и запускает его.)

Затмения Scala плагина поддерживает ограниченное количество polyglotism, но обручи, которые они должны прыгать, огромны. В основном, они используют исправление байт-кода во время выполнения, чтобы внедрять Scala Aspects в плагин Java Development Tools Eclipse, чтобы работать с перекрестными рефакторингами на основе типов. Плагин Groovy делает аналогичные вещи, как и AspectJ (на самом деле, они изначально придумали идею использования аксессуаров для вставки новых функций в JDT). Таким образом, все эти плагины позволяют программировать многоугольник с собой и с Java. Но, к сожалению, не друг с другом. (Хотя некоторые из сопровождающих выразили заинтересованность в более тесном сотрудничестве.)

В общем, я боюсь, что единственным решением являются новые IDE.

+0

Кто-нибудь знает, где IntelliJ стоит на этом? – jomohke

+0

Да! Пожалуйста, см. Мой ответ на вопрос. –

3

Скорее поздно ответить на этот вопрос, но ответ заключается в том, что IntelliJ IDEA выполняет очень хорошую работу по программированию многоугольников. Недавно я просмотрел демоверсию, где один из их разработчиков сделал приложение на смешанном языке на 5 (!) Языках.

Им удаётся выполнять многократную окраску синтаксиса, рефакторинг и многое другое. Очевидно, они вложили в это несколько усилий и по праву гордятся.

Я был очень рад отметить, что ИДЕЯ теперь (частично) открыта.

+0

Действительно. Как это работает, IDEA не использует собственные инструменты языка для синтаксического и семантического анализа. Вместо этого IDEA содержит мощную и сложную инфраструктуру компилятора (современная среда IDE в основном построена на почти полном компиляторе, в котором отсутствует только этап генерации кода, все остальное, синтаксический анализ, проверка типов, вывод типа и т. Д.), реализовать каждый язык для своей среды IDE. Самое замечательное в том, что эта структура компилятора очень универсальна и использует единое разделяемое семантическое дерево в качестве своего бэкэнд. Таким образом, весь код скомпилирован в этот общий общий ... –

+0

... семантическое дерево и все операции, такие как поиск ссылок, рефакторинг, завершение кода и т. Д., Выполняются против этого единого семантического дерева. Таким образом, можно, например, выполнить * Переименовать рефакторинг * на нескольких языках. –

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