воскресенье, 27 октября 2013 г.

Интервью с легендой C# Эриком Липпертом

Потрясающее интервью с замечательным человеком и программистом.

Материал взят из журнала DotNetCurry посвященному технологиям основанным на платформе .NET. 


Дорогие читатели, мы очень рады видеть Эрика Липперта в этом номере журнала DNC. Эрик не нуждается в представлении людям знакомым с C#, но для остальных Эрик известен своей работой в команде разработчиков компилятора языка С#. Он посвятил значительную часть своей карьеры компании Microsoft, работая на различных должностях. До того как придти в Microsoft, Эрик работал в компании Watcom. Наши "старички" помнят Watcom как компанию, которая создала очень хорошие компиляторы для языков C++ и Fortran. В настоящее время Эрик работает в компании Coverity, помогая создавать продукты статического анализа кода.

четверг, 24 октября 2013 г.

Какие структуры данных используются в .NET

Я собрал некоторую информацию о временной сложности и о базовых структурах данных лежащих в основе простых коллекций и словарей в .NET. Было сложно найти эту информацию как в официальных источниках, таких как MSDN так и на не официальных источниках, так как информация отличалась, поэтому я использовал Reflector и фактически использовал реализацию классов для подтверждения информации.

Простые коллекции

Тип
Структура данных
Пояснение
List<T>
Массив
Обычный список использующий динамический массив
SortedSet<T>
Красно-черное дерево
Список использующий красно-черное дерево

Временная сложность

Тип
Получить i - элемент
Поиск
Добавление в конец
Вставка
Удаление
List<T>
O(1)
O(n)
O(1)*
O(n)
O(n)
SortedSet<T>
Не доступно
O(log n)
O(log n)
O(log n)
O(log n)

* Сложность метода List.Add является линейной O(n) когда добавление элемента требует увеличение размера массива лежащего в основе списка.

вторник, 3 сентября 2013 г.

foreach or for that is the question

Вопрос о выборе цикла for/foreach стар, как мир. Все мы слышали, что foreach работает медленнее for-а. Но не все знаем почему… А вообще так ли оно? 

Когда я начинал изучать .NET, один человек сказал мне, что foreach работает в 2 раза медленнее for-а, без каких-либо на то обоснований, и я принял это как должное. Теперь, когда чьих-то слов мне мало, я решил написать эту статью.

В этой статье я исследую производительность циклов, а так же уточню некоторые нюансы.

.NET и паттерны проектирования

Шаблон проектирования или паттерн — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.

Кажется, это определение мы слышали тысячу раз… Помимо знания терминов и паттернов интересно знать, как они применяются в реальных проектах.

В статье я рассмотрю несколько наиболее популярных паттернов используемых в .NET. Некоторые из них глубоко интегрированы в инфраструктуру .NET, в то время как другие просто применяются при проектировании базовых классов в BCL.

.NET 4.5 — обновление на месте .NET 4.0

Вместе с бета версиями VS 2011 и Windows 8 многие люди будут устанавливать, и разбираться с .NET 4.5. В .NET 4.5 добавлено много новых усовершенствований, которые являются достаточно прозрачными, но важно понять, как с точки зрения CLR она работает на вашей машине.

Когда .NET 4.5 устанавливается она, фактически, заменяет .NET 4.0 на вашей машине. .NET 4.0 перезаписывается новой версией .NET 4.5, что в соответствии со словами Microsoft гарантирует 100%-ую совместимость. 100% совместимость звучит привлекательно, но все мы знаем, что добиться такого результата достаточно сложно. Но есть вещь гораздо более интересная, чем обратная совместимость, которая делает ситуацию с разворачиванием .NET 4.5 неудобной в лучшем и запутанной в худшем случае.