среда, 18 августа 2010 г.

С# 5 и метапрограммирование

В последние месяцы мы были очень заняты полировкой релиза NDepend 3, который теперь может интегрироваться в Visual Studio 2010, 2008, 2005.

Теперь NDepend - мой постоянный спутник, и делает мне каждый день программирования ярким. Настало время посмотреть в будущее. У нас есть тонны планов, ваши пожелания и комментарии к следующей версии вы можете оставить на английском языке в комментариях к оригинальной статье.

Наконец-то у меня есть время, чтобы посмотреть, что же происходит вне сферы NDepend.



Я наткнулся на речь Андерса Хейлсберга "C# 4 и будущее" и советую вам посмотреть ее, по крайней мере с 55-й минуты, если вы уже знакомы с C# 4. Андерс рассказывает, что компиляторы C# и VB.NET были переписаны с C++ на управляемый код. Цель - возможность использования парадигмы компилятора, как службы, которая позволит программистам на лету компилировать части кода из строки. Это так же просто, как вызов CSharpEvaluator.Eval (String): Delegate. Строка должна содержать определение метода и тело. Результатом является делегат, указывающий на только что введенный метод. Метод может быть выполнен по необходимости, с помощью делегата. Методы могут вводиться последовательно, чтобы сгенерировать код времени исполнения.

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

Вот определение из Wikipedia:

Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы (в частности, на стадии компиляции их исходного кода), либо программ, которые меняют себя во время выполнения (самомодифицирующийся код). Первое позволяет получать программы при меньших затратах времени и усилий на кодирование, чем если бы программист писал их вручную целиком, второе позволяет улучшить свойства кода (размер и быстродействие).

Подводя итоги:

C# 1. Новый язык для новой платформы.

С# 2. Добавлены обобщения для более строгой типизации, особенно при работе с коллекциями.

C# 3. Возможность писать строго типизированные запросы вне зависимости от источника. Способствует более декларативному способу программирования.

С# 4. Динамическое программирование.

C# 5. Метапрограммирование.

(От себя лично: я по прежнему считаю, что недостаток C# в отсутствие поддержки ненулевых ссылочных типов. Этот недостаток мешает мне каждый 8-и часовой рабочий день, когда я программирую на C#. И это – причина трети ошибок, с которыми сталкивается моя команда.

Если я правильно понял, C# 5 позволяет провести автоматический рефакторинг части исходного кода (во время компиляции или во время выполнения?) для того, чтобы выполнить его параллельно на нескольких ядрах. C# 5 позволит писать и поддерживать параллельный код проще. Но я думаю, что параллелизм – только одна область применения C# 5 (так же, как строго типизированные запросы – только одна из областей применения C# 3). Мы живем в интересное время.

И наконец, если вы не хотите ждать C# 5, и подражая Андерсу Хейлсбергу хотите поколдовать, вы можете поиграться с помощью компилятора Mono, который уже поддерживает режим “компилятор как служба” (читайте пост Мигеля). Обратите внимание, что на этот раз в Mono особое внимание было уделено тому, чтобы сделать эту версию кода Mono C# компилятора упакованным в стандартный проект Visual Studio.

Оригинал поста доступен на MySDN.ru

Автор статьи: Patrick Smacchia
Перевод: Трухин Юрий
Источник: codebetter.com

2 комментария:

  1. I personally suggest Hostgator for hosting. They are really professional, support staff is perfect and uptime good. Go to hostgator_dot_com and use "onecentcoupons" coupon code. You get first month just for free which is great.

    ОтветитьУдалить
  2. I added your blog to bookmarks. And i’ll read your articles more often! Before this, it would be possible for the government to arrest you just based on whatever you were saying, if they didn't like it.

    ОтветитьУдалить