Ezoteryczne języki programowania, choć są w zasadzie zabawą, to
uczą także logicznego myślenia i pewnych teoretycznych podstaw
matematyki i programowania. No, przynajmniej niektóre z nich... bo
jest ich wiele, a liczba ta stale rośnie.
Czy zastanawialiście się kiedyś, co oznacza słowo „ezoteryczny”?
Jest to równoważnik słowa „tajemny”, przeznaczony tylko do
wybranych, doświadczonych, uprzywilejowanych – po prostu dla
wtajemniczonych w pewne arkana wiedzy - a przeciwieństwo wiedzy
powszechnie dostępnej, oficjalnie zaakceptowanej.
”Pojęcie to
jest często używane w religioznawstwie. Propaguje inne postrzeganie
rzeczywistości, rozwój duchowy, porusza tematy nie udowodnione lub
odrzucane przez naukę. Jej treści są na ogół otoczone atmosferą
tajemnicy, starożytnych przekazów, guru o nadnaturalnych mocach,
itp., a nie są w żaden sposób potwierdzane, są odczuwalne jedynie w
sposób pozazmysłowy.”
Ezoteryczne języki programowania też są „tajemne” i „przeznaczone
tylko dla wybranych”, ale jakby to powiedzieć... z przymrużeniem
oka. Wszystkie jednak pozwalają „inaczej postrzegać rzeczywistość”
:). „Mają swoich wielbicieli i zaciekłych zwolenników, ale wiedza o
nich nie jest, wbrew pozorom, niedostępna. Można o nich poczytać
choćby w
Wikipedii, która jest tu cytowana, oraz na poświęconych im
setkach stron internetowych.
Języki te właściwie nie służą do produkcji oprogramowania, lecz są
rodzajem rozrywki umysłowej uprawianej przez pasjonatów.
”Ich
konstrukcja zwykle oparta jest na niecodziennym lub żartobliwym
pomyśle lingwistycznym (od parodiowania dramatów Shakespeare'a po
slang współczesnego internetu). Często też ich twórcom towarzyszy
chęć badania matematycznych podstaw obliczeń komputerowych (głównie
maszyny Turinga i rachunek lambda Churcha). Języki te mają
zazwyczaj prostą składnię, ale równocześnie programowanie w nich
jest trudne, ponieważ wygoda ich stosowania poświęcana jest dla
realizacji pierwotnego celu (zwykle żartu). Nie są ponadto łączone
z jakimikolwiek bibliotekami zewnętrznymi, które umożliwiałyby
tworzenie oprogramowania bardziej zaawansowanego niż tylko
przetwarzającego znaki wprowadzane na konsoli tekstowej. Większość
języków ezoterycznych opiera się na założeniu, np. że interpreter
takiego języka ma być jak najmniejszy, cały kod ma się składać
jedynie z białych znaków, lub programowanie ma być jak
najtrudniejsze itp. Języki ezoteryczne mają bardzo ciekawe i
intrygujące nazwy, w odróżnieniu od "poważnych języków
programowania" (...).”

Paweł "Cosi" Piątkowski
Jednym z miłośników ezoterycznych języków programowania okazał się
być
Paweł „Cosi” Piątkowski. Szczęśliwym trafem Paweł jest
też miłośnikiem Atari:
”Moja "pierwsza fala" to było
dzieciństwo, dokładnie rok 1990, kiedy to dostałem 65 XE z
magnetofonem. Pamiętam taką pisaną na maszynie książeczkę z
niemieckimi programami w Basicu - przepisywałem kropka w kropkę
niemieckie komentarze, dokładnie licząc ile jest gwiazdek po REM
:-). Jakiś czas później kupiliśmy stację dysków i całe mnóstwo
dyskietek, więc mogłem bardziej zaangażować się w Atari, ale jeżeli
chodzi o programowanie to nie wyszedłem poza Basic. Potem, po
oddaniu Atari, czarna dziura przez wiele lat. Dopiero niedawno coś
mnie przyciągnęło z powrotem do starego, dobrego Atari. W
międzyczasie poznałem trochę arkana programowania, więc teraz nawet
cc65 mi nie straszny. Mam nadzieję, że moje "wiekopomne dzieło"
jeszcze przede mną ;-). Co lubię robić na Atari? Jest parę gier,
ale tutaj jestem mocno wybredny - szybko się nudzę. Na pewno
“Montezuma's Revenge”, “River Raid”, “Archon”, “Pole Position”, a z
polskich „Hans Kloss”, „Miecze Valdgira” czy „SOS Saturn”. Ostatnio
powstają wspaniałe, mocno wciągające gry - mówię zwłaszcza o
„Yoomp!”, „Bomb Jack” i „Swapz”.
.png)
a ja przygotowałem Pawłowi ekranik
tytułowy
Cóż mogło powstać z tej mieszanki uwielbienia dla Atari i ciągotek
do ezoterycznych języków programowania? Oczywiście nic innego
niż... implementacja jednego z ezoterycznych języków na 8-bitowym
Atari! Mam zaszczyt zaprezentować Pawłową wersję
BrainFucka.
Jest to dopiero wersja 0.1.0, ale już można uruchamiać większość
programów przeznaczonych dla tego języka. No i oczywiście można też
zgłaszać dostrzeżone błędy oraz pomysły, które godne by były
zaimplementowania. Paweł ujawnił, że
„program jest napisany w
"cc65". Po długich poszukiwaniach przerzuciłem się w końcu na ten
kompilator, głównie dlatego, że obecnie spędzam 40 godzin
tygodniowo klepiąc C-podobny kod :-) Próbowałem coś pisać w "Deep
Blue C", ale szybko się poddałem.” Pliczek z dyskietką
zawierającą program główny (BF.COM) oraz czytnik dokumentów
(VIEW.COM) i dokumentację w języku angielskim i polskim znajdziecie
tutaj.
BrainFuck jest swoistą implementacją Maszyny Turinga,
wymyśloną
przez Urbana Müllera. Istnieje w nim tablica, która początkowo
zawiera zera (tak zwana taśma), oraz wskaźnik, który się wewnątrz
niej przesuwa. Gramatyka tego języka składa się z 8 operatorów:
- + zwiększenie o 1 wartości komórki pod wskaźnikiem
- - zmniejszenie o 1 wartości komórki pod wskaźnikiem
- > przesunięcie wskaźnika do przodu o 1
- < przesunięcie wskaźnika do tyłu o 1
- [ początek pętli; jeśli wartość komórki pod wskaźnikiem jest
zerowa przechodzi do symetrycznego ], w przeciwnym wypadku pętla
jest iterowana
- ] koniec pętli; opuszcza pętlę jeżeli wartość komórki pod
wskaźnikiem jest zerowa, w przeciwnym wypadku jest skok do
symetrycznego [
- . wypisanie zawartości komórki na ekranie jako znaku (tutaj:
ATASCII)
- , wczytanie znaku z klawiatury i zapisanie go pod bieżącym
wskaźnikiem
- każdy inny znak traktowany jest jako komentarz
tak wygląda BrainFuck na Atari
Implementacja Atari posiada pewne ograniczenia, związane z
mozliwościami technicznymi małego Atari. Długość taśmy (obszaru
danych, czegoś w rodzaju pamięci), po której można się programem
przesuwać zwiększając i zmniejszając wartość aktualnej komórki,
wynosi 8192 bajty (w oryginalnym
BrainFuck 30000 bajtów, w
maszynie Turinga nie ma ograniczeń). Maksymalna długość programu
wynosi 4095 bajtów, a dopuszczalne zagnieżdżenie pętli to 15
poziomów. Z tych powodów nie wszystkie programy napisane w
BrainFucku, a jest ich
wiele, będą działały w tej
implementacji.
I na koniec mały konkurs o roboczej nazwie
F*** Your Brain,
który Paweł postanowił ogłosić w związku z prezentacją swojej
wersji
BrainFucka. Regulamin jest krótki, ale treściwy:
- należy napisać jak jak najciekawszy program w atarowskiej
wersji BrainFuck
- jednoosobowa komisja Pawła zdecyduje, który z programów jest
najciekawszy
- nagrodą dla autora zwycięskiego programu będzie ogłoszenie
zwycięzcy na atarionline.pl
- program ten, a także inne zaakceptowane przez Pawła znajdą się
na dyskietce z kolejną wersją BF
- termin nadsyłania programów mija za dwa tygodnie to jest w
niedzielę, 3 sierpnia 2008 roku o północy.
Do boju!