Roslyn CTP

Wiele osób zna zapewne CodeDOM – bibliotekę, która pozwala generować kod źródłowy przez budowanie go z “klocków” opisujących każdy element kodu: deklarację metody, przypisanie wartości do zmiennej, itp. Nie dało się jednak w łatwy sposób wykonać operacji odwrotnej, tj. zamiany tekstu na drzewo obiektów, które można by łatwo i wygodnie analizować.

Problem ten doprowadził to powstania kilku parserów kodu napisanego w C# – na potrzeby kompilatora, środowiska VS i zapewne większość rozszerzeń do VS modyfikująca kod/wyświetlająca jakieś podpowiedzi.

Rozwiązaniem  tego problemu wydaje się, że bedzie projekt Roslyn, wydany niedawno jako CTP. Jak możemy przeczytać na blogu Erica Lipperta (The Roslyn Preview Is Now Available), Roslyn to nie tylko parser kodu, ale także przebudowanie infrastruktury kompilatora tak by można było wykorzystać jego API (Compiler as a Service). Ułatwi to budowanie aplikacji, która opiera się na analizie kodu nieskompilowanego, także gdy jest on nie dokońca poprawy, bo… dopiero powstaje!  Wersje Visual Studio po 2011 mają korzystać z Roslyn przy generowaniu IntelliSense’a.

Co zawiera CTP?

  • Wsparcie dla C# i VB
  • Compiler API udostępniające analizę składniową i semantyczną kodu. Jest to odpowiednik samego kompilatora.
  • Scripting API pozwalające na pisanie skryptów w C# i wykonywanie ich w swoim kodzie (coś jak IronRuby/IronPython). Dzięki temu w VS pojawia się okno C# Interactive
  • Workspace API używane to analizy kodu i refaktoringu w całej solucji. Zazwyczaj będzie używane w rozszerzeniach VS, ale nie jest od niego zależne.
  • Services API. Tutaj żyje IntelliSense i wszystkie inne możliwości jakie dostarcza nam środowisko podczas pisania. Przy pomocy Services API będziemy mogli rozszerzać je
  • Language Services dla C# i VB opare o Roslyn Services API.

Czego brakuje w CTP?

  •  Analiza semantyczna nie rozpoznaje jeszcze niektórych konstrukcji (np. async/await, argumenty opcjonalne w C#, w VB kuleje obsługa typów generycznych)
  • Przy analizie przepływu sterowania brakuje mi informacji o wyrzucanych wyjątkach.
  • Nie ma gotowego kompilatora w całości opartego o Roslyn (aczkolwiek można sobie taki napisać ;)

Przy pierwszym spotkaniu Roslyn sprawia naprawdę dobre wrażenie. Próbowałem kiedyś skorzystać z Code Model wbudowanego w VS – nie udało mi się. Po godzinie zabawy z Roslyn udało mi się podkreślić zieloną falą wszystkie metody, które rzucają wyjątek NotImplementedException i było to proste i nieskomplikowane. MSDN podaje krok po kroku jak napisać Quick Fixa znanego z Eclipse’a, który dodaje const do każdej zmiennej, która się do tego nadaje.

Roslyn na MSDN: Microsoft “Roslyn” CTP

Forum: The Roslyn Forum

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.