Каково определяющее свойство локальной переменной?

Если вы спросите у десяти C#-программистов о том, что такое «локальная переменная», то вы получите десять разных ответов. Самым распространенным ответом будет, что локальная переменная – это «ячейка памяти в стеке». Однако это описывают локальную переменную в терминах деталей реализации; в спецификации языка C# ничего не говорится о том, что локальные переменные должны храниться в…

0

Почему стек?

В прошлый раз мы говорили о том, почему компиляторы всех языков платформы .NET компилируют исходный код в «промежуточный язык» или в IL, который затем преобразуется jitter-ом в машинные инструкции: поскольку это существенно сокращает расходы на разработку многоязыковой платформы, работающей на разном оборудовании. Сегодня я хочу рассказать о том, почему язык IL является именно таким, каким…

3

Разоблачение другого мифа о значимых типах

Вот еще один миф о значимых типах, который я иногда слышу: "Очевидно, использование оператора new со ссылочным типом приводит к выделению памяти в куче. Но значимый тип потому и называется значимым, что хранит значение, а не ссылку на него. Таким образом, с помощью оператора new, примененного к значимому типу не выделяется дополнительной памяти. Точнее, используется…

2

Правда о значимых типах

Если вы читаете мой блог какое-то время, то вы должны знать, что меня беспокоит миф о том, что «значимые типы (value types) располагаются в стеке». К сожалению, в нашей собственной документации, так и во многих книгах, существует масса примеров прямо или косвенно поддерживающих этот миф. Я выступаю против него по нескольким причинам: 1. Обычно он…

2

В чем разница между деструктором и методом завершения?

Сегодня будет еще один диалог и еще один эпизод из моей постоянной рубрики «в чем разница?». В чем разница, если она вообще существует, между «деструктором» (destructor) и «методом завершения» (finalizer)? Оба понятия являются механизмом очистки ресурсов после того, как в них пропадает необходимость. Когда меня спросили об этом, я сначала подумал, что между этими понятиями…


Отсутствие доказательств – не доказательство отсутствия

Отсутствие доказательств – не доказательство отсутствия Сегодня – ещё два слегка неверных мифа о C#. Как вы, вероятно, знаете, C# требует, чтобы всем локальным переменным были явно присвоены значения перед тем, как из них читают, но предполагает, что всем полям экземпляра класса изначально присвоены их значения по умолчанию. Порой я слышу такое объяснение причин этого:…


Блоки итераторов, Часть шестая: почему запрещён небезопасный код?

Есть три хороших причины не разрешать блоки unsafe в блоках итераторов. Во-первых, это весьма маловероятный сценарий. Цель блоков итераторов – в облегчении написания итератора, который обходит некоторый абстрактный тип данных. Это, скорее всего, будет полностью управляемый код; так что сценарий не входит в проект. Во-вторых, этот сценарий представляет дикое смешение «уровней». Вы трактуете уровень абстракции…


Блоки итераторов, Часть вторая: Почему нет out- или ref- параметров?

Долгое и подробное обсуждение того, как именно мы реализовали блоки итераторов отняло бы довольно много моего времени, и продублировало бы работу, уже хорошо выполненную другими. Я призываю вас начать с плавного введения – цикла статей Реймонда: часть 1, часть 2, часть 3. Если вы хотите подробнее рассмотреть, как готовят эти сосиски, то статья Джона весьма…


Void не вариантен

[ДОПОЛНЕНИЯ ниже] Некоторое время назад я описал вид вариантности, который мы поддерживаем, начиная с C# 2.0. При присваивании группы методов делегату такого типа, что и выбранный метод, и делегат возвращают ссылочный тип, то разрешено ковариантное преобразование. То есть, вы можете сказать: Giraffe GetGiraffe() { … }…Func<Animal> f = GetGiraffe; Это работакт логично, потому что всякий,…


“Недостаточно Памяти” не относится к физической памяти

Я начал программировать на x86 машинах во время периода значительных и быстрых изменений в стратегиях управления памятью, применяемых процессорами Intel. Мучения от необходимости понимать различия между «расширенной памятью» и «дополнительной памятью» с годами, к счастью, утихли, вместе с точными знаниями об этих различиях. Вследствие этого жизненного опыта, я иногда удивляюсь тому факту, что многие профессиональные…