Wytrzepaj sobie mózg! by Kaz 2008-07-21 15:01:25

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”.

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:

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:
Do boju!
fuckinbrajn 2008-07-21 18:00:41

to nie na moja mózgofnice

brainjjaaak 2008-07-21 18:02:35

moze dac to do brainiaca !

Kaz 2008-07-21 19:00:07

Do Brainiaca? http://pl.wikipedia.org/wiki/Brainiac
W sumie maja swoje forum... http://brainiac.pl/

JOE 2008-07-21 23:46:29

I tak uważam, że jak już wchodzicie w sprawy programów naukowych to "Pogromcy mitów" dają więcej info widzowi.

Ale pomysł jak najbardziej SUPER !!!