devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
4 minut

C# jako język skryptowy? Meet ScriptCS


14.03.2013

O tym, że Microsoft chciałby “uskrypcić” C#, pierwszy raz usłyszałem w 2009 roku na MVP Summit. Efektem takich zapowiedzi jest projekt Roslyn – czyli Compiler As A Service. Idea bardzo interesująca i zacna, jej implementacja – z tego co czytałem – również.

Glenn Block (m.in.) wziął Roslyn, wziął NuGeta, wziął C#, wziął fajny pomysł i zainicjował projekt ScriptCS.

Idea jest prosta (wyjaśniona w większych szczegółach na blogu Glenna: “scriptcs – Living on the edge in C# without a project on the wings of Roslyn and Nuget“):

  • piszemy C#
  • piszemy tyle C# ile nam potrzeba, tzn. tworzymy klasy tylko wtedy jeśli chcemy mieć klasy – jeśli nie to nie
  • do zależności wykorzystujemy NuGet
  • bez żadnych csproj/sln uruchamiamy swoje skrypty – i działają

Prosto, szybko i przyjemnie.

Po niekolei (tzn w odwrotnej kolejności) zaprezentuję na najbanalniejszym przykładzie o co chodzi:

W celu zobaczenia czegoś takiego na konsoli po wywołaniu “scriptcs first_script.csx”:

image

trzeba stworzyć plik “first_script.csx” i wypełnić go kodem C#. Zwróćcie uwagę, że potrzebna jest tylko jedna linjka, bez żadnych klas i przestrzeni nazw:

 System.Console.WriteLine("hello from ScriptCS!"); 

Oprócz tego, obok tego pliku, tworzymy katalog “packages”. Wymóg istnienia tego katalogu nawet jeśli nie jest potrzebny to chyba jakiś bug, ale nevermind.

Oczywiście wykonanie powyższej komendy zakłada, że plik “scriptcs.exe” jest dodany do PATH. Musimy tą zmienną środowiskową zmodyfikować dopisując do niej katalog /bin/debug powstający w wyniku kompilacji projektu ScriptCS.

Kompiluje się bardzo prosto: wystarczy wywołać “msbuild ScriptCS.sln” w głównym katalogu repozytorium. A repozytorium trzeba najpierw zaciągnąć z githuba:

git clone https://github.com/scriptcs/scriptcs.git

Na samym początku jednak warto jeszcze zainstalować nuget cmdline bootstrapper.

… i to wszystko odwrotnie trzeba zrobić. Miłej zabawy!

Ale to jeszcze nie koniec.

Bo na przykład warto wiedzieć, że już powstał plugin do Sublime Text pozwalający wykorzystać ScriptCS do uruchamiania kodu C# z poziomu tego niesamowitego edytora – wystarczy ctrl+B:

clip_image001

Trzeba też zdawać sobie sprawę że ten powyższy kod to tylko popierdułka i żadne mecyje. Polecam spojrzeć na ciekawsze przykłady zastosowania: https://github.com/scriptcs/scriptcs-samples. Znajdziecie tam m.in. przykład SignalR, WPF albo coś co mózg rozwala: uruchomienie NancyFx z poziomu ScriptCS!

Nasuwa się pytanie: dlaczego wcześniej nikt czegoś takiego nie napisał?

Wiem, że można pisać kod C# inline w Powershell i go wykonywać, jak pisał na przykład Wiktor Zychla, ale wnioskuję z posta przytoczonego, że PS wymaga kompletnych struktur C#, razem klasą chociażby – overhead, którego pozbywamy się w ScriptCS.

Ale jak przy Powershell jesteśmy… Dzięki temu projektowi Doug Finke (Powershell MVP) puścił na Twitterze link (https://gist.github.com/dfinke/5148895#file-psroslyn-ps1) do czegoś co pozwala na taki kod w Powershell, obadajcie, wypas!:

PS C:\> Invoke-Csx @"
using System.Linq;
Enumerable.Range(1, 10).Select(x => x * x);
"@ | Where {$_ % 2 -eq 0} | ForEach {$_*2}

Tak więc zapraszam do eksperymentów! Projekt powoli chyba zaczyna osiągać taką rzeszę zwolenników że niedługo będzie można założyć iż nie umrze raczej śmiercią naturalną. Polecam śledzenie jego konta na Twitterze aby być na bieżąco: https://twitter.com/scriptcsnet.

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Notify of
Antek
Antek

Wygląda ciekawie, tylko czy ma powłokę interaktywną?

trackback

C# jako język skrytptowy? Meet ScriptCS | Maciej Aniserowicz o programowaniu…

Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl…

Paweł Łukasik

Hmm….ale taki język skryptowy daje sam Roslyn, więc czym jest ten projekt nie bardzo rozumiem?

Paweł

Gutek

na razie jedyny plus tego ze to mozna z konsoli odpalic. tak to nie odkryli ameryki – repl byl dostepny w MONO, zas do takich pomniejszych spraw i kodu to LinqPad sie idealnie nadaje – wiec ten przyklad z console write line w LinqPad zapisuje w jednej linijce bez using – sam domyslnie dodaje ten using. Pewnie jakby sie uprzec to i za pomoca command line mozna linqPad odpalic (ale tutaj zgaduje nie sprawdzalem) Tak czy siak, fajnie wykorzystany Roslyn – w ogole musze do niego znow powrocic, bo jak pisalem ten C# to Knockout JS to jeszcze z Roslyn… Read more »

Pawel
Pawel

Zgadzam się z przedmówcą, Gutkiem. W Mono od dawna jest możliwość tworzenia i uruchamiania skryptów w CS. Dodatkowo jest interaktywna konsola – http://www.mono-project.com/CsharpRepl . Używanie skryptów CS w Mono jest powszechnie znane – korzysta z tego np. Unity3D w silnikach do gier. MS wprowadzając Roslyn nic nowego nie odkrywa, dziwi mnie jedynie , iż robią to tak późno. Zaś można liczyć na to, iż po wprowadzeniu Roslyna do platformy .NET jako standardu, spowoduje wysyp przykładów jego użycia.

Paweł Łukasik

Panowie,

ale nie mylmy Roslyn’a z scriptcs czy rcsi. Roslyn to trochę więcej a te dwie rzeczy to tylko pokazanie co za pomocą Roslyn’a można (ale też nie wyczerpanie jego możliwości). Tak tylko kwestią uzupełnienia…bo takie odniosłem wrażenie (może mylne) :)

Paweł

przemek fijol
przemek fijol

wyglada na to ze autorzy tej strony (http://www.tryfsharp.org/) tez dowiedzieli sie o Roslynie ;]

PiotrB

A CodeDom ( http://www.codeguru.com/vb/gen/article.php/c19573/Microsoft-NET-CodeDom-Technology.htm ) to pies, mi to pachnie NIH, akurat Roslyna nie widziałbym w tej roli (tzn. jest swego rodzaju armatą na muchy).

Waldimen
Waldimen

Ja tam wolę LinqPad-a, jak chce coś sprawdzić szybko to wpisuje i uruchamiam, naprawdę super narzędzie polecam, kupiłem nawet licencję na wersję Pro jest warta swojej ceny.

Waldimen
Waldimen

Ale dlaczego zastępować Powershella ? Czegoś mu brakuje ? Powershell nadaje się to skryptów o wiele bardziej niż czysty C#.
Słuchałem odcinka .NetRocks na razie nie widzę do tego konkretnego zastosowania ale zobaczymy jak to się rozwinie.

somekind
somekind

Tytuł to jakaś gra słowna, której nie rozumiem, czy zwykła literówka?

Moja książka

Facebook

Zobacz również