Вопрос

Я прочитал бесчисленное количество блогов, сообщений и вопросов StackOverflow о новых возможностях C # 4.0.Даже новые функции WPF 4.0 начали появляться в открытом доступе.Что я не смог найти и хотел бы знать:

  1. Каковы основные изменения в CLR 4.0 с точки зрения разработчика C # / WPF?
  2. Каковы основные изменения в CLR 4.0 в целом?

Я думаю, что внутри компании большинство изменений касается новых динамических языков и параллельного программирования.Но есть ли какие-либо другие существенные улучшения?Потому что языковые улучшения - это всего лишь языковые улучшения.Вам просто нужен новый компилятор, и эти функции можно использовать с более низкой версией .Net, кроме версии 1.0 / 1.1 (по крайней мере, большинство из них можно использовать).

И если вышеупомянутые функции являются единственными, только для этих функций версия изменяется на 4.0, которая, я думаю, равна 4.0 из-за того, что основана на версии .Net 4.0 (т.Е.после 1.0/1.1, 2.0 & 3.0/3.5).Оправдано ли увеличение версии?

Отредактированный:

Как отметил Павел Минаев в комментариях, даже эти две функции не зависят от CLR.В версиях 3.0 и 3.5 также были улучшены скорость и другие улучшения.Так зачем же увеличивать версию?

Это было полезно?

Решение

Одна новая вещь CLR, о которой я знаю, - это форма структурной типизации для интерфейсов, структур и делегатов ради Поддержка NoPIA - по сути, это позволяет среде выполнения обрабатывать различные типы с эквивалентными определениями, как если бы они были одинаковыми - так что, если две сборки A и B каждый из них имеет COM-импортированный интерфейс IFoo объявленные в них, с тем же IID и теми же членами, среда выполнения будет рассматривать их как эквивалентные типы;итак, если есть экземпляр какого-то класса Foo реализующий [A]IFoo, вы можете применить его к [B]IFoo, и актерский состав будет работать.

Еще одна вещь - это возможность размещать несколько версий CLR бок о бок в одном процессе.Например, вы не можете разместить 1.x и 2.0 в одном процессе, но вы можете разместить 2.0 и 4.0.Основным преимуществом этого является возможность одновременной загрузки плагинов, написанных для любой версии CLR.

Один незначительный момент заключается в том, что еще несколько исключений стали неуловимыми, например StackOverflowException был в версии 2.0 - вы не можете поймать AccessViolationException больше, например.

Также, здесь это презентация PowerPoint на CLR 4.0 от PDC 2008.Возможно, сейчас это немного устарело, но большинство материалов, которые там упоминаются, похоже, есть в бета-версиях.

Другие советы

Произошло огромное количество изменений.

В самой среде CLR есть несколько изменений.Сборщик мусора изменяется для поддержки одновременного сбора gen0 / 1 и gen2 в режиме рабочей станции.Кроме того, произошли некоторые изменения в том, как реализована безопасность.Параллельный фреймворк изменяет часть реализации threadpool в среде CLR (которая не полностью управляется, но является частью самой среды выполнения).Кроме того, произошли некоторые изменения в системе типов, в основном связанные с новой поддержкой PIA COM.

Самые большие изменения, вероятно, заключаются в большем количестве изменений в библиотеке / фреймворке, а не в CLR.такие, как интеграция DLR в фреймворк и новый динамический тип.С точки зрения фреймворка, у вас есть реактивный фреймворк, расширения параллельной библиотеки, контракты кода, поддержка кортежей и множество небольших изменений (т.е.: Enum.TryParse, Lazy<T>, и масса других небольших, но приятных улучшений).

Я не верю, что есть какие-то новые инструкции IL.Новая среда CLR содержит улучшения в таких вещах, как встраивание и сборка мусора, которые выполняют ту же работу, что и среда CLR 2.0, но лучше.Виртуальная машина (такая как CLR или JVM) - это абстрактная концепция с множеством возможных реализаций.Я считаю, что CLR 4.0 - это та же абстрактная машина, что и в CLR 2.0, только с улучшенной реализацией.

Даже новый динамический материал - это всего лишь трюк компилятора с новыми API (в отличие от Java, где это предлагается в качестве нового кода операции.)

Если я ошибаюсь на этот счет, я хотел бы знать!

Для каждого выпуска команды разработчиков документации создают документы "Что нового".

Вот один из них для C # 4.0 Beta2: Что нового в Visual C # 2010

А вот и вариант для .NET Framework 4.0 Beta2: Что нового в .NET Framework Версии 4

Это наиболее полный список изменений, который вы можете найти.

Многие основные типы интерфейса и делегатов в CLR были обновлены для поддержки общая ковариация и контравариантность.Например, IEnumerable<T> был изменен на IEnumerable<out T>.

Я попытался просмотреть кое-что из нового материала C # в Reflector, чтобы посмотреть, есть ли что-то новое в нем:

  • динамичный типы преобразуются в объектs, с помощью магии компилятора, которая добавляет вызовы библиотеки для обработки привязки во время выполнения.
  • Необязательные параметры обрабатываются с помощью компилятора.Если вы вызовете Foo(int x = 5), не указав значение для x , вы увидите вызов как Foo(5) в Reflector .

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top