• Когда this == null: невыдуманная история из мира CLR

      Довелось как-то раз отлаживать вот такой код на C#, который «на ровном месте» падал с NullReferenceException:

      	public class Tester {
      		public string Property { get; set; }
      		public void Foo() {
      			this.Property = "Some string"; // NullReferenceException
      		}
      	}
      

      Да, вот на этой самой строчке с присвоением свойства падал NullReferenceException. Что за дела, думаю — неужели рантайм перестал проверять наличие экземпляра перед вызовом экземплярных методов?

      Как оказалось — в некотором роде да, перестал. Правда, и компилятор оказался не тем, за кого себя выдаёт, да и проверки вовсе не гарантированы рантаймом… Подробнее — под катом.
      Читать дальше →
    • Макросы и квазицитаты в Scala 2.11.0

        Не так давно состоялся релиз Scala 2.11.0. Одним из примечательных нововведений этой версии являются квазицитаты — удобный механизм для описания синтаксических деревьев Scala с помощью разбираемых во время компиляции строк; очевидно, что в первую очередь этот механизм предназначен для использования совместно с макросами.

        Удивительно, но на хабре пока тему макросов в Scala рассматривают не слишком-то активно; последний пост
        с серьёзным рассмотрением макросов был аж целый год назад.

        В данном посте будет подробно рассмотрено написание простого макроса, предназначенного для генерации кода десериализации JSON в иерархию классов.
        Читать дальше →
        • +25
        • 11,1k
        • 8
      • Фильтры исключений в CLR

          Привет, хабралюди. Сегодня мы рассмотрим один из механизмов CLR, который напрямую недоступен для разработчиков на языке C# — фильтры исключений.

          Опрос среди моих знакомых программистов на C# показал, что они (само собой) никогда этим механизмом не пользовались и даже не знают о его существовании. Поэтому предлагаю всем любознательным ознакомиться с текстом статьи.

          Итак, фильтры исключений — это механизм, который позволяет блоку catch декларировать предусловия, которым должно удовлетворять исключение, дабы быть пойманным данным блоком. Этот механизм работает не совсем так же, как выполнение проверок внутри блока catch.

          Под катом — код на VB.NET, F#, CIL и C#, а также проверка различных декомпиляторов на обработку механизма фильтров.
          Читать дальше →
          • +33
          • 13,2k
          • 9