Monthly Archives: December 2007

Brainfuck

Sinoć u trenutcima dokolice (dobro, dobro, imao sam i pametnija posla, ali ovo mi je bilo zanimljivije) napisao sam Brainfuck interpreter. Verovatno zvuči ozbiljnije nego što stvarno jeste, jer je ceo program stao u nekih 200 linija koda sa sve komentarima i inline dokumentacijom.

Brainfuck

Za one koji ne znaju, Brainfuck je jezik koga je napravio Urban Müller 1993. godine kao pokušaj da napravi najmanji kompajler, pa mu je trebao i kompaktan jezik. Nema nikakvu upotrebnu vrednost. Jako lako se uči, ali se jako teško programira u njemu, a kod je čitljiv koliko i binarni.

Struktura podataka koju koristi jezik je jedan niz (zavisi od implementacije, ali obično je niz 8-bitnih vrednosti) i jedan implicitno deklasiran pokazivač. Sintaksa se sastoji samo od 8 znakova:

  • + uvećava za jedan vrednost na koju pokazuje pokazivač
  • - umanjuje za jedan vrednost na koju pokazuje pokazivač
  • < pomera pokazivač za jedno mesto u levo
  • > pomera pokazivač za jedno mesto u desno
  • . ispisuje ASCII vrednost znaka čiji kod se nalazi na lokaciji na koju pokazuje pokazivač
  • , učitava kod ASCII znaka sa tastature i smešta ga na lokaciju na koju pokazuje pokazivač
  • [ započinje petlju koja se izvršava sve dok vrednost u lokaciji na koju je pokazivaš pokazivao na početnu petlje ne bude 0
  • ] završava petlju

Jedan primer brainfuck programa je ovo:

++++++++++[>++++++++++>+++++++++++>++++>++++
+++++++<<<<-]>.+.> - - .>+++++.<<---.>+++.<<+++[>>
>>+++<<<<-]>>>>++.

Ovaj kod, kad se propusti kroz interpreter koji sam napisao (ili bilo koji drugi brainfuck interpreter) će kao rezultat dati string “del-boy”.

Kao što možete pretpostaviti, za ovakav jezik je dosta jednostavno napisati interpreter. Moje rešenje je dosta jednostavno i nekompletno. Napravio sam jedan niz od 1000 elemenata (u praksi je potrebno dosta više… u stvari, u praksi bi taj niz trebao da bude ograničen samo količinom memorije u računaru, ali to ću možda napraviti tek u sledećoj verziji). Ako se dođe do kraja niza odlučio sam da će pokazivač da se vrati na početak. Ista situacija je ako program pokuša da pomeri pokazivač levo od nulte pozicije – vratiće se na kraj.

Nisam ugrađivao nikakve provere sintakse ili bilo šta slično (mrzelo me) tako da vrlo lako može da se desi da interpreter upadne u beskonačnu petlju ili da se neredvidivo ponaša, ali tad je uglavnom program loše napisan. Mislim, najverovatnije ima stvari koje sam propustio, ali za moje test primere je vraćao dobar rezultat.

Svi znakovi sem gore nabrojanih 8 se zanemaruju, tako da slobodno možete da pišete komentare u kod pod uslovom da se u komentaru ne pojavljuju brainfuck znaci. Čak šta više, ako želite možete da sakrijete brainfuck program u neki drugi program, napisan u nekom drugom programskom jeziku.

Jezik koji sam izabrao za implementaciju je Python. Njega već neko vreme učim, ali nikako da nađem više vremena da mu se posvetim tako da sam stalno negde na početku, tako da mi je ovo došlo kao dobra vežba.

I za kraj, kod.

OpenSolaris predavanje – utisci

Ono što sam najavio u prethodnom postu odigralo se danas. Za one koji nisu pročitali prethodni post, u pitanju je predavanje o OpenSolarisu.

Predavanje su održala dva developera iz Češke zaposlena u Sun-u (Tomas Dzik i Milan Jurik). Malo duže je trajalo nego što su najavili, ali su teme bile krajnje zanimljive (bar meni) tako da mi je i drago zbog toga. Pošto sam do sad imao jako malo dodira sa Solarisom (znam samo osnovne stvari) dosta novih stvari sam saznao. Teme o kojima je govoreno su napisane u prethodnom postu, a propraćene su live primerima.

Na kraju (kad je samo nas nekoliko ostalo) su podelili brisače šoferšajbne sa OpenSolaris logo-om uz rečenicu: “Wipe your windows!” :D

Drugi deo je možda i bio zanimljiviji jer je bio neoficijalan, a bilo je i piva :) . Dvojica predavača su došla u LUGoNS prostorije i u opuštenoj atmosferi su pričali o razmim IT temama. Na početku su uglavnom odgovarali na pitanja o OpenSolarisu, ali kasnije su se dotakli raznih tema. Jedna od zanimljivijih stvari koje sam saznao je kako je Eclipse (pomračenje sunca) dobio ime. Naime, IBM je bio kum, a ime je dato kao odgovor na ime firme koja je razvila JavuSun (sunce). I pre sam mislio da je Eclipse dobro ime, ali nikad se nisam potrudio da saznam zašto se tako zove.

Nisam ništa slikao (aparat mi je extremno star, a i nemam naviku), ali dreamerns jeste tako da možda okačim i koju sličicu ako se setim da tražim da mi pošalje.

Sve u svemu, odlično proveden dan.

OpenSolaris – informacije iz prve ruke

U četvrtak, 13. decembra 2007. godine sa početnom u 12h u svečanoj sali na Fakultetu Tehničkih Nauka u Novom Sadu biće održano predavanje o OpenSolaris-u. Predavanje će biti na engleskom, a predavači su Tomas Dzik i Milan Jurik iz Sun Microsytems predstavništva iz Češke.
Open Solaris

Teme koje će biti obrađene su:

  • OpenSolaris i OpenSolaris distribucije, kako učestvovati u razvoju.
  • DTrace – novi alat za tracing + demo uživo.
  • ZFS – novi 128-o bitni fajl sistem + demo uživo
  • Solaris Zones i BrandZ – Linux virtuelizacija pod Solrisom + demo uživo

Predviđeno vreme trajanja manifestacije je sat i trideset minuta.

Ulaz je slobodan i predavanje nije ograničeno sam0 na studente i zaposlene na FTN-u.

Switch to our mobile site