CHIP – REBOL/Core – The Language of the Free

Carl Sassenrath-nak – ő volt az egyik fejlesztője az Amiga multitaszk operációs rendszerének, és több hasonló kaliberű projektnek – már 20 éve motoszkált a fejében egy olyan programnyelv ötlete, amely egyszerűsége mellett képes minden olyan feladat megoldására, amelyet addig csak a sok tanulást és tapasztalatot igénylő nyelvekkel lehetett megvalósítani. Az ‘egyszerűség’ nem a nyelv alacsony szintjét jelenti, hanem a felhasználó számára biztosítja az egyszerű programkészítést, és a programozói gondolkodásmód helyett elegendő használatához a ‘hagyományos’ de logikus gondolkodás, és a programnyelv szerkezete ehhez igyekszik alkalmazkodni.

Carl álma csak most, 1998-ban valósult meg, mikor is jó néhány ‘rebellis’ programozóval megalkották a REBOL-t a dinamikus közlő nyelvet (dynamic messaging language) amelyet nagyon könnyű megtanulni és használni, akár mindenféle előzetes programozói ismeret nélkül is.

A ‘dynamic messaging’ ebben az esetben az a célt szolgálja, hogy a programnyelv egyfajta fordítóként működjön közre a felhasználó és a gép párbeszédében, méghozzá olyan módon, hogy ne okozzon gondot a teljesen különböző platformok adattípusainak, kommunikációs rendszereinek használata, ami ma igencsak megnehezíti a felhasználók dolgát. Több ilyen platformfüggetlen nyelv létezik (pld: Java) de a megvalósítás során sokszor elvész az igazi függetlenség… (lásd: Java & Microsoft)

A REBOL az adattípusaival képes az aktuális futtató rendszeren a rendszerhez hozzákapcsolni a használni kívánt file-okat, adatbázisokat. Jó példa erre egy FONT (betűtípus) használata. A betűtípusokat tartalmazó file-ok struktúrája, és tartalma Windows-ban, Linux-ban vagy AMIGA-n teljesen különböznek, létezik TrueType, és bitmap font is… Viszont egy REBOL alkalmazásban, programban az interpreter dolga, hogy áthidalja ezeket a különbségeket, és bármilyen környezetben hasonló output-ot jelenítsen meg.

A REBOL 100%-ban platform és hardware független, és ezt annak köszönheti elsősorban, hogy nem forrás szinten került kiadásra hanem majd minden élő – a futtatásához elég előforrással, illetve hálózati kapcsolattal rendelkező – operációs rendszerre lefordítva, közvetlenül futtatható formában. A forrás szintű publikáció általában magával vonja az egyes platformokon történő módosításokat, illetve portolási nehézségeket, ami sokakat elriaszthat a használatától. Az 1.0.2-es verzió Amiga 68k, FreeBSD, Linux (Red Hat, Debian, Slackware), Macintosh PPC, Solaris 2.6 SPARC, és Windows 95/98/NT rendszereken használható, de a folyamatban van még jó néhány operációs rendszer portja is: BeOS i386, BeOS PPC, HP UX, AIX, IRIX, OS/2, Psion, Macintosh 68k…

A REBOL-ba integrálták a fejlesztők az Internet-en való kommunikációt is, így a TCP/IP stack megléte alapkövetelmény. Ezen a felületen a REBOL programok a világ legegyszerűbb módján tudnak adatokat forgalmazni, legyen az FTP, HTTP, vagy éppen egy e-mail elküldése, levétele.

Egy példa az egyszerűségére: “write %rebolcom.html read http://www.rebol.com”

Ez a sor letölti a megadott URL-ről az alapértelmezett html file-t (index.html) és kimenti a lokális drive-ra ‘rebolcom.html’-ként. Egy FTP site-ról, vagy éppen egy mailbox-ból se sokkal bonyolultabb letölteni adatokat.

A REBOL-nak nincs saját editora, a programok bármilyen szöveg-szerkesztővel elkészíthetők, amely képes normál textfile-t menteni. A ‘felülete’ hasonló a régi BASIC vagy FORTH interpreterekéhez, az indítás után a begépelt parancsokat, értékadásokat megjegyzi, betölthetünk és indíthatunk programokat a REBOL prompt-ból. A több mint 200 előre definiált utasítással szinte bármilyen programozói feladat megoldható, kivéve az operációs rendszer függő dolgok. Ilyenek jelenleg a grafikával, GUI-val összefüggő programok, amelyeket a későbbiekben platform-függetlenül használhatnak a REBOL-ban programozók.

A függvények, vagy ‘szavak’ paramétereit szögletes zárójelek (“[“,”]”) közé kell tenni. Ezeket a szimbólumokat a C nyelvhez hasonlóan objektumok összekapcsolására is használhatjuk, például egy függvény definíciójában. Az egyes szavak és értékek elválasztását a szóköz (space) karakter végzi, nincs szükség más elválasztó karakterek használatára.

Adattípusok (datatypes)

A REBOL felismeri a string-ekben tárolt adatokat a típusuk alapján (datatype), és annak megfelelően használja, és éri el azokat. Az előző példában a ‘http://’ szövegrészből megtudta az interpreter, hogy ez egy URL, és a meglévő TCP/IP kapcsolatot használva érje el azt. A datatype-okban a következő típusok vannak definiálva:

integer (0, 1234, -1234)
decimal (3.1415, +1.23E4)
time (1:22, 21:56:00)
date (30-jan-1998, 1998-10-29)
money ($1234.56, US$12.49)
string (“hello world”)
binary (#{3A1852})
email (info@rebol.com)
file (%memo.txt, %C:/DOS/FDISK.COM)
url (http://www.rebol.com)
issue (#707-464-8000)
tuple (1.2.0, 199.4.80.1)
logic (true, false, on, off)

REBOL szavak (words)

A REBOL programok (script-ek) hasonlóan a többi programozási nyelvhez, tartalmaznak utasításokat, szimbólumokat, értékadásokat, stb. Viszont ezen ‘szavak’ használata sokkal egyszerűbb, mint más nyelvekben. A datatype rendszernek köszönhetően a szimbólumok típusa automatikusan olyan lesz, mint a neki adott érték típusa. Tehát ugyanolyan módon kell definiálni egy string-et (város: “Budapest”), mint egy függvényt (program: [if age > 32 [print város]]). A REBOL szavaiban nem különbözteti meg a kis és nagy betűket, tehát a “város:”-ra hivatkozhatunk “Város:”-ként is. Sőt, az ékezetes betűk használata is támogatott (Város: = VÁROS: = varos:), de az ékezetes, és ékezet nélküli szó ugyanazt jelenti az interpreter számára. Lehetőség van a REBOL nyelvi lokalizálására is, vagyis az utasításoknak egy ALIAS-t definiálva akár magyarul is készíthetünk programokat. (alias ‘print “kiír”)

REBOL sorozatok/tömbök (series)

A sorozatok – vagy más néven tömbök – definíciója ugyanúgy történik, mint az egyes változóké, a különbség csak annyi, hogy több értéket adunk meg. Nem kell előre definiálnunk a tömb méretét és típusait sem… Ezt mind elvégzi az interpreter a az értékadás, illetve a módosítás folyamán.

színek: [“piros” “zöld” “kék” “sárga” “narancs”]

A definíció után a tömb elemeire többféle módon hivatkozhatunk.
Ki irathajuk az összes elemet (print színek), egy fix pozíciójú elemet (print pick színek 3), első/utolsó elemet (print first/last színek 3), következő elemet (print next színek), …

A tömbökben az egyes elemeket a pozíciójuknak megfelelően érhetjük el. Lehet keresni is az elemek között (find) illetve kijelölni az elemeket (select). Természetesen ezeken kívül még jó néhány, tömbökre vonatkozó parancs létezik; (change, insert, remove, clear, …)

REBOL ciklusok

Minden programnyelv rendelkezik ciklusvezérlő utasításokkal, amelyek biztosítják a feltételes, vagy éppen feltétel nélküli többszöri végrehajtását egyes programrészleteknek. A legegyszerűbb a ‘loop’ utasítás, amely az utána írt numerikus értéknek megfelelően hajtja végre többször a programrészt. A ‘repeat’ egy kicsit kibővített ‘loop’, annyiban, hogy az utána írt változó értéke mindig a már lefutott ciklusok számát tartalmazza. A ‘for’ – hasonlóan a BASIC és C for-jához – rendelkezik kezdő- és vég- értékekkel, továbbá nem csak 1-el lehet növelni/csökkenteni a ciklusszámlálót, hanem bármennyivel, és ez a ciklusfajta is elérhetővé teszi a ciklusszámláló értékét.

“for count 0 50 10 [print count]” – kiírja 0-tól 50-ig a számokat tízesével.

Az ‘until’ egy nagyon érdekes megvalósításával találkozhatunk a REBOL-ban, a ciklus addig fog futni, amíg a ciklusba tett programrészlet utolsó sora TRUE értéket nem kap, vagyis a ciklus ellenőrző része a cikluson belül kap helyet.

A ciklusokból (értéktől és állapottól függetlenül) való kilépésre a ‘break’ parancs használható.

A make parancs

A ‘make’ parancs képes feldolgozni az átadott tömb tartalmát, majd a megadott adattípusnak megfelelő formára hozni.

when: make date! [30 9 1998]
print when
30/Sep/1998

Ebben az esetben a 30, a 9, és az 1998 decimális értékekből a ‘make’ létrehozta a ‘date!’ datatype-nak megfelelő dátumot.

http://rebol.com

rebol-a.gif

Leave a Reply

Your email address will not be published. Required fields are marked *