Języki ezoteryczne

28.12.2009 - Marek Materzok
TrudnośćTrudność

Słów kilka o ekscentrycznych dziwolągach pośród języków programowania, czyli językach ezoterycznych.

A cóż to takiego?

Powszechnie używane języki programowania, takie jak na przykład Java, C czy PHP, mają na celu umożliwienie programiście łatwe sformułowanie swoich myśli w postaci zrozumiałej dla komputera i stworzenie w ten sposób praktycznego programu rozwiązującego pewien problem. Jednak nie wszystkie języki są takie. Przykładowo asembler jest tekstowym zapisem maszynowego kodu procesora, w związku z czym dostępne są w nim tylko te operacje, które procesor bezpośrednio realizuje. Każdy, kto próbował kiedyś programować w asemblerze, wie, że jest to zadanie trudne; konieczność zajmowania się samemu wszystkimi drobnymi detalami pracy komputera utrudnia myślenie o rozwiązywanym problemie oraz rozumienie już napisanego kodu. Dlatego dziś nikt już nie pisze w asemblerze, o ile nie jest to absolutnie konieczne.

Zaskakującym może być fakt, że istnieją języki, w których programuje się jeszcze trudniej, niż w asemblerze! Języki takie nazywane są językami ezoterycznymi. Rodzina języków ezoterycznych jest niezwykle różnorodna: programy napisane w nich mogą wyglądać z pozoru całkiem normalnie, jednak równie dobrze mogą robić wrażenie przypadkowego ciągu dziwnych znaczków, a nawet przypominać abstrakcyjne obrazy, poematy czy dramaty Szekspira! Jednak praktycznie wszystkie z nich łączy, poza naturalnie trudnością pisania programów, jedna cecha: każdą funkcję, którą można wyrazić w tradycyjnym języku programowania, można również wyrazić w języku ezoterycznym. Będziemy nazywać tę cechę kompletnością obliczeniową. Informatycy nazywają tę cechę Turing-zupełnością, od maszyny Turinga, którą zresztą w pewnym sensie również można traktować jako język ezoteryczny.

Ciekawostka: Szczególnie proste Turing-zupełne języki ezoteryczne nazywa się często "grzęzawiskiem Turinga" (ang. "Turing tar-pit"). Określenie pochodzi z "Epigramatów o programowaniu" (ang. "Epigrams on programming") Alana Perlisa: "Strzeż się grzęzawiska Turinga, w którym wszystko jest możliwe, ale nic nie jest łatwe." "Epigramaty..." są zbiorem dowcipnych i trafnych krótkich uwag na temat programowania, gorąco polecam się z nim zapoznać.

Pisanie programów w językach ezoterycznych na pierwszy rzut oka wydaje się nie mieć najmniejszego sensu. Dlaczego więc warto zainteresować się językami ezoterycznymi? Bo pisanie w nich programów to świetna zabawa! Szukanie rozwiązań problemów, które są całkiem banalne w praktycznych języków programowania, może być wciągającym zajęciem na wiele długich wieczorów. Dla ambitnych czeka też kilka interesujących wyzwań.

Tradycyjnie pierwszym programem, który pisze się w nowo poznanym języku programowania, jest program wypisujący na ekran słowa "Hello World!" ("Witaj, świecie!"). Napisanie takiego programu w wielu językach ezoterycznych jest skomplikowane. Ciekawym wyzwaniem w niektórych językach jest stworzenie krótszego niż wszystkie inne programy tego typu. Jeśli "Hello World" jest zbyt prosty, zawsze można zająć się problemem wypisania tekstu piosenki "99 Bottles of Beer".

Innym ciekawym wyzwaniem jest napisanie quine'a, czyli programu wypisującego samego siebie na ekran. Można tego dokonać w każdym kompletnym obliczeniowo języku programowania z możliwością wypisywania na ekran dowolnych danych. Podobnie, jak w przypadku "Hello World", można próbować uzyskać możliwie krótki lub możliwie prosty program tego typu.

Dla najbardziej ambitnych czeka najciekawsze zadanie - napisanie kompilatora prostego tradycyjnego języka (na przykład uproszczonego Pascala), który generuje kod w wybranym języku ezoterycznym. Można tego dokonać dla każdego kompletnego obliczeniowego języka, w tym dla języków ezoterycznych. Jest to zadanie niełatwe, ale bardzo pouczające.

Nie przeciągając już bardziej, przedstawię moim zdaniem najciekawsze języki ezoteryczne.

5
Twoja ocena: Brak Ocena: 5 (1 ocena)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com