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

    Довольно долгое время я пытался изучить 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()
      	  | _ => (); 
      	}
      


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

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



    Контакты:

    Luxoft

    116,00

    think. create. accelerate.

    Поделиться публикацией

    Похожие публикации

    Комментарии 10
      +1
      Всё это очень интересно и даже хотелось бы прямо сейчас, а не потом.

      Вопрос на понимание современного состояния Roslyn:
      Приведенные примеры могут быть написаны в студии в обычном файле кода (*.cs) и студия не будет на них ругаться? позволит запустить? и даже продебажить?
        0
        Форк языка будет поддерживаться только компилятором, поддержки IDE не будет.
          0
          А если написать расширение для VS которое будет обеспечивать Inellisense и цветовую раскраску? Не чрезмерно сложно?
            0
            Я пока на это не смотрел. Для этих целей рекомендую смотреть на nemerle и nitra
              0
              При открытости Roslyn я бы не рассчитывал, что откроют код VisualStudio или ReSharper.

              Можете посмотреть OmniSharp — сервис, за счёт которого реализована поддержка C# в куче редакторов. Основывается на NRefactory — куске SharpDevelop.

              Готовьтесь к тому, что вы лишитесь всех инструментов и всё будете реализовывать с нуля. То есть занятие по определению странное.

              Вам чего конкретно не хватает-то? Тот же match через версию будет.
                0
                > Вам чего конкретно не хватает-то?

                Не то что не хватает, но вижен есть, что будет полезен навык создания DSL и «улучшайзеров» к VS (цвет, интеллисенс, дополнительные вью ...).

                Например, можно встроит Prolog в код C#. С точки зрения C# это будет блок данных. А VS будет разукрашивать и подсказывать конструкции Prolog.

                Может быть, MVVM можно будет очень компактно написать. Скажем, вместо реализации INotifyPropertyChanged просто добавить пару символов к определению свойства.

                Метапрограммирование позволяет реализовать много чего интересного и, увы, сложного можно нагородить. Но для себя можно :)
                  0
                  Скажем, вместо реализации INotifyPropertyChanged просто добавить пару символов к определению свойства.

                  Это уже сейчас можно делать через кучу разных инструментов (например Fody.PropertyChanged).

                  А вот возможность встраиваемых DSL-ей — интересна
                    0
                    Интеллисенс и цвет написать и улучшить-то можно, это вполне подъёмная задача. Более того, с приходом Roslyn (или на базе ReSharper) это делать довольно просто. Просто в момент, когда вы меняете язык, вы лишаетесь того, что уже есть. А это дофига. Вам вряд ли понравится результат.

                    Например, можно встроит Prolog в код C#. С точки зрения C# это будет блок данных.

                    Не понял, как вы себе это представляете.

                    Скажем, вместо реализации INotifyPropertyChanged просто добавить пару символов к определению свойства.

                    Для INotifyPropertyChanged существует 100500 способов уже сейчас. Атрибут на класс/свойство — и готово.

                    Метапрограммирование позволяет реализовать много чего интересного и, увы, сложного можно нагородить.

                    Может, сразу взять другой язык за основу? :)
            0
            На тему Roslyn очень рекомендую курс Bart De Smet'а на Pluralsight. Достаточно подробно и интересно.
              0
              У меня была еще в 2011 про Рослин статья habrahabr.ru/post/133340/ Через два года правда MS уже сами это реализовали)
              А зачем для C# match, если нет алгебраических типов?

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое