Dziś jest czwartek, 20 listopada 2008 roku (z kalendarza...)

Revomer: raport z prac

Icon

25.09.2006, 21:18

Revomer

Komentarze (5)

Powrót

Na początku września pisałem nieco o ezoterycznym języku programowania Revomer, który stworzyłem wraz z mym kolegą, Krzyśkiem Piecuchem, podczas warsztatów matematyczno-informatycznych w Lublinie. Za trzy dni minie miesiąc od chwili, gdy ten szalony i absurdalny pomysł postanowiliśmy przekuć na rzeczywistość. Prace trwają nadal. Od kilkunastu dni projekt posiada nawet własne repozytorium SVN udostępnione dzięki uprzejmości Łukasza Bobińskiego, a mi udało się pokazać, iż Revomer jest językiem zupełnym w sensie Turinga.

Stan kodu źródłowego prezentuje się następująco: Revomer jest już w stanie wykonać większość z przewidzianych w specyfikacji zadań. Działa COME HERE, działa UNLESS, działa nawet CONF (zamiana funkcji nazwami). Do dokończenia wciąż pozostaje system sars służący do zmiany długości słowa, aby można było przekazywać większe liczby jako parametry do instrukcji (przy okazji wykonanie takiej zamiany odwraca starszeństwo bajtów :)). Jednym z najnowszych nabytków jest tzw. Logika Revomerowa. Jest to odmiana logiki klasycznej, w której prawda ma wartość ujemną: -1. Do dyspozycji jest jeden operator: NAND, a także dwa reduktory pozwalające zredukować dowolną liczbę do prawdy lub fałszu. Is negative zwraca -1 dla liczb ujemnych, a 0 dla nieujemnych. Reduktor standardowy jest o wiele bardziej wyszukany. Aby za jego pomocą określić wartość logiczną liczby, należy zapisać ją słownie w języku ferrinckim, zahaszować algorytmem MD5 i wziąć trzeci bit siedemnastego bajtu otrzymanego ciągu. Opcjonalnie zamieniamy jeszcze 1 na -1 i gotowe. Tym ma się zająć Krzysiek, jak tylko poczuje się pewnie w obsłudze SVN-a.

Drugą sprawą jest tenże właśnie SVN udostępniony nam, jak pisałem, przez Łukasza Bobińskiego. Repozytorium można przeglądać online: https://svn.harem.com.pl/public/revomer. Tam także można zapoznać się z całym kodem źródłowym - co prawda jest w nim lekki bałagan, a i on sam nie jest pisany do końca z przyjętymi normami organizacji kodu źródłowego w C++, ale ważne że działa i realizuje swoje zadanie :).

Revomer od samego początku okazał się być językiem zupełnym w sensie Turinga. Jak się to udowadnia? Có, trzeba to mocno streścić, ale mam nadzieję, że zachowam sens. Zanim powstały komputery, matematycy zastanawiali się nad problemem obliczalności. Powstało wtedy kilka modeli potrafiących automatycznie wykonywać obliczenia. Jednym z nich była maszyna Turinga, składająca się z nieskończonej taśmy danych, po której porusza się głowica czytająco-zapisująca. W zależności od stanu, w jakim się znajduje i znaku na aktualnej pozycji, maszyna modyfikuje go i przesuwa się w prawo lub w lewo. Okazuje się, że na tak prymitywnym modelu można wykonać każdy algorytm, który da się wykonać na normalnym komputerze (dysponując nieskończonym czasem) - zatem oba te urządzenia są sobie rówoważne. Kolejnym pojęciem jest tzw. Uniwersalna Maszyna Turinga, która jako dane przyjmuje ciąg będący opisem innej maszyny turinga (wraz z danymi), po czym wykonuje ją. Taka maszyna także jest zupełna w sensie Turinga, a dla nas oznacza to, iż jeden model obliczeń równowany maszynie Turinga może emulować inny model obliczeń.

Jednym ze sposobów dowiedzenia, że jakiś model jest zupełny, jest pokazanie, że można w nim stworzyć Uniwersalną Maszynę Turinga. Jest to raczej oczywiste - załóżmy, że mamy problem X, którego nie da się rozwiązać w naszym modelu obliczeń, ale da się rozwiązać maszyną Turinga. Skoro potrafi on jednak emulować UMT, przekształcamy opis problemu tak, aby był akceptowalny przez UMT i poszczamy w takiej postaci do naszej emulowanej maszynki. W ten sposób rozwiązaliśmy nasz problem X za pomocą modelu, który zgodnie z założeniem nie potrafi go rozwiązać. Sprzeczność. Wyobraźmy sobie teraz, że zamiast maszyny Turinga pan Alan Turing wymyślił Brainfucka. Model obliczeń proponowany przez ten język też jest zupełny, zatem czy coś by to zmieniło, gdybyśmy rozprawiali o Uniwersalnych Maszynach Brainfucka itd? Nie - przecież jedno i drugie jest sobie równoważne. Cała sztuka polega zatem na pokazaniu, że w Revomerze da się napisać interpreter Brainfucka. Posiedziałem, podumałem i wymyśliłem, jak mógłby on działać. W wolnej chwili postaram się to jakoś estetycznie poskładać do kupy i zaprezentować.

Gdy skończymy Revomera 0.9, zabierzemy się za opracowywanie wersji 1.0 posiadającej wiele nowości. Języki ezoteryczne już nigdy nie będą takie same :)

  • Funkcje obsługi plików
  • Funkcje sieciowe
  • Wielowątkowość oraz system wyjątków (przechwytywanie operacji ROPE (random operation) :).
  • Dynamiczny przydział pamięci.
  • Biblioteka obsługi interfejsu tekstowego.
  • Biblioteka Funkcji Nieużytecznych, np. DTS (usuwa plik źródłowy programu :)) - dzięki niej każdy ROPE stanie się niezapomnianym przeżyciem :).
  • Możliwość kompilacji programu do postaci bytecode'u lub nawet do pliku wykonywalnego!

Interpreter nowej wersji zostanie napisany od nowa w formie świetnie zorganizowanej biblioteki, którą będzie można wykorzystać na wiele sposobów. Chcesz napisać zaawansowany IDE z debuggerem? Nic trudnego. Bierzesz bibliotekę i nie musisz się martwić o część związaną z wykonywaniem programów :).

Acha, niedługo ruszy strona poświęcona Revomerowi, gdy tylko zjawi się wreszcie Anas i mi subdomenę podepnie pod odpowiedni katalog.

Powrót

Komentarze

Napisał dr_bonzo w poniedziałek, 25 września 2006 o 22:07

Nie znam sie na pisaniu jezykow, ale brzmi szalenie:
"Biblioteka Funkcji Nieużytecznych" -- przepisywana co roku od nowa :P

a "Reduktor standardowy" wymiata :)

Napisał Diablos w środę, 27 września 2006 o 11:21

Kazdy ma swojego swira, ale wydaje mi sie, ze pisanie takiego jezyka to tylko strata czasu ;) Realnie na to patrzac, nikt w tym nie bedzie pisal, nikt nie bedzie o tym pisal (bo przeciez nie jest to cos nowego). Pozostaje wlasna ciekawosc, chec napiania czegos takiego no i jej zaspokojenie.

Napisał Zyx w środę, 27 września 2006 o 14:11

Nikt? Tu się mylisz - ezoteryczne języki mają całkiem sporą rzeszę fanów, chociażby dlatego, że zmuszają do myślenia i pozwalają inaczej spojrzeć na pewne sprawy. W takim Brainfucku nawet grę widziałem.

Natomiast ad. straty czasu też nie masz racji. Interpreterów nie tworzy się tak hop-siup; według mnie to dobry sposób na nabranie doświadczenia.

Napisał Diablos w środę, 27 września 2006 o 22:29

Nie no zgadzam sie. Fanów takich jezyków jest napewno wielu. Ale wiadomo, o czym marzymy piszac taki jezyk. Wielu fanow, wielu programistow probujacych cos w nim napisac no i wiele komentarzy, a o to nie jest latwo. Projekt ginie wsrod wielu innych - podobnych.

Napisał Ace w poniedziałek, 2 października 2006 o 22:42

Zgadzam się z Zyx'em, aby napisać interpreter trzeba sie nagłówkować. To nie jest taka prosta sprawa. Ja osobiście wole języki wyższego poziomu. W twoim poście padło sformuowanie "IDE z debuggerem" :) Też myśle o tym. Marzy mi się IDE do mojego frameworka, jednak wpierw musze napisać kilka komponentów.

Życze powodzenia w wydawaniu nowych wersji, a mam nadzieję, że SVN dobrze się sprawuje ;)

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