Эквивалентный из ДОЛЛАРА для JVM?

Существует ли эквивалент ДОЛЛАРА (Динамическое Время выполнения Языка для.NET) на JVM? Я знаю, что мог пойти об и реализовать свои собственные динамические связывания и испускание моего собственного байт-кода с Java. Но там кто-либо - предварительно созданная платформа (как ДОЛЛАР), таким образом, я не должен изобретать велосипед?

12
задан thr 3 February 2010 в 13:32
поделиться

2 ответа

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

2
ответ дан 2 December 2019 в 21:02
поделиться

Нажмите кнопку Debug, Windows, Breakpoints, нажмите кнопку New, Break at function, введите System.Threading.SynchronizationContext.SetSynchronizationContext и нажмите кнопку OK.

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


Редактирование с помощью Ian Ringrose

Мне также пришлось отключить параметр «Включить только мой код» в конфигурации отладки.

Запустите Visual Studio 2008 и откройте меню Сервис > Параметры > Отладка > Общие. Если вы работаете под профилем Visual Basic, перед продолжением необходимо установить флажок в левом нижнем углу диалогового окна «Параметры» с пометкой «Показать все настройки» (в других профилях этот параметр не будет). Установите следующие настройки: Выключите настройку «Включить только мой код»

-121--1568414-

Существует возможность отладки классов рамки .NET. Все, что вам нужно сделать, это установить VS.NET, чтобы он смог загрузить символы отладки для рамки .NET с одного из серверов Microsoft.

Однако вы не сможете установить точку останова в методе .NET, но, вы сможете перейти в другой метод платформы .NET и во время отладки, и после того, как вы перейдете в этот метод (и VS.NET откроете файл, содержащий метод SetSynchronizationContext), вы сможете установить точку останова для этого метода.

Для получения информации о настройке VS.NET для отладки рамки .NET нажмите здесь

-121--1568415-

DLR представляет собой несколько различных элементов, некоторые из которых имеют прямые эквиваленты в Java, некоторые из которых существуют в различных формах и некоторые из которых не имеют эквивалентов. Некоторые из тех, у которых есть эквивалент , уже являются частью платформы, некоторые будут частью 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 Early Access ,и уже довольно давно.)

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

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

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

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

В пространстве Java эквивалентом является Attila Szegedi's (сопровождающий компилятора Rhino JavaScript для JVM) dynalang , который вдохновлен CommonLisp MOP. Однако это не законченная

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

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

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

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

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

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

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

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

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

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

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

12
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: