Befunge Eneli Sutt Tanel Talvik Ajalugu Chris Pressey
Befunge Eneli Sutt Tanel Talvik
Ajalugu • Chris Pressey • 1993 • Eesmärk: programmeerimiskeel, mida võimatu kompileerida • Befunge-93 Befunge-96 Befunge-97 Funge-98 (hetkel ametlik)
Mis on Funge? • Interpreteeritud madala taseme programmeerimisekeel • Unikaalne andmemudel ja käskude hulk • Koordinaatvõrgustik • Funge-98 = Unefunge, Befunge, Trefunge • Befunge – kahedimensionaalne, Cartesian Lahey-Space topoloogia
Kood ja andmed • Ühes kahest kohast (pesa) – Funge-mäluruum – kuhi (Befunge-93) või kuhjade kuhi (Befunge -98) • Befunge-93 – märgiga 32 -bitised kuhja pesad ja märgita 8 -bitised Fungemäluruumi pesad • Funge-98 – kuhja pesad sama mälu suurusega kui Funge-mäluruumi pesad
Funge-mäluruum • Befunge-93 – 80 pesa x-teljel ja 25 pesa y-teljel • Funge-98 – olenevalt implementatsioonist (8 -, 16 -, 32 bitine jne), võrdne pesa suurusega
Kuhjade kuhi • LIFO • Befunge-93 – üks kuhi; push ja pop pesasse/-st • Funge-98 – kuhjade kuhi; push ja pop kuhja/-st
Funge lähtekoodi formaat(1) • Befunge-93: –. bf – lihttekst, ASCII sümbolid ja rea lõpu sümbolid ((10), (13) või (13, 10))
Funge lähtekoodi formaat(2) • Funge-98: –. b 98 (ei ole kohustuslik) – sümbolid sõltuvad arvutist või OSst • • 0. . 31 : “ASCII käsud” 32. . 126 : ASCII väljastatavad sümbolid 127 : kustutuse käsk 128. . 2 miljardit : laiendatud väljastatavad sümbolid – (10), (13), (10, 13) ei sõltu OSst
Käsuviit (IP) • vektor • näitab programmi täitmise asukohta • suunavektor – (0, -1) (alla), (1, 0) (paremale), (0, 1) (üles), (-1, 0) (vasakule) • algusvektor – (0, 0) • alguses IP = algusvektor + suunavektor • uus IP = IP + suunavektor
Käsud • Ühesümbolilised • ASCII 32 (tühik) – ASCII 126 (~) • Laiendused
Suuna muutmine • • • > – mine paremale < – mine vasakule v – mine alla ^ – mine üles ? – minema (paremale, vasakule, ülesse, alla) • [ – pööra paremale (Funge-98) • ] – pööra vasakule (Funge-98) • r – peegeldamine (Funge-98)
Kapseldamine • “piirideta ussimäng” (Befunge-93) • erinevad tehnikad (Funge-98) • Funge-mäluruum: tühjad pesad sisaldavad tühikut • Tühik: nop (no operation) • Lõimtöötlus (Funge-98)
Voo kontroll • # – jätab ühe pesa vahele • @ – lõpetab IP töö • Funge-98: – ; – jätab vahele pesad järgmise ; -ni – jätab vahele kuhjast võetud arv pesasid – q – lõpetab programmi töö olenemata töötavatest IP-dest – kordab järgmist käsku kuhjast võetud arv kordi
Otsuste tegemine • ! – loogiline eitus (kui väärtus = 0, siis 1, muidu 0) • ` – suurem kui (kui a 2 > a 1 , siis 1, muidu 0) • _ – paremale vasakule kui (kui kuhjas 0, siis >, muidu <) • | – üles alla kui (kui kuhjas 0, siis v, muidu ^) • w – võrdlus (kui a 2 > a 1, siis [, kui a 1= a 2, siis ei muuda suunda, muidu ])
Andmetüübid: integerid • • • 0. . 9 (a. . f) – lisab kuhja + – liitmine * – korrutamine - – lahutamine (a 2 -a 1) / – jagamine (a 2/a 1) % – jääk (a 2%a 1)
Andmetüübid: stringid • “ – alustab/lõpetab sõnemoodi • Befunge-93 Befunge-98 "hello world" "hello ": : "world" • ‘ – lisab järgnevas pesas oleva sümboli kuhja ning jätab selle sümboli vahele (Funge-98)
Kuhja töötlus • • $ – võta kuhjast pesa ja vabasta : – paljunda pesa – kahe pesa vahetamine n – tühjendab kuhja (Funge-98)
Kuhjade kuhja töötlus • • TOSS ja SOSS { – TOSS SOSS } – SOSS TOSS u – võtab kuhjast count, kui pos, siis count arv pesasid SOSS TOSS, kui neg, siis TOSS SOSS, muidu ei tee midagi
Funge-ruumi mäluala • g – võta Funge-ruumist (x, y) • p – pane Funge-ruumi (x, y) • x ja y võetakse kuhjast
Standardne sisend/väljund • . – numbriline väljund • , – tähemärgiline väljund (10 – uus rida) • & – numbriline sisend • ~ – tähemärgiline sisend (10 – enter vms klahvivajutus)
Faili sisend/väljund • i – faili sisend • o – faili väljund • failinimi kuhja kujul 0“gnirts”
Näidisprogrammid • • • chess. bf helloworld. bf juhuslik 1 ja 16 vahel. bf juhuslikinteger. bf life. bf ruutjuur. bf • Befunge-93 interpretaator: YABI 93 -Beta 3. exe
Lugemiseks • http: //quadium. net/funge/spec 98. ht ml • http: //en. wikipedia. org/wiki/Befunge
Täname kuulamast!
- Slides: 24