14
Mar

C# jako język skryptowy? Meet ScriptCS

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.

Autor

Maciej Aniserowicz

Maciej Aniserowicz
"Procent"
developer / architect

MVP
MCP

Search
Facebook
Twitter
Archiwum
Kategorie
© Copyright 2008-2013 Maciej Aniserowicz. All rights reserved. Running on WordPress.