A Factor programozási nyelv

Fordítók

Fordítók

Jelenleg csupán egyetlen Factor fejlesztőkörnyezet érhető el, a Slava Pestov által vezetett fejlesztés, mely a factorcode.org-ról érhető el. A Factor fordító gépi kódra fordít és többszinten optimalizál is. Ezeket a lépéseket a legtöbbször akkor is elvégzi, ha a programunkat a listenerből futtatjuk, vagyis a listener egy olyan interpreter, ami just-in-time gépi kódra is fordít.

A factor optimalizáló fordítója ezen felül igen komoly megoldásokat is alkalmaz már a jelenlegi formájában is (kód analízisek, SSE3 technika használata stb.) és a készítők célja a C nyelven írt programok sebességének a megközelítése.

Fordítási/futtatási lehetőségek

Természetesen a listenerből tetszőleges factor szótárat betöltve szavakat futtathatunk. Bár egyébként mint mondtuk ilyenkor se interpretált, hanem helyben fordított bináris kód fut le, azért nem mindig előnyös ez a fajta megoldás, mert például ha ehhez tartjuk magunkat feltételezzük, hogy a felhasználónak is van factor rendszer a gépére telepítve, ami egyáltalán nem valószínű az esetek többségében.

A fenti kihívásokra az adja meg a választ, hogy egy factor szótárhoz rendelhetünk belépési pontot is. Ezt a MAIN: szó segítségével tehetjük meg, mely mögé csak be kell írnunk a belépési pontként szolgáló szavunk nevét és máris egy lépéssel közelebb kerülünk az egyénileg futtatható kódhoz.

Ha már adtunk szótárunkhoz belépési pontot, akkor a következő lehetőségekből válogathatunk:

Egy példa (és példaprogram) Bináris deploy-ra:

! Copyright (C) 2012 Richard Thier ! See http://factorcode.org/license.txt for BSD license. USING: io math kernel math.parser math.ranges random locals ; IN: cserkeszek : greet ( -- ) "Cserkeszkerdes:" print "---------------" print ; :: ask-question ( x y -- x y ) "Ha egy cserkesznek " write x number>string write " krumplija van," print y number>string write " cserkesznek, hany krumplija van?" print x y ; : start-cserkesz ( -- ) greet 1 32 [a,b] random 1 32 [a,b] random ask-question * readln string>number = [ "Helyes valasz!" print ] [ "Hibas valasz!" print ] if ; MAIN: start-cserkesz

Helyezzük el a fájl a factor work/cserkeszek mappája alá és már csak annyi a dolgunk, hogy a listenernek megadjuk: "cserkeszek" deploy-tool. Ha entert ütünk, akkor egy ablak jelenik meg, ahol beállíthatjuk a fordítási jellemzőket: Milyen szintűen legyenek a keletkezett fájlban reflection szimbólumok hibák esetére, konzolos legyen-e az alkalmazás, használhassunk-e szálakat, mi legyen a kimeneti bináris neve stb. Ha ezeket beállítottuk a megfelelő értékekre, a deploy gombra kattintva kezdhetjük meg a fordítást, ami egy kicsit komolyabb program esetén nem is olyan rövid, íy akár várakoznunk is kellhet.

A bináris output alapesetben a factor telepítési könyvtára alatt egy új könyvtárba keletkezik. Ha ezt megnyitjuk ott egy exe fájlt (vagy linux, esetleg mac esetén megfelelő binárist) láthatunk és egy image kiterjesztésűállományt. Ez a két fájl egymás mellett kell legyen, ha a programot futtatni szeretnénk. Ennek az oka az, hogy a Factor programok fordításakor az a konvenció, hogy minden, a programhoz szükséges függőséget a lehető legkissebb formájában adjuk a bináris mellé. Ez az image fájl pont ezeket a függőségeket tartalmazza, ami hasznos, mert nem keletkezik "DLL-pokol" és a programjaink gyakorlatilag telepítés nélkül másolhatóak, viszont egyben kártékony is lehet, hiszen így telepítéskor nem használják ki a programok, hogy esetleg más már telepített alkalmazások miatt a szükséges függőségek már fent lehetnek a gépen...