Зачем нам нужны другие языки JVM - PullRequest
23 голосов
/ 17 сентября 2008

Я вижу здесь , что помимо Java существует множество языков, которые работают на JVM. Я немного озадачен всей концепцией других языков, работающих в JVM. Итак:

В чем преимущество наличия других языков для JVM?

Что требуется (в терминах высокого уровня) для написания языка / компилятора для JVM?

Как вы пишете / компилируете / запускаете код на языке (отличном от Java) в JVM?


РЕДАКТИРОВАТЬ: Было 3 дополнительных вопроса (изначально комментарии), на которые был дан ответ в принятом ответе. Они перепечатаны здесь для разборчивости:

Как приложение, написанное, скажем, на JPython, будет взаимодействовать с приложением Java?

Кроме того, может ли это приложение JPython использовать какие-либо функции / объекты JDK ??

Что, если это был код Jaskell, не сделал бы тот факт, что это функциональный язык несовместимым с JDK?

Ответы [ 17 ]

1 голос
/ 17 сентября 2008

.NET языки больше для показа, чем для реальной полезности. Каждый язык был настолько убит, что все они на C # с новым лицом.

Существует множество причин предоставить альтернативные языки для Java VM:

  • JVM является мультиплатформенным. Любой язык, перенесенный в JVM, получает это в качестве бесплатного бонуса.
  • Существует довольно много устаревшего кода. Устаревшие механизмы, такие как ColdFusion, работают лучше, предлагая клиентам возможность постепенно переводить свои приложения с устаревшего решения на современное.
  • Некоторые формы сценариев лучше подходят для быстрой разработки. JavaFX, например, разработан с учетом быстрой графической разработки. Таким образом, он конкурирует с такими двигателями, как DarkBasic. (Обрабатывается другой игрок в этом пространстве.)
  • Среда сценариев может предложить контроль. Например, приложение может захотеть предоставить пользователю среду, подобную VBA, без предоставления базовых API-интерфейсов Java. Использование такого движка, как Rhino, может обеспечить среду, которая поддерживает быстрое и грязное кодирование в тщательно контролируемой песочнице.
  • Интерпретированные сценарии означают, что нет необходимости перекомпилировать что-либо. Не нужно перекомпилировать переводит в более динамичную среду. например Несмотря на то, что OpenOffice использует Java в качестве «языка сценариев», Java не подходит для такого использования. Пользователь должен пройти через все виды вращений перекомпиляции / перезагрузки, которые не нужны в динамической среде сценариев, такой как Javascript.
  • Что подводит меня к другому моменту. Скриптовые двигатели могут быть легко остановлены и перезагружены без остановки и перезагрузки всей JVM. Это повышает полезность языка сценариев, так как среда может быть сброшена в любое время.
1 голос
/ 17 сентября 2008

То, что может сделать JVM, определяется байт-кодом JVM (что вы найдете в файлах .class), а не исходным языком. Таким образом, изменение языка исходного кода высокого уровня не окажет существенного влияния на доступную функциональность.

Что касается того, что требуется для написания компилятора для JVM, все, что вам действительно нужно, - это генерировать правильные файлы байт-кода / .class. То, как вы пишете / компилируете код с помощью альтернативного компилятора, зависит от рассматриваемого компилятора, но как только компилятор выводит файлы .class, их запуск ничем не отличается от запуска файлов .class, созданных javac.

1 голос
/ 17 сентября 2008

Преимущество этих других языков в том, что они получают относительно легкий доступ ко многим java-библиотекам.

Преимущество для Java-людей варьируется в зависимости от языка - у каждого есть история, рассказывающая Java-кодерам о том, что они делают лучше. Некоторые подчеркнут, как их можно использовать для добавления динамических сценариев в приложения на основе JVM, другие просто расскажут о том, как их язык проще в использовании, имеет лучший синтаксис и т. Д.

Для написания любого другого языкового компилятора требуется то же самое: синтаксический анализ в AST, затем преобразование этого в инструкции для целевой архитектуры (байт-код) и сохранение его в нужном формате (файлы .class).

С точки зрения пользователей, вы просто пишете код и запускаете двоичные файлы компилятора, и из него приходят файлы .class, которые можно смешивать с теми, которые создает ваш компилятор java.

1 голос
/ 02 июля 2010

Java накопила огромную пользовательскую базу за семь основных версий (от 1.0 до 1.6). Его способность развиваться ограничена необходимостью сохранения обратной совместимости для бесчисленных миллионов строк Java-кода, запущенного в производство.

Это проблема, потому что Java должна эволюционировать в:

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

Требование обратной совместимости является препятствием для сохранения конкурентоспособности.

Если сравнивать Java с C #, то у Java есть преимущество в зрелых, готовых к работе библиотеках и инфраструктурах, а также недостаток с точки зрения языковых возможностей и скорости увеличения доли рынка. Это то, что вы ожидаете от сравнения двух успешных языков, находящихся на расстоянии одного поколения.

Любой новый язык обладает теми же преимуществами и недостатками, что C # по сравнению с Java в крайней степени. Один из способов максимизировать преимущества с точки зрения языковых возможностей и минимизировать недостатки с точки зрения зрелых библиотек и сред - это создать язык для существующей виртуальной машины и сделать его совместимым с кодом, написанным для этой виртуальной машины. В этом причина скромного успеха Groovy и Clojure; и волнение вокруг Скалы. Без JVM эти языки могли бы занимать только крошечную нишу в очень специализированном сегменте рынка, в то время как с JVM они занимают значительную нишу в мейнстриме.

0 голосов
/ 09 января 2009

Причина в том, что платформа JVM предлагает много преимуществ.

  • Гигантское количество библиотек
  • более широкая степень платформы Реализации
  • Зрелые рамки
  • Устаревший код уже часть вашей инфраструктуры

Языки, которые Sun пытается поддерживать со своей спецификацией сценариев (например, Python, Ruby), работают и появляются во многом благодаря их предполагаемому повышению производительности. Запуск Jython позволяет теоретически повысить производительность и использовать возможности Python для решения проблемы, более подходящей для Python, но при этом иметь возможность интегрировать на уровне времени выполнения с существующей базой кода , Классические реализации Python и Ruby дают такую ​​же возможность для библиотек C .

Кроме того, часто проще выразить некоторые вещи на динамическом языке, чем на Java. Если это так, вы можете пойти другим путем; использовать библиотеки Python / Ruby из Java .

Производительность снижается, но многие готовы принять это в обмен на менее детальную и ясную кодовую базу.

0 голосов
/ 17 сентября 2008

В некоторой степени это, вероятно, «гонка вооружений» против .NET CLR.

Но я думаю, что есть и реальные причины для введения новых языков в JVM, особенно когда они будут работать «параллельно», вы можете использовать правильный язык для правильной работы, язык сценариев, такой как Groovy, может быть именно вам нужно для презентации вашей страницы, тогда как обычная старая Java лучше для вашей бизнес-логики.

Я собираюсь оставить кого-то более квалифицированным, чтобы говорить о том, что требуется для написания нового языка / компилятора.

Что касается написания кода, вы делаете это в блокноте / vi как обычно! (или используйте инструмент разработки, который поддерживает язык, если вы хотите сделать это простым способом.) Для компиляции потребуется специальный компилятор для языка, который будет интерпретировать и скомпилировать его в байт-код.

Поскольку java также производит байт-код технически, вам не нужно делать ничего особенного для его запуска.

0 голосов
/ 17 сентября 2008

Они делают это, чтобы не отставать от .Net. .Net поддерживает C #, VB, J # (ранее), F #, Python, Ruby (скоро) и c ++. Я, наверное, скучаю по некоторым. Вероятно, самым большим из них является Python для сценаристов.

...