450 likes | 633 Views
Модели программирования и платформа Microsoft .NET 4.0. Дмитрий Васюра. Microsoft Corporation. Руководитель разработки среды Visual Basic. Содержание. Зачем все это нужно ? Новое в CLR и Base Class Libraries (BCL) Parallel Task Library Динамическое программирование Code Contracts
E N D
Модели программирования и платформа Microsoft .NET 4.0 Дмитрий Васюра Microsoft Corporation Руководитель разработки среды Visual Basic
Содержание • Зачем все это нужно? • Новое в CLR и Base Class Libraries (BCL) • Parallel Task Library • Динамическое программирование • Code Contracts • Managed Extensibility Framework • Итоги
Проблема Поддержка Начальная разработка
День из жизни Development Lead-а Дмитрий Васюра Руководитель разработки среды Visual Basic Microsoft Corporation Демонстрация
Базовые библиотеки: Основы • Tuple<…> – упорядоченный набор значений • Lazy<T> –отложенная инициализация • System.Numerics • BigInteger – работа с длинными целыми • Complex – комплексные числа • Co и Contra variance – IEnumerable<T>
Базовые библиотеки: System.IO • IEnumerableна Directory и DirectoryInfo – ускоренный просмотр файлов • MemoryMappedFiles – работа с большими файлами на основе Windows API-s • Compression – увеличение коэффициента сжатия, поддержка архивов размером > 4GB
Базовые библиотеки: Коллекции • System.Collections.Concurrent • По возможности lock free, иначе thread-safe • IProducerConsumerCollection<T> - неблокирующий интерфейс • ConcurrentQueue<T> • ConcurrentSet<T> • ConcurrentDictionary<T> • И другие • System.Collections.Generic • ISet<T> - абстракция множеств • SortedSet<T> - множество на основе сбалансированных деревьев • HashSet<T> - множество на основе HashCode
Параллельное программирование • Parallel Task Library • Технология и инструменты для цивилизованной разработки с multi-threaded приложениями • Упрощает реализацию параллельного кода • Эффективно управляет ресурсами для оптимальной масштабируемости • Адаптируется к железу без перекомпиляции
Параллельное программирование • Параллелизм данных (класс Parallel) • Циклы • Parallel.For • Parallel.ForEach • LINQ/query • AsParallel • Возможность настройки алгоритма распределения и назначениязадач
Параллельное программирование • Новый набор примитивов для эффективного решения параллельных задач • System.Threading.Tasks.Task – отдельный элемент работы • Parallel.Invoke – запуск и распределение задач • CancellationToken(Source) – стандартный способ асинхронной отмены • Barrier и другие классы
Динамическое программирование Calculator calc = GetCalculator(); int sum = calc.Add(10, 20); object calc = GetCalculator(); TypecalcType = calc.GetType(); object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, newobject[] { 10, 20 }); int sum = Convert.ToInt32(res); ScriptObject calc = GetCalculator(); object res = calc.Invoke("Add", 10, 20); int sum = Convert.ToInt32(res); Статически типизоровано как dymanic dynamic calc = GetCalculator(); int sum = calc.Add(10, 20); Динамическое приведение Динамический вызов
Динамическое программирование IronPython IronRuby C# VB.NET И т.д. Dynamic Language Runtime Expression Trees Dynamic Dispatch Call Site Caching ObjectBinder JavaScriptBinder PythonBinder RubyBinder COMBinder
Динамическое программирование • Достоинства DLR • Реализация динамических языков на платформе .NET (например IronRuby, IronPython) • Использование динамических конструкций в статических языках (например VB, C#) • Переиспользование и разделение кода и библиотек из разных сред • Быстрое разрешение и исполнение динамических операций
Проблема CRASH !!! CRASH !!! CRASH !!! CRASH !!! Поддержка CRASH !!! CRASH !!! Начальная разработка
Code Contracts • Новая библеотека в .NET 4.0 • Позволяет задавать и доказывать пре- и пост-условия а также инварианты в коде • Многоуровневая настройка проверки: • Во время исполнения • Полная проверка • Только требуемые условия • Статическая (во время компиляции) • Доказательство условий и выявление проблемдо запуска приложения
Code Contracts Дмитрий Васюра Руководитель разработки среды Visual Basic Microsoft Corporation Демонстрация
Code Contracts • Доступны в любом .NET приложении • Полная поддержка в среде Visual Studio 2010 • Гибкая система настройки позволяет балансировать диагностику с производительностью
Проблема А давайте добавим вот это... И без этого тоже никак... Поддержка Начальная разработка
Managed Extensibility Framework • Новая библиотекав .NET Framework • Расширяет переиспользоание приложений и компонентов • Позволяет перейти от статической компиляциикдинамической композиции
Исходные положения • Приложения должны бытьоткрыты для расширения, но закрыты для изменения • Разработчик не может заранее предусмотреть все возможные потребности расширения приложения в будущем во время его разработки
Принципы MEF • В MEF приложения строятся из частей (Parts) • Части... • Экспортируются компонентами-поставщиками (Export) • Импортируются частями-потребителями (Import) • Связываются MEF (Compose)
Часть – на сцену! publicclassSimpleMortgageCalculator : IMortgageCalculator { publicILogger Logger { get; set; } publicfloat Calculate() { Logger.Log("Calculating Mortgage"); return ...; } } Часть A
Экспорт [Export(typeof(IMortgageCalculator))] publicclassSimpleMortgageCalculator : IMortgageCalculator { publicILogger Logger { get; set; } publicfloat Calculate() { Logger.Log("Calculating Mortgage"); return ...; } } Часть A
Импорт [Export(typeof(IMortgageCalculator))] publicclassSimpleMortgageCalculator : IMortgageCalculator { [Import(typeof(ILogger))] publicILogger Logger { get; set; } publicfloat Calculate() { Logger.Log("Calculating Mortgage"); return ...; } } Часть A
Композиция • Каталог (Catalog) предоставляет части Каталог
Композиция • Контейнер (Container) соединяет части Каталог
Композиция • Виды каталогов AggregatingCatalog DirectoryCatalog AssemblyCatalog TypeCatalog
Managed Extensibility Framework Дмитрий Васюра Руководитель разработки среды Visual Basic Microsoft Corporation Демонстрация
Метаданные [Export(typeof(IMortgageCalculator))] [ExportMetadata(“Calculation”, “Simple”)] [ExportMetadata(“Tax Aware”, null)] publicclassSimpleMortgageCalculator : IMortgageCalculator { publicILogger Logger { get; set; } publicfloat Calculate() { Logger.Log("Calculating Mortgage"); return ...; } } Часть A
Отложенный импорт [Import(typeof(ILogger))] publicILogger Logger { get; set; } Часть A Часть B
Отложенный импорт [Import(typeof(ILogger))] publicILoggerLazy<ILogger>Logger { get; set; } Часть A Lazy <B>
Managed Extensibility Framework Дмитрий Васюра Руководитель разработки среды Visual Basic Microsoft Corporation Демонстрация
Это может зайти далеко... [Export(typeof(IMortgageCalculator))] [ExportMetadata(“Calculation”, “Simple”)] [ExportMetadata(“Tax Aware”, null)] [ExportMetadata(“This”, “foo”)] [ExportMetadata(“That”, “bar”)] Часть A
Это может зайти далеко... [Export(typeof(IMortgageCalculator))] [ExportMetadata(“Calculation”, “Simple”)] [ExportMetadata(“Tax Aware”, null)] [ExportMetadata(“This”, “foo”)] [ExportMetadata(“That”, “bar”)] [Export(typeof(IMortgageCalculator))] [CalcCapabilities( Mode=Complexity.Simple, TaxAware=true, This=“foo”, That=“bar”)] Part A
Managed Extensibility Framework Дмитрий Васюра Руководитель разработки среды Visual Basic Microsoft Corporation Демонстрация
Жизненный цикл частей Shared Non-Shared Контейнер Контейнер Часть B Часть B Часть B ЧастьA
Managed Extensibility Framework Дмитрий Васюра Руководитель разработки среды Visual Basic Microsoft Corporation Демонстрация
Проблема… Поддержка Начальная разработка
Решение Поддержка Начальная разработка
Итоги • .NET Framework 4.0 и Visual Studio 2010 открывают новые возможности для эффективной разработки надежных и гибких приложений • Ваше мнение очень важно! • Скачивайте Beta2 • Пользуйтесь ресурсами • Делитесь с нами Вашими отзывами
Ресурсы • .NET Framework на MSDNhttp://msdn.com/netframework • Parallel Computing Developer Centerhttp://msdn.com/concurrency • Code Contractshttp://msdn.microsoft.com/en-us/devlabs/dd491992.aspx • Managed Extensibility Frameworkhttp://www.codeplex.com/MEF
Вопросы Дмитрий ВасюраРуководитель разработки среды Visual Basic Dmitriy.Vasyura@microsoft.com http://msdn.com/netframework • Вы сможете задать вопросы докладчику в зоне «Спроси эксперта» в течение часа после завершения этого доклада