Dziś jest piątek, 25 lipca 2008 roku (z kalendarza...)

Revomer - rzut okiem

Icon

04.09.2006, 20:43

Revomer

Komentarze (6)

Powrót

Mało który programista nie słyszał o ezoterycznych językach programowania. Ogólnie rzecz biorąc, jest to raczej parodia języków programowania, która celowo utrudnia pisanie programów lub stosuje naprawdę odjechane rozwiązania składniowe. Tworzy się je w różnym celu: jedne powstały dla żartu, inne dla zilustrowania jakiejś ciekawej koncepcji lub jako ironiczny komentarz. Z najpopularniejszych można wymienić InterCal (zapoczątkował całą tę zabawę), Brainfuck, BeFunge oraz Malbolge, który jest tak trudny, że pierwszy program w nim stworzono z wykorzystaniem algorytmu genetycznego, i to aż dwa lata po napisaniu interpretera! Na szerzej opisywanych wcześniej Wielodyscyplinarnych Warsztatach Wakacyjnych razem z kolegą Krzyśkiem Piecuchem popełniliśmy kolejny tego typu twór. Poznajcie Revomer! Niechaj wasze kody źródłowe zatrzęsą się ze strachu, bowiem ten język zmusza je do prawdziwie masochistycznych zagrywek!

Co jest takiego wyjątkowego w Revomerze? Hmmm... powiedzmy, że trzy proste koncepcje. Pierwszą można zawrzeć w zdaniu Is Negative - Is Good, co oznacza, że wszystko, co jest związane z negacją, kasowaniem, odejmowaniem, jest dobre, a dodawanie i mnożenie jest be. Druga prosta koncepcja mówi, że program nie może zakończyć się z takim samym kodem źródłowym, z jakim się zaczął. Więcej, założenia języka sprawiają, że niemal każda operacja będąca krokiem do algorytmiki wymaga samomodyfikowania przez program własnych źródeł w trakcie działania! Ostatnia koncepcja definiuje zachowanie się interpretera. W przeciwieństwie do innych języków programowania, Revomer nie cechuje się bezradnością małego dziecka w przypadku napotkania błędu - on zawsze próbuje się domyślić, co programista miał na myśli, kiedy ten popełni błąd składni lub program będzie próbował wykonać niedozwoloną operację. Z naciskiem na PRÓBUJE. Od strony technicznej sprowadza się to do wykonywania losowej operacji w przypadku napotkania każdego błędu. A nuż trafimy :).

Na bazie tych trzech koncepcji powstał kompletny język programowania. Oto niektóre z jego ciekawszych cech:

  1. Zgodnie z koncepcją IN-IG, kod programu wykonywany jest od końca (ale linie numerowane są już od początku).
  2. Język posiada wbudowane operacje odejmowania i dzielenia, nie posiada natomiast mnożenia i dodawania.
  3. Program ma do dyspozycji 64 kB pamięci podzielonej na 1-bajtowe komórki.
  4. Pamięć operacyjna pełni jednocześnie rolę rejestrów - nie można definiować stałych argumentów; wszystko musi przejść przez pamięć.
  5. Kod programu podzielony jest na funkcje. Funkcja kończy pracę dopiero wtedy, kiedy nie będzie zawierać żadnego kodu.
  6. Program kończy pracę wraz z momentem usunięcia z funkcji zerowej ostatniej komendy.
  7. Można definiować wiele funkcji o tej samej nazwie - jeśli chcemy jakąś uruchomić, interpreter ma wybrać jedną z nich w sposób losowy.
  8. Rozbudowany zestaw komend do zarządzania kodem źródłowym: come here (przenosi bloki komend w inne miejsce), unless (warunkowo kasuje następną linijkę, jeśli podana komórka pamięci zawiera fałsz), real (usuwa linijkę leżącą N linijek dalej), rf (usuwa funkcję), conf (zamienia dwie funkcje nazwami), if (dołącza nowy plik, jednocześnie kasując siebie), shuffle (miksuje kod między podanymi linijkami).
  9. Wskaźniki!
  10. Każda nieprzewidziana przez specyfikację zagrywka kończy się wykonaniem operacji ROPE (losowa operacja).

Z Revomerem termin programowanie dynamiczne nabiera nowego znaczenia. A potwierdzić to możemy my, jego twórcy, którzy już stworzyli w nim kilka prostych programów i przekonali się o tym doświadczalnie.

Teraz trochę historii... w poniedziałek, dnia 28 sierpnia, znaleźliśmy się wszyscy pod lubelskim LO. im. Staszica, czekając na rozpoczęcie warsztatów. Rozmowa zeszła na ezoteryczne języki programowania; dzieliliśmy się swoimi opiniami i jednocześnie żartowaliśmy na ich temat. W pewnym momencie Krzyśkowi zaświtał pomysł: zróbmy coś własnego. Na pierwszym z wykładów zabraliśmy się do pracy. W moim zeszycie powstały pierwsze szkice, aż metodą burzy mózgów wypracowaliśmy koncepcje oraz założenia. Następnego dnia rankiem pożyczyliśmy laptop i rozłożyliśmy się w kącie sali gimnastycznej, aby rozpocząć prace nad interpreterem. Niestety, tego dnia nie stworzyliśmy prawdę mówiąc zbyt dużo - parę struktur danych i początek biblioteki standardowej, które później i tak wymieniliśmy. Niemniej od strony teoretycznej dodawane były kolejne pomysły, wszystkie zbierane w formie luźnych notatek w moim zeszycie.

W środę o drugiej w nocy, zmęczony grą w go i obserwowaniem partii brydża, powróciłem na salę gimnastyczną, czując wenę. Włączyłem laptop i do piątej nad ranem pisałem kompilator Revomera do bytecode-u. Język wtedy nosił jeszcze roboczą nazwę --C. Po przerwie na sen kontynuowałem pisanie, aż ok. 14.00 kompilator był gotowy. Następnej nocy i jeszcze przez czwartek tworzone były nowe struktury danych do zarządzania kodem źródłowym. Tenże czwartek został też dniem, w którym zrodził się pomysł spisania ostatecznej specyfikacji, i to na nie byle czym, bo na szarym papierze toaletowym. Pisanie rozpoczął Krzysiek, później kontynuowaliśmy tę robotę na zmianę. Po bezsennej nocy z 31 sierpnia na pierwszowrześniowy poranek, o godzinie 10.04 nastała historyczna chwila. Interpreter prawidłowo uruchomił i wykonał program wypisujący frazę "HI UNIVERSE" (podziękowania dla Róży za jej ułożenie :)). Dwie godziny później ukończona została specyfikacja.

Obecnie prace trwają dalej. Specyfikacja została przepisana na komputerze, a interpreterowi doszły nowe funkcje. Na dzień dzisiejszy udało mi się na nim uruchomić nawet generator liczb losowych. Próbujemy załatwić skądś SVN, aby móc razem rozwijać kod interpretera. W planach mamy też dalsze rozszerzanie języka o kolejne zwariowane pomysły, jak np. wielowątkowość czy obsługa połączeń sieciowych. Historyczna rolka papieru toaletowego spoczęła w mych rękach, a prawdziwą potęgę Revomera świat pozna, gdy język wykupi znany monopolista z Redmond :D.

Powrót

Komentarze

Napisał Ace w wtorek, 5 września 2006 o 11:16

Dzis znalazlem kilka artow na temat tworzenia jezykow skryptowych :) Moze z nich korzystales piszac wlasny parser? :)

http://ejsior.info/acms/300/

Napisał Zyx w wtorek, 5 września 2006 o 13:23

Nawet gdybym chciał, byłoby to niemożliwe - przez te pięć dni nie mieliśmy dostępu do Internetu :).

Napisał Albitos w wtorek, 5 września 2006 o 14:12

Do końca w autobusie nie wierzyłem, że specyfikacje spisaliście na papierze toaletowym xD A jednak :D.

Napisał Paweł `hwao` Hal w wtorek, 5 września 2006 o 16:09

Już gratulowałem pomysłu, ale myślę że mogę się powtórzyć - genialne! :)

Pomysł szalony, ale działa i to najważniejsze :-)

Napisał Tuner w piątek, 8 września 2006 o 15:30

Ciekawa sprawa :)

Napisał npb w piątek, 8 września 2006 o 22:55

Rany... Zyx... co my zrobiliśmy!! :D :D :D

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia