Эквивалент DLR для JVM? - PullRequest
       7

Эквивалент DLR для JVM?

12 голосов
/ 03 февраля 2010

Есть ли в JVM эквивалент DLR (Dynamic Language Runtime для .NET)? Я знаю, что мог бы реализовать свои собственные динамические привязки и создать свой собственный байт-код с помощью Java. Но есть ли какие-либо предварительно построенные рамки (например, DLR), поэтому мне не нужно заново изобретать колесо?

Ответы [ 2 ]

11 голосов
/ 03 февраля 2010

DLR - это несколько разных вещей, некоторые из которых имеют прямые эквиваленты в Java, некоторые существуют в разных формах, а некоторые не имеют эквивалента. Некоторые из тех, которые do имеют эквивалент, уже являются частью платформы, некоторые будут частью Java 7, а некоторые доступны от третьих лиц.

среда связывания и инфраструктура кэширования

DLR имеет инфраструктуру связывания и кэширования во время выполнения, что делает динамическую диспетчеризацию быстрой и эффективной. Как сделать динамическую диспетчеризацию такой же быстрой, как статическая диспетчеризация, и намного быстрее, чем диспетчеризация виртуальных таблиц в стиле C ++, известно более 20 лет, но большинство динамических механизмов выполнения не используют такие технологии, как полиморфное встроенное кэширование, динамический вывод типов Напечатайте Обратная связь Оптимизация и так далее. DLR пытается обеспечить единую реализацию, которая может использоваться всеми языками на основе DLR (включая средство связывания времени выполнения C #, используемое для ключевого слова dynamic в C # 4).

Java-эквивалент этого JSR-292 , который расширяет JVM инфраструктурой связывания и кэширования во время выполнения. Основное различие между DLR и JSR-292 заключается в том, что JSR-292 реализован на уровне виртуальной машины, что означает, что для его использования вам нужна новая виртуальная машина. JSR-292 станет частью следующей спецификации JVM, которая, в свою очередь, станет частью спецификации платформы Java 7, но это еще через год или около того. (Он уже доступен в текущих версиях Раннего доступа JDK7 , хотя уже довольно давно.)

DLR, OTOH - это просто библиотека, и вы можете установить ее на CLR 2.0, если хотите. Действительно, вам даже не нужен CLR, который подойдет для любого CLI-совместимого VES, такого как Mono Novell. А поскольку DLR является открытым исходным кодом, Novell может просто загрузить исходный код с веб-сайта Microsoft и отправить его как часть Mono, не написав ни единого кода ... это именно то, что они делают. Реализация Sun JSR-292 также имеет открытый исходный код, но это не помогает IBM, Oracle, Apache, RedHat, GNU и т. Д., Поскольку она очень специфична для ВМ, поэтому каждый поставщик JVM должен реализовать ее самостоятельно. (И есть много из них, только у Sun есть четыре разных JVM.)

[Примечание: там - это обратный порт JSR-292 Реми Форакса , который реализует JSR-292 для более старых JVM посредством перезаписи байт-кода. Он на 100% совместим, но довольно медленный.]

Протокол мета-объектов для взаимодействия

DLR содержит MOP (интерфейс IDynamicObject), который позволяет всем языкам на основе DLR взаимодействовать друг с другом и с языками на основе CLI на гораздо более высоком уровне и с более тесной интеграцией, чем необходимость проходить через CTS.

В пространстве Java эквивалентен проект Аттилы Сегеди (сопровождающий компилятор JavaScript Rhino для JVM) dynalang , созданный по мотивам CommonLisp MOP. Тем не менее,

  • не закончено,
  • не широко используется (пока) и
  • сторонняя библиотека, не входящая в стандартную платформу.

Все три из них, вероятно, когда-нибудь изменятся, но по крайней мере последний из них, вероятно, не произойдет для Java 7.

Стандартизированный API для встраивания

DLR предоставляет стандартизированный API встраивания для языков на основе DLR, который позволяет встраивать языковую среду выполнения в ваше приложение без необходимости изучать разные API для каждой другой среды выполнения. В самом деле, вам даже не нужно знать что такое среда выполнения!

Эквивалентом этому является API сценариев Java JSR-223, который является частью платформы Java начиная с Java 6 и находится в пакете javax.script .

Представление кода и компилятор

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

В Java нет эквивалента.

Динамические возможности для статических языков

C # 4 и VB.NET 10 добавляют динамическую типизациюдля более легкой интеграции с динамическими языками.Хотя технически это не имеет никакого отношения к DLR, в некоторых случаях он использует DLR.

В Java нет эквивалента.

2 голосов
/ 03 февраля 2010

Не могу сказать, что я в курсе этих вещей, но я считаю, что проект Da Vinci Machine примерно эквивалентен DLR. Это несколько иной подход, так как он изменяет набор инструкций байт-кода, а не просто является библиотекой, расположенной на вершине виртуальной машины, но у обоих проектов одно и то же намерение: упростить создание производительных динамических языков для соответствующих платформ. 1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...