Czym jest Pliant i dlaczego warto go poznać
Pliant to obiektowy język programowania, który wyróżnia się jedną niezwykłą cechą: jest jednocześnie językiem, kompilatorem, runtime i frameworkiem — wszystko w jednym pakiecie. Nie ma tu oddzielenia między “językiem” a “bibliotekami” — Pliang pozwala modyfikować i rozszerzać sam siebie z poziomu kodu użytkownika.
Warto poznać Pliant, bo reprezentuje on radykalne podejście do programowania: zamiast adaptować się do ograniczeń języka, adaptujesz język do swoich potrzeb. Chcesz zmienić składnię? Możesz. Chcesz dodać nowy typ pętli? Możesz. Chcesz zoptymalizować kompilator pod swój use case? Też możesz.
Dla programistów, którzy czują się ograniczeni “zamkniętymi” językami i chcą pełnej kontroli nad swoim środowiskiem programistycznym, Pliant oferuje poziom elastyczności, który jest rzadko spotykany. Wyobraź sobie język, w którym możesz zoptymalizować algorytm hashujący w standardowej bibliotece, zmienić sposób parsowania składni dla konkretnego modułu, albo dodać własny typ pętli — wszystko bez forka języka i bez czekania na upstream. To jest właśnie Pliant: język, który daje ci klucze do całego budynku, nie tylko do twojego pokoju.
Krótka historia i ewolucja
Pliant został stworzony przez Huberta Tonneau w drugiej połowie lat 90. we Francji. Tonneau, doświadczony programista z backgroundem w systemach wbudowanych i serwerach WWW, chciał stworzyć język, który byłby jednocześnie wydajny jak C, elastyczny jak Lisp i praktyczny jak Perl.
Pierwsza publiczna wersja ukazała się pod koniec lat 90. Pliant był używany głównie jako platforma do budowy serwerów WWW i aplikacji sieciowych — Tonneau zbudował na nim Fullpliant, kompletny stack webowy obejmujący serwer HTTP, bazę danych i framework aplikacyjny.
Język był aktywnie rozwijany przez ponad dwie dekady, z regularnymi aktualizacjami i poprawkami. Społeczność nigdy nie była duża, ale oddana — głównie francuscy programiści ceniący elastyczność i wydajność. Pliant pozostaje projektem aktywnym, choć niszowym.
Kluczowe cechy i filozofia
Najważniejszą cechą Pliant jest jego meta-programowalność. Język pozwala modyfikować własną składnię, semantykę i kod generowany przez kompilator — wszystko z poziomu kodu w Pliant. To podejście znane z Lispów (makra), ale Pliant robi to w składni bliższej językom z rodziny C.
Pliant oferuje kompilację just-in-time (JIT) do kodu maszynowego, co zapewnia wydajność porównywalną z C. Ale w przeciwieństwie do C, możesz modyfikować zachowanie kompilatora w czasie działania programu. To daje unikalną kombinację wydajności i elastyczności.
Model obiektowy Pliant jest pragmatyczny — klasy, dziedziczenie, polimorfizm, ale bez dogmatyzmu. Język obsługuje także programowanie funkcyjne (lambdy, closures) i proceduralne, pozwalając programiście wybierać najlepsze narzędzie do zadania.
System typów jest statyczny z inferencją — kompilator wywnioskuje typy tam, gdzie to możliwe, ale wymaga jawnych deklaracji tam, gdzie inferencja jest niejednoznaczna. Pliant oferuje także zaawansowane zarządzanie pamięcią z opcjonalnym garbage collectorem.
Filozofia Pliant zakłada, że język programowania powinien być otwartym systemem, nie zamkniętym produktem. Programista jest współtwórcą języka, nie tylko jego użytkownikiem.
Gdzie Pliant sprawdza się najlepiej
Pliant najlepiej sprawdza się jako platforma do budowy serwerów WWW i aplikacji sieciowych. Fullpliant — kompletny stack webowy zbudowany na Pliant — oferuje serwer HTTP, bazę danych, framework MVC i narzędzia do deployu, wszystko w jednym pakiecie.
Poza web developmentem, Pliant sprawdza się w zastosowaniach wymagających wysokiej wydajności i elastyczności — przetwarzanie danych w czasie rzeczywistym, systemy wbudowane, prototypy algorytmiczne. Kompilacja JIT i meta-programowalność pozwalają na optymalizacje, które są trudne do osiągnięcia w innych językach.
Pliant bywa też używany do budowy narzędzi deweloperskich i DSL-i (Domain Specific Languages) — jego meta-programowalność sprawia, że tworzenie nowych języków wewnątrz Pliant jest naturalne i proste.
Jak wygląda kod w Pliant
module "/pliant/language/compiler.pli"
function factorial n -> r
arg Int n ; arg Int r
if n <= 1
r := 1
else
r := n * factorial n - 1
gvar Int result := factorial 10
console "10! = " result eol
Składnia Pliant jest zwięzła i pragmatyczna. module importuje moduły, function deklaruje funkcje z jawnym typowaniem argumentów i wartości zwracanej, arg deklaruje parametry. Zwróć uwagę na brak nawiasów wokół warunków i na := jako operator przypisania. Kod jest czytelny, choć wymaga przyzwyczajenia do konwencji Pliant.
Ekosystem i narzędzia
Głównym narzędziem jest sam Pliant — kompilator, runtime i framework w jednym. Fullpliant dostarcza kompletny stack webowy, a Pliant API oferuje biblioteki do typowych operacji (HTTP, bazy danych, grafika, kryptografia).
Nie ma tradycyjnego menedżera pakietów — ekosystem jest monolityczny, z większością bibliotek dostarczanych jako część dystrybucji Pliant. To podejście spójne, ale ograniczające — nie ma bogatego ekosystemu zewnętrznych bibliotek jak w npm czy PyPI.
Dokumentacja jest prowadzona na stronie Pliant i w formie komentarzy w kodzie źródłowym. Społeczność jest niewielka, głównie francuskojęzyczna, aktywna na forum Pliant. Brak konferencji, meetupów czy rozbudowanych tutoriali. Mimo to, sam kod źródłowy Pliant jest świetnie skomentowany i stanowi de facto najlepszą dokumentację — ponieważ język jest samoopisujący, czytanie kodu kompilatora i bibliotek standardowych daje głębokie zrozumienie mechanizmów języka.
Mocne i słabe strony
Mocne strony Pliant to meta-programowalność, wydajność JIT, kompletny stack webowy (Fullpliant) i unikalna elastyczność. Język pozwala na rzeczy, które w innych językach wymagają zewnętrznych narzędzi lub są w ogóle niemożliwe.
Słabe strony to mała społeczność, ograniczona dokumentacja (głównie po francusku), brak ekosystemu zewnętrznych bibliotek i wysoki próg wejścia. Meta-programowalność to potężne narzędzie, ale łatwo o kod, który jest trudny do zrozumienia i utrzymania. Brak wsparcia komercyjnego i nowoczesnych narzędzi deweloperskich (IDE, debugger). Dodatkowo, monolityczna natura Pliant — wszystko w jednym pakiecie — oznacza, że aktualizacje i poprawki zależą od jednego developera, co jest ryzykowne w dłuższej perspektywie.
Podsumowanie
Pliant to język dla indywidualistów — programistów, którzy chcą pełnej kontroli nad swoim środowiskiem i nie boją się budować rzeczy od zera. Jeśli cenisz elastyczność Lispów, ale wolisz składnię bliższą C, Pliant może być dla ciebie. Ale przygotuj się na samotną podróż — społeczność jest mała, a dokumentacja skromna.

