Различные подходы к динамической типизации в CLR и JVM

.NET 4.0 представляет новую поддержку диспетчеризации вызовов для динамически типизированных объектов. Насколько я понимаю, это включает в себя:

  • без изменений в CLR
  • новые типы в BCL
  • новые компиляторы, которые преобразуют новый синтаксис в использование новых типов

В области Java люди обсуждают добавление нового dynamicinvoke байт-кода в JVM так что отправка обрабатывается JIT за абстракцией промежуточного языка.

Подход Java поддерживается многими значительными сторонами.

Это похоже на два принципиально разных подхода. В чем достоинства каждого из них и почему оба лагеря выбрали разные пути? Меня особенно интересуют гибкость и производительность обоих решений. Обе виртуальные машины в конечном итоге пытаются добиться одного и того же?


person Drew Noakes    schedule 20.10.2009    source источник
comment
Хотя я действительно не думаю, что в CLR есть какие-либо изменения, есть новое дополнение, называемое Dynamic Language Runtime (DLR), которое обрабатывает динамическую отправку.   -  person Joren    schedule 20.10.2009


Ответы (1)


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

Например. Sun избегала изменений при внедрении дженериков, поэтому реализация дженериков на Java еще не закончена. В то же время MS представила новые инструкции для дженериков.

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

Кстати, .NET 4.0 будет содержать версию CLR, хотя, AFAIK, это изменение версии будет вызвано обновленными системными библиотеками.

person elder_george    schedule 20.10.2009
comment
+1 спасибо за ответ. Да, я знаю, что это новая среда CLR, но, кстати, набор кодов операций тот же. Спасибо за ссылку на встроенное кеширование. Учитывая, что это новая среда CLR, знаете ли вы, почему MS решила не использовать возможность введения новой инструкции IL? - person Drew Noakes; 20.10.2009
comment
Прости. Нет достоверной информации. Но я думаю, здесь достаточно просто постоянной совместимости. - person elder_george; 20.10.2009
comment
Эта совместимость позволит запускать только исполняемые файлы, созданные для новой версии CLR, в старой среде CLR. Но новые версии BCL вводят новые API, которые в любом случае нарушают совместимость (например, даже самый последний пакет обновления 3.5SP1 нарушил совместимость с исходным 3.5 BCL), поэтому я не совсем верю аргументу совместимости здесь. Должно быть другое объяснение. - person Drew Noakes; 21.10.2009