Dlaczego ktoś miałby inwestować czas w Microsoft „Roslyn”?

37

Właśnie czytałem niektóre białe księgi i przykłady z Microsoft „Roslyn” i koncepcja wydaje się bardzo interesująca. Z tego, co mogę powiedzieć, otwiera czarną skrzynkę, która jest kompilatorem i zapewnia interfejs, którego możemy użyć do uzyskania informacji i metryk dotyczących kodu napisanego w Visual Studio.

Wydaje się, że Roslyn ma także możliwość „skryptowania” kodu i kompilowania / wykonywania go w locie (podobnie jak CodeDom), ale z mojego doświadczenia spotkałem się tylko w ograniczonym zakresie dla tego rodzaju funkcjonalności.

Chociaż element analizy i metryk kodu jest interesującą przestrzenią ... istnieje już od bardzo dawna i istnieje wielu dostawców, którzy zainwestowali już dużo pieniędzy w narzędzia do analizy i refaktoryzacji kodu (np. ReSharper, CodeRush , nCover, itp.) i robią to całkiem nieźle!

Dlaczego którakolwiek firma miałaby się starać wdrożyć coś, co można by zaoferować za ułamek kosztów, kupując licencję na jedno z istniejących narzędzi?

Może przegapiłem kluczową funkcjonalność projektu Roslyn, która umieszcza go poza domeną wspomnianych narzędzi ...

Richard Hooper
źródło
4
Głównym punktem Roslyn jest więcej stażystów Microsoft - tworzenie łatwego w rozszerzaniu zarządzanego kompilatora C #. W ten sposób zespół może łatwiej wdrożyć i wypróbować nowe funkcje językowe. Także wdrażanie nowych algorytmów optymalizacji stanie się łatwiejsze.
JustAnotherUserYouMayKnowOrNot
1
Tak Penfold - Podejrzewam, że mogłeś przegapić kilka rzeczy. Czy oglądałeś wywiad z Dustin Campbells na Channel9? channel9.msdn.com/Events/Ch9Live/…
James Snell
3
Istnieje ryzyko opracowania udanych / zyskownych dodatków do produktów Microsoft, mogą one umieścić w następnej wersji.
JeffO
10
Ponadto możesz być pewien, że faceci za ReSharper zmoczą się na myśl o dodatkowej funkcjonalności, którą mogą podłączyć. Tak, napisali parser / analizator C #, ale koszt jednej funkcji znacznie spadnie, jeśli będą mogli wykorzystać rzeczywisty silnik MS C #.
Binary Worrier
2
Sprawdź skrypty, aby uzyskać ciekawe zastosowanie Roslyn. github.com/scriptcs/scriptcs
Ashley Davis

Odpowiedzi:

53

Wydaje się, że Roslyn ma także możliwość „skryptowania” kodu i kompilowania / wykonywania go w locie (podobnie jak CodeDom), ale z mojego doświadczenia spotkałem się tylko w ograniczonym zakresie dla tego rodzaju funkcjonalności.

Kompilacja i wykonywanie w locie to podstawowa zaleta Roslyn. Myślę, że możesz nie doceniać korzyści płynących z tej funkcji, ponieważ nigdy nie spotkałeś się z przypadkiem użycia, w którym naprawdę świeci. I to ma sens; potrzeba dynamicznej kompilacji jest prawdopodobnie niszową funkcją, ale posiadanie jej zapewnia pewne zaawansowane aplikacje, które bez niej byłyby znacznie trudniejsze.

Oto kilka przykładów z mojej głowy, w których kompilacja dynamiczna byłaby całkiem przydatna. Są inne sposoby na osiągnięcie tych wszystkich celów, ale Roslyn je ułatwia.

  • Posiadanie plików wtyczek, które są ładowane w czasie wykonywania, kompilowane i włączane do wykonywania aplikacji „nadrzędnej”.
  • Tworzenie DSL, które jest następnie tłumaczone na język C # w czasie wykonywania i kompilowane przy użyciu Roslyn.
  • Tworzenie aplikacji zorientowanej na programistę, która pobiera język C #, analizuje go, tłumaczy itp.
  • Porównywanie dwóch fragmentów kodu pod kątem różnic po kompilacji, w przeciwieństwie do różnic „powierzchniowych”, takich jak białe znaki. Jest to znane jako Semantic Diff .

Podsumowując, możesz nigdy nie znaleźć zastosowania dla Roslyn, w zależności od oprogramowania, które spędzasz na pisaniu. Istnieje jednak wiele przypadków użycia, w których Roslyn wnosi wiele do stołu. Żadne z wymienionych narzędzi nie udostępnia tej funkcji. Nie mogli też opierać się na swojej architekturze i celu.

RationalGeek
źródło
+1 za różnicę półmatyczną Dla zainteresowania oto link do opracowywanego produktu komercyjnego, który wykorzystuje Roslyn do porównania semantycznego. (Pełne ujawnienie - nie mam z nimi żadnego związku, właśnie widziałem ich produkt wspomniany na blogu Jona Skeeta )
MarkJ
@RationalGeek - Dzięki za przykłady, nie zastanawiałem się nad przykładem trasy DSL => C # ... Mogę sobie wyobrazić kilka senariów, w których byłoby to bardzo przydatne w aplikacjach biznesowych. Wiele innych przykładów, które widziałem (nie tylko twój), w dużym stopniu pokrywają się z narzędziami do refaktoryzacji, o których wspomniałem wcześniej. Inna część mojego pierwotnego pytania brzmiała: dlaczego ktoś zainwestuje pieniądze w opracowanie narzędzi do przeprowadzenia tej analizy, skoro są jakieś doskonałe, wstępnie wyrzucone za ułamek kosztów ... ale przypuszczam, że zawsze jest miejsce na inne (mam nadzieję lepiej) zestaw narzędzi! :)
Richard Hooper
@ Penfold zawsze jest miejsce na nowe narzędzia programistyczne ... :-)
RationalGeek
1
Semantic diff służy nie tylko do kompilacji. Każdy system kontroli wersji potrzebuje różnicy, a większość używa głupiej różnicy. Wystarczy zamienić 2 funkcje i zobaczyć bałagan, gdy diff uważa, że ​​może pasować do kilku (i {.
MSalters
Oto duży: automatyczna ponowna kompilacja podczas pisania aplikacji ASP.NET BEZ konieczności przebudowywania i ponownego wdrażania aplikacji internetowej. Ostatecznie ogłoszony w ASP.NET vNext, dosłownie sprawi, że praca w języku C # będzie taka sama jak język skryptowy ... z wyjątkiem tego, że jest bezpieczny i wydajny. Widzę to jako początek tego ogólnego podejścia, ostatecznie przejdzie do aplikacji bogatych klientów (mobilne, stacjonarne), abyś mógł zmienić swój kod w czasie wykonywania. Z aplikacjami internetowymi jest o wiele łatwiej, ponieważ z definicji każde żądanie jest bezstanowe - ale z czasem trafi także do innych architektur aplikacji.
Marchy
12

Jestem pewien, że firmy dostarczające narzędzia (np. JetBrains *) są bardzo zainteresowane Roslyn. Microsoft chce ułatwić tworzenie narzędzi, ponieważ dobre narzędzia zachęcają do korzystania z ekosystemu Microsoft.

* Na blogu JetBrains ( ten wpis ) JetBrians ogłosił, że nie będzie używać Roslyn. Wyobrażam sobie jednak, że każdy nowy konkurent JetBrains (który nie ma wcześniejszej bazy kodu do pracy) użyje Roslyn; daje im to przewagę.

Pytanie 6 na 10 pytań, 10 odpowiedzi na Roslyn :

6: Jakie są praktyczne zastosowania Roslyn? Jak pomoże mi to jako programista?

Jednym z pierwszych zastosowań Roslyn, które przychodzą na myśl, jest silnik reguł biznesowych. Przed Roslyn ewaluacja makr użytkownika zwykle polegała na implementacji języka Visual Basic for Applications (VBA), wywoływaniu DLR z wyrażeniami Ruby lub wysyłaniu powłoki do kompilatora wiersza poleceń z dynamicznie generowanym kodem Visual Basic lub C # i uzyskiwanie wyniku działania ten kod. Te metody były mniej niż idealne.

Roslyn z łatwością pozwoli na dynamiczną kompilację i wykonywanie kodu C # i (ewentualnie) kodu Visual Basic za pomocą funkcji Evaluate (), jak pokazano w artykule Erica Vogela „Korzystanie z Roslyn Scripting API w C #”. Makra użytkownika napisane w tym samym języku co aplikacja ułatwią programistom obsługę makr użytkownika reprezentujących reguły biznesowe.

Refaktoryzacja kodu staje się znacznie łatwiejsza dzięki Roslyn. Przed Roslyn twórcy takich narzędzi, jak DevExpress CodeRush i Refactor Pro oraz JetBrains ReSharper musieli odtworzyć wiele operacji kompilatora jako podstawę swoich produktów. Dzięki Roslyn deweloperzy refaktoryzacji mogą bezpośrednio skorzystać z istniejących możliwości kompilatora. Mogę sobie wyobrazić wygląd pakietów NuGet do instalowania indywidualnych reguł refaktoryzacji, gdy Roslyn będzie powszechnie dostępna.

Brian
źródło
4
„Makra użytkownika napisane w tym samym języku co aplikacja ułatwią programistom obsługę makr użytkownika reprezentujących reguły biznesowe”. - co może pójść nie tak!
gbjbaanb
10

Z niecierpliwością czekam na dzień, w którym wszystkie kompilatory rutynowo oferują Compiler as a Service (CaaS). Musimy przestać myśleć, że kompilatory emitują tylko kod wstępnego linkera i zacząć myśleć, że kompilatory emitują drzewa, które można przekształcić w wiele celów. Wszystkie kompilatory powinny mieć funkcję do emitowania drzew i opcjonalnie JSON / XML. Dane wyjściowe można następnie przekształcić w wiele typów obiektów docelowych, takich jak upiększony ten sam język, C, źródło IL, IL binarny, Java, JavaScript, LLVM, plik wykonywalny PIC, a nawet kod pre-linkera.

Piszę kompilatory na życie. Moi klienci są sprzedawani na CaaS, ponieważ otwiera to drogę do fantastycznej elastyczności, przenośności i analizy.

Jestem naprawdę rozczarowany, że Microsoft nie wdrożył CaaS dawno temu. Na przykład można go użyć jako ścieżki migracji dla VB6 do czegoś innego lub .Net do C ++.

BSalita
źródło
1

Prosta odpowiedź na pytanie, dlaczego MSFT inwestuje w Roslyn, polega na tym, że ich obecna baza kodu dla kompilatora C # ma teraz 5 wersji - 11 lat. To długi czas na zarządzanie bazami kodu. Ponadto, ponieważ przepisują tekst, postanowili zainwestować w to, aby wszystkie jego elementy wewnętrzne były widoczne jako interfejsy API.

John Tasler
źródło