Существует ли эквивалент ДОЛЛАРА (Динамическое Время выполнения Языка для.NET) на JVM? Я знаю, что мог пойти об и реализовать свои собственные динамические связывания и испускание моего собственного байт-кода с Java. Но там кто-либо - предварительно созданная платформа (как ДОЛЛАР), таким образом, я не должен изобретать велосипед?
Я не могу сказать, что я в курсе этих вещей, но Я считаю, что проект Da Vinci Machine примерно эквивалентен DLR. Это несколько другой подход, поскольку он меняет набор инструкций байт-кода, а не просто является библиотекой, расположенной поверх виртуальной машины, но оба проекта преследуют одно и то же намерение: упростить создание эффективных динамических языков для соответствующих платформ.
Нажмите кнопку 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.
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 нет эквивалента.