habrahabr

Roslyn: встреча .Net сообщества на CLRium #2

  • пятница, 9 января 2015 г. в 02:10:56
http://habrahabr.ru/company/luxoft/blog/247237/

Довольно долгое время я пытался изучить Roslyn, но как и все мы, столкнулся с единой проблемой: времени на это абсолютно не было. Как обычно решается этот вопрос? Мы идем на множество ресурсов и ищем доклады и статьи на интересующую нас тему и как по шаблону повторяем движения автора, который показывает как этим пользоваться. С чем мы сталкиваемся, когда ищем описания тем, предложенных на CLRium? Мы не находим ничего. Т.е., конечно, Google выдает что-то по запросам “Roslyn”, “Roslyn samples”, но все-таки это тысячу раз разжеванные примеры, и притом древние как мамонты по меркам выхода новых версий CTP. Это важно, т.к. наличие информации предполагает развитость той или иной инфраструктуры. А самая крутая и единственная статья по Roslyn на данный момент — это эта: Roslyn для автоматического перевода кода C# в 1С-код
Отсюда и возникли идеи рассказать на CLRium про Roslyn, RyuJIT, CoreFx, шаринг объектов между процессами и прочие вопросы, на которые сложно найти ответы в сети Интернет.

Итак, основные темы, которые мы готовы покрыть на докладе по Roslyn:
  • Мы не будем делать вводную: в интернете все доклады – это вводные и вы их видели
  • Мы разберем от простого к сложному, как устроены существующие правила в поставке Roslyn (C# 6 features). Но рассмотрим не список, как это делают на конференциях, а их исходный код
  • Как только мы их рассмотрим, мы рассмотрим существующие метрики на Roslyn. Как они написаны, как строятся метрики кода.
  • Далее мы напишем не просто «подсчитаем количество букв «а» во всех словах исходных текстов, мы напишем поддержку кортежей для C#:
        public (int, int) ReturnCoords() { return (0, 0); }
        var (x, y) = ReturnCoords();
    
  • И сделаем Nemerle оператор match.
    	match (i)
    	{
    	  | 1 => Console.WriteLine(1)
    	  | 2 => Console.WriteLine(2)
    	  | x => Console.WriteLine(x)
    	}
    	match (i)
    	{
    	   | x when (x < 0)  => WriteLine("negative")
    	   | x when (x > 36) => WriteLine("more than 36")
    	   | x when (x % 2 == 0)=> WriteLine($"valid even number $x")
    	   | x                  => WriteLine($"valid odd number $x")
    	}
    	
    	match (obj)
    	{
    	  | iDisp is IDisposable => iDisp.Dispose()
    	  | _ => (); 
    	}
    


Это очень сложные примеры, которые так просто не напишешь за вечерок и это то, что вы хотите найти в сети Интернет, но не можете.

Почитать и зарегистрироваться



Контакты: