Nemerle dla kreatywnych

Nemerle to język programowania łączący zalety C#, języków funkcyjnych oraz języków stosowanych do tworzenia makr

Nemerle to język programowania łączący zalety C#, języków funkcyjnych oraz języków stosowanych do tworzenia makr.

Nemerle to pierwszy polski projekt open source, o którego istnieniu można było dowiedzieć się również z prasy niebranżowej. Stało się tak za sprawą grantu w wysokości 25 tys. euro udzielonego projektowi w ramach programu ROTOR2. ROTOR jest projektem mającym na celu popularyzację platformy .Net w środowiskach akademickich, zaś ROTOR2 - programem grantów związanych z projektem ROTOR. Grant dla projektu Nemerle to pierwszy w Polsce przypadek finansowania rozwoju technologii przez Microsoft Research. Projekt jest prowadzony przez grupę studentów i absolwentów Uniwersytetu Wrocławskiego pod kierunkiem prof. Leszka Pacholskiego.

Dwa światy, jeden język

Nemerle to przede wszystkim język programowania dla platformy .Net oraz jej implementacje open source, jak Mono czy dotGNU. To niby nic nowego - dowiązania do .Net posiada coraz więcej języków programowania, przy czym w większości zastosowań wyborem najkorzystniejszym i tak bywa C#. Nemerle nie jest jednak sztuką dla sztuki.

Na pierwszy rzut oka Nemerle przypomina C# z nieznacznymi modyfikacjami. Nie jest to podobieństwo niezamierzone: twórcy zdają sobie sprawę z realiów projektów informatycznych - każda dodatkowa przeszkoda w przyswojeniu nowej technologii zmniejsza prawdopodobieństwo jej wykorzystania. Podobieństwo do C# czy Javy sprawia, że programista bardzo szybko nabierze wprawy w posługiwaniu się Nemerle.

Różnica między Nemerle a innymi językami obiektowymi polega na tym, że zaimplementowano w nim najistotniejsze elementy języków funkcyjnych, takich jak OCaml czy SML. Korzyść polega na tym, że wiele popularnych algorytmów można za jego pomocą zapisać w sposób bardziej zwięzły i elegancki. Istotne jest, że Nemerle nie wymusza funkcyjnego stylu programowania, lecz jedynie stwarza taką możliwość, oddając do dyspozycji programisty pokaźny zestaw dedykowanych narzędzi i funkcji.

U podstaw Nemerle leży obserwacja, że większość absolwentów kierunków informatycznych dobrze zna zalety języków funkcyjnych i potrafi je w mniejszym lub większym stopniu wykorzystać.

Te umiejętności nijak się jednak mają do popularnych narzędzi programistycznych. Nemerle łączy te dwa światy. Zapewnia też większą wygodę niż .Netowe wersje języków funkcyjnych, np. F# czy SML .Net. W przeciwieństwie do nich, Nemerle był od początku zaprojektowany z myślą o .Net i dzięki temu jest z nią znacznie lepiej zintegrowany. Brak przymusu funkcyjnego stylu programowania i składnia zbliżona do C# znacznie tylko zwiększają jego atrakcyjność.

Makra, ale jakie!

Kolejną zaletą Nemerle jest obecność makr. Są to zresztą makra higieniczne, obecne w niewielu językach programowania, jak Scheme, MetaML czy TemplateHaskell. Sama koncepcja makr, obecnych przecież w takich językach, jak C/C++, przedstawia w Nemerle zupełnie nową jakość. Funkcjonalność makr C/C++ jest dość prymitywna, zaś obszar zastosowań dość często sprowadza się do prostego sprawdzania warunków. Makra w Nemerle stanowią integralną część języka, zaś ich funkcjonalność jest niemal nieograniczona, można je bowiem tworzyć, używając kodu Nemerle, włączając w to klasy .Net!

Makra umożliwiają zarówno tworzenie i przekształcanie kodu w czasie kompilacji, jak i jego automatyczną weryfikację. Dzięki makrom można więc modyfikować składnię języka, a także automatycznie wychwytywać błędy specyficzne dla danego projektu. Przykładowo, przy tworzeniu projektu bazodanowego można przygotować makra weryfikujące składnię poleceń SQL wbudowanych w kod, co oczywiście jest cechą pożądaną i pomocną, jednak niewiele języków posiada tego typu funkcjonalność. Nie jest to zresztą możliwość czysto teoretyczna - wraz z Nemerle jest rozprowadzany prototyp makr sprawdzających poprawność składni i typów w zapytaniach dla PostgreSQL.

Brak użytecznej konstrukcji w języku Nemerle również nie jest problemem - bez konieczności czekania na kolejną wersję można samemu zaimplementować np. konstrukcję foreach dla dowolnego typu danych. Podobnie można również zdefiniować znaną z języka C funkcję printf z wbudowaną weryfikacją poprawności składni podanych argumentów. Co więcej, kompilator Nemerle potrafi skompilować samego siebie, zaś w ramach pakietu programista otrzymuje zestaw projektów testowych o różnym poziomie złożoności.

Do pierwszej ligi

Najnowsza wersja Nemerle jest oznaczona numerem 0.1.2. To sposób numeracji typowy dla projektów open source - niski numer wersji oznacza, że wg twórców oprogramowania wyznaczone przez nich ambitne cele projektu nie zostały jeszcze osiągnięte i że trwają intensywne prace. Nemerle to już jednak nie półprodukt, lecz całkiem dojrzałe środowisko nadające się do wykorzystania produkcyjnego. Napisany w Nemerle serwer WWW, Sioux, posłużył m.in. do obsługi zapisów na XVIII Forum Informatyki Teoretycznej (obsługa bazy danych, automatyczne generowanie raportów).

Obecnie język Nemerle obsługuje jedynie MonoDevelop - otwarte IDE wspomagające tworzenie aplikacji dla .Net w środowisku Linux - odpowiednik doskonałego pakietu SharpDevelop dla Windows. Wciąż rozwijana jest wtyczka dla MonoDevelop, która ma pozwolić na obsługę, jaką obecnie ma jedynie C#: automatyczne uzupełnianie kodu, pomoc kontekstową, a także generowanie kodu po integracji MonoDevelop z Glade - popularnego w środowisku GNOME narzędzia do projektowania interfejsów graficznych aplikacji. Równolegle powstaje wtyczka dla Visual Studio - jeden z celów przyświecających twórcom Nemerle jest pełna integracja z tym środowiskiem.

Przed wakacjami zapowiadana jest wersja 0.2. O ilości pracy włożonej w projekt może świadczyć fakt, że w wersji tej będzie można wykorzystywać i tworzyć wszystkie typy konstrukcji .Net ze zbioru Common Language Specification. W żargonie .Net Nemerle osiągnie więc status CLS extender, który jak dotąd ma jedynie C# i Visual Basic .Net Microsoftu. Od tej pory prace nad Nemerle będą się koncentrować na integracji z istniejącymi narzędziami, testowaniu i rozwoju systemu makr. Udostępnienie pierwszej wersji w pełni nadającej się do zastosowań przemysłowych jest planowane na koniec 2004 r.


TOP 200