Невычислимое

Мы можем рассматривать компьютерную программу, как устройство, которое берет на вход набор целых чисел и выдает на выходе другой набор целых чисел. Компилятор языка C#, например, принимает на вход строки исходного кода, а это всего лишь набор огромных двоичных чисел. На выходе компилятора мы получаем либо диагностический текст, или строки IL-кода и метаданных, которые, опять-таки,…

0

Как убедиться, что вывод типов метода завершится?

Я все пропустил! Я подготовился к огромной волне анонсов по поводу выхода языка TypeScript, но форс-мажорные семейные обстоятельства оторвали меня от компьютеров, и я не добавил свою статью в очередь на публикацию. Достаточно будет сказать, что мне ОЧЕНЬ И ОЧЕНЬ нравится идея языка TypeScript. Постоянные читатели этого блога знают, что я длительное время занимался ECMAScript,…

0

Доступен сентябрьский выпуск Roslyn CTP

Я рад сообщить, что выпустили третий ознакомительный выпуск («Community Technology Preview») проекта Roslyn. Roslyn, если вы еще о нем не слышали, – это кодовое имя проекта, над которым я сейчас работаю; мы переписываем компиляторы языков C# и VB таким образом, чтобы они перестали быть «черными ящиками», на вход которых подается код, внутри происходит какая-то магия…

0

Статический анализ оператора «is»

  Прежде чем переходить к сегодняшнему невероятному приключению, я хотел бы поздравить всё подразделение разработки с потрясающим продуктом, который мы запускаем официально. (Я приложил очень мало усилий к разработке Visual Studio 2012 и языку C# 5.0, поскольку был очень занят проектом Roslyn). Асинхронные возможности в языках C# и VB являются моими любимыми; новых возможностей очень…

1

Загадка с оператором «is». Часть 2

Как я и говорил в прошлый раз, это загадка была довольно простой: мы получим такое поведение, если FooBar или тип локальной переменной x будут параметром типа (type parameter). Т.е.: void M<FooBar>() {   int x = 0;   bool b = x is FooBar;  // корректно, true если FooBar – это int.   FooBar fb…

1

Загадка с оператором «is». Часть 1

  Возможно, что в программе с некоторой локальной переменной x: bool b = x is FooBar; во время исполнения присваивается b значение true, даже если преобразование типов (явное или неявное) переменной x к FooBar запрещено компилятором! Т.е. выражение: FooBar foobar = (FooBar)x; в той же самой программе не будет компилироваться. Можете ли вы придумать подобный…

3

Не смешивайте out-параметры и LINQ

Я вернулся из ежегодного отпуска, проведенного в прекрасном месте на юго-западе Онтарио; прежде чем переходить к теме сегодняшнего поста, посмотрите на снимок, сделанный с помощью Windows Phone при возвращении домой. Мы находимся на высоте 37000 футов сразу за городом Биллингс, штат Монтана, за несколько минут до захода солнца: Все небо было заполнено молниями, которые, к…

1

Должен ли C# выдавать предупреждения на использование пустых ссылок

Как вы наверное знаете, компилятор языка C# анализирует константы для поиска недостижимого кода. В следующем методе компилятор предупреждает о том, что вызов метода является недостижимым. const object x = null; void Foo() {   if (x != null)   {     Console.WriteLine(x.GetHashCode());   } } Предположим, мы уберем “if” и оставим лишь вызов метода. const…

1

Когда преобразование типов им не является?

Мне очень часто задают вопрос о логике преобразования типов в языке C#, что, в общем-то, не удивительно. Преобразования типов является распространенной операцией и соответствующие правила довольно запутанные. Вот фрагмент кода, о котором у меня недавно спросили; я упростил его ради ясности: class C<T> {}class D{ public static C<U> M<U>(C<bool> c) { return something; }}public static…

1

Лучший совет, который мне когда-либо давали

Сейчас всего лишь небольшая ссылка: Прекраснейшие люди из InformIT (*) выпускают серию коротких статей по теме «лучший совет, который мне когда-либо давали», что, как мне кажется, должно быть очень интересными. Они попросили у меня пример совета, который мне давали, который помог в моей карьере программиста , хотя, как вы увидите, он на самом деле вообще…

0