Hlavní navigace

Integrované vývojové prostředí Factoru

12. 2. 2008
Doba čtení: 11 minut

Sdílet

S interpretem programovacího jazyka Factor je dodáváno i integrované vývojové prostředí. Toto prostředí, které je mimochodem naprogramované právě ve Factoru, svým pojetím odpovídá filozofii zásobníkových jazyků: na jednu stranu má minimalistické uživatelské rozhraní, na stranu druhou je velmi efektivní.

Obsah

1. Popis integrovaného vývojového prostředí jazyka Factor
2. Režim Listener
3. Režim Browser
4. Režim Inspector
5. Režim Walker
6. Režim Profiler
7. Odkazy na další informační zdroje
8. Obsah další části článku o programovacím jazyce Factor

1. Popis integrovaného vývojového prostředí jazyka Factor

Už v první části článku o programovacím jazyku Factor jsme si řekli, že spolu s tímto jazykem je dodáváno i integrované vývojové prostředí (IDE – Integrated Development Environment). Samotné vývojové prostředí je z velké části napsáno právě ve Factoru, což se v posledních zhruba deseti letech stalo běžnou praxí – viz Java a Eclipse/JBuil­der/NetBeans, C++ a Code:Blocks, Python a Eric či JavaScript a mnohá vývojová prostředí založená na AJAXu. Ve Factoru byly při tvorbě IDE využity přenositelné knihovny pro tvorbu grafického uživatelského rozhraní, především OpenGL a FreeType. Z těchto důvodů je Factorovské IDE plně přenositelné na různé platformy, především na systémy s X-Window, Microsoft Windows a MacOS. Teoreticky je ovšem možný i přenos a běh vývojového prostředí na dalších platformách – postačuje implementovat programovou smyčku zachytávající a zpracovávající události došlé od operačního systému a také následující nízkoúrovňové funkce:

Název funkce Zásobníkový efekt
open-world-window ( world – )
register-window ( world handle – )
set-title ( string world – )
raise-window ( world – )
draw-world ( world – )
select-gl-context ( handle – )
flush-gl-context ( handle – )
close-window ( gadget – )

Vraťme se však k popisu integrovaného vývojového prostředí z uživatelského hlediska, které bude většinu programátorů zajímat nejvíce. Po startu interpretu jazyka Factor a inicializaci všech interních funkcí IDE se otevře okno zobrazené na následujícím obrázku. Na první pohled je patrné, že grafické uživatelské rozhraní vývojového prostředí používá své vlastní ovládací prvky (widgety), což samozřejmě způsobuje, že se IDE chová i vypadá odlišně, než aplikace používající nativní ovládací prvky dané platformy (na druhou stranu GUI prostředí vypadá shodně na všech systémech) – to je celkem obvyklá i když nepříjemná daň za přenositelnost prostředí, které vlastně využívá pouze velmi malou část API (aplikačního programového rozhraní) hostitelského prostředí, typicky pouze funkce pro vytvoření okna, inicializaci kontextu pro OpenGL a registraci základních událostí s jejich zpracováním. Pro zajímavost: systémově závislé zdrojové soubory, které obsahují volání API použité platformy, jsou překvapivě malé a přehledné.

factor31

Obrázek 1: Integrované vývojové prostředí Factoru spuštěné v Linuxu (FluxBox)

Okno vývojového prostředí je rozděleno do několika menších částí vybavených běžnými posuvníky (scrollbary), ovšem místo obvyklého menu se v horní části okna nachází pět tlačítek sloužících k přepínání mezi pěti módy (režimy): Listener, Browser, Inspector, Walker a Profiler. Další tlačítka, která jsou závislá na zvoleném režimu, jsou zobrazena vždy v horní části každého podokna (podoknem je myšlena oblast hlavního okna se samostatným titulkem a posuvníky).

Každé tlačítko obsahuje kromě svého popisu i klávesovou zkratku, přičemž prefix A+ značí stisknutí klávesy Alt nebo Meta spolu s další klávesou a prefix C+ stlačení klávesy Control či Ctrl s další klávesou. Ve své podstatě je možné celé IDE ovládat pouze pomocí klávesnice, protože každé tlačítko má přiřazenou nějakou klávesovou zkratku, na druhou stranu zde nehledejte žádné ikony, které by odporovaly filozofii minimalismu. Z popisu tlačítek vyplývá, že se pro přepínání mezi základními pěti režimy používají klávesové zkratky Alt+1 až Alt+5:

Režim IDE Klávesová zkratka Popsáno v kapitole
Listener Alt+1 2
Browser Alt+2 3
Inspector Alt+3 4
Walker Alt+4 5
Profiler Alt+5 6

2. Režim Listener

Implicitně je vývojové prostředí Factoru po svém spuštění nastaveno do režimu nazvaného Listener. Ve své podstatě se jedná o značně vylepšenou obdobu interaktivní konzole, která se používá prakticky u všech interpretovaných jazyků – Basicem začínaje a Pythonem konče. Na začátku práce s Listenerem je okno IDE rozděleno na tři větší části a stavový řádek umístěný zcela dole. V horní části okna IDE se nachází výpis obsahu zásobníku operandů (oblast s titulkem Data stack), což znamená, že se většinou při ladění nemusíme spoléhat na funkce . a .s.

Ovšem výpis obsahu zásobníku není pouze jednoduchým textovým výstupem – na libovolnou zde vypsanou hodnotu je možné kliknout a otevře se Inspector, pomocí kterého je možné vybranou hodnotu podrobněji prozkoumat. Nemusí se totiž jednat jen o číslo nebo znak (tj. primitivní datový typ), ale například i o objekt, kolekci nebo část programu. Na hodnotu lze kliknout i pravým tlačítkem myši, čímž se zobrazí kontextové menu s nabídkou operací pro vybranou položku – viz následující obrázek.

factor32

Obrázek 2: Kontextové menu zobrazené pro hodnotu uloženou na zásobníku, která představuje citovaný program

Prostřední část okna s titulkem Output je vyhrazena pro textové pole, do kterého se vypisuje výstup z běžících programů a především výstup tisknutý samotným interpretem Factoru. I v tomto poli jsou některé informace „aktivní“, tj. lze na ně kliknout myší, popř. pro ně vyvolat kontextové menu. Chování při výběru zobrazeného textu pomocí levého tlačítka myši se liší podle jeho povahy: konstanty jsou zkopírovány do vstupního řádku (takže je lze stiskem klávesy ENTER uložit na zásobník) a objekty jsou otevřeny v Inspectoru.

factor33

Obrázek 3: Kontextové menu vyvolané nad jménem zobrazeným v části Output

Ve spodní části okna se nachází vstupní textové pole Input, do kterého se zadávají jednotlivé příkazy. Tak jako ve všech textových polích, i zde je možné využívat schránku (clipboard). Velmi užitečné jsou dvě pomůcky – zobrazení zásobníkového efektu pro právě zapisovanou funkci, resp. pro funkci, nad kterou se nachází textový kurzor a také vyhledávání funkcí podle části jejich názvu – postačí stlačit klávesu TAB, která spustí vyhledávání a vypíše ty funkce, které ve svém názvu obsahují zadaný řetězec.

Samotná část grafického uživatelského rozhraní obsahující vybrané funkce se chová jako podokno, které je možné zavřít buď klávesou ESC nebo stiskem ikony čtverečku, která se nachází v levé horní části podokna. Podobným způsobem se chovají i další podokna, například podokno s vyhledáváním slovníků či podokno s výpisem chyb (to není ukázáno na žádném screenshotu, protože se s ním zcela jistě při práci v IDE setkáte).

factor34

Obrázek 4: Zásobníkový efekt zobrazený pro funkci, nad kterou se nachází textový kurzor

Pro ovládání textového editoru použitého v podokně Input, ale i v dalších vstupních podoknech, je možné použít následující sadu klávesových zkratek (POZOR! v dokumentaci k Factoru jsou některé klávesové zkratky uvedeny chybně):

Klávesová zkratka Význam
ENTER odeslání příkazu do interpretu
SHIFT+ENTER přechod na nový řádek
BACKSPACE smazání znaku před kurzorem
DELETE smazání znaku za kurzorem
CTRL+BACKSPACE smazání slova před kurzorem
CTRL+DELETE smazání slova za kurzorem
ALT+BACKSPACE smazání textu od začátku řádku do pozice kurzoru
ALT+DELETE smazání textu od pozice kurzoru do konce řádku
kurzorové klávesy pohyb kurzoru po znacích
CTRL+kurzorové klávesy pohyb kurzoru po slovech
HOME přesun kurzoru na začátek řádku
END přesun kurzoru na konec řádku
SHIFT+pohyb výběr textu pro operace cut/paste/delete (používá se systémová schránka)
CTRL+L výběr celého řádku, na kterém se nachází kurzor
factor35

Obrázek 5: Vyhledávání funkcí podle části jejich názvu

3. Režim Browser

Velmi důležitou a přitom užitečnou součástí Factorovského integrovaného vývojového prostředí je takzvaný Browser. Můžeme se na něj dívat jako na interaktivní nápovědu jak k samotnému prostředí a programovacímu jazyku, tak i (a to zejména) k jednotlivým funkcím, které jsou rozděleny do mnoha tematicky členěných částí – modulů či slovníků. Ovládání Browseru je jednoduché a intuitivní, protože je převzato z běžných internetových prohlížečů – první tři tlačítka Browseru odpovídají tlačítkům Zpět, Dopředu a Domů.

Dokumentace k jednotlivým slovníkům a funkcím je generována na základě jejich zdrojových textů, podobně, jako tomu je v případě JavaDocu a podobných technologií. Za povšimnutí stojí, že každý slovník (modul) může mít uvedeny autory, kteří jsou sami „indexováni“, takže je možné jednoduše zjistit například seznam všech modulů vytvořených vybraným autorem (mám dojem, že stále vede Slava Pestov).

factor36

Obrázek 6: Integrované vývojové prostředí v režimu Browser

factor37

Obrázek 7: Samostatné okno s nápovědu k režimu Browser

4. Režim Inspector

V režimu Inspector je možné zkoumat jednotlivé objekty, které jsou uložené na zásobníku. Do tohoto režimu se lze dostat různými způsoby. Buď stisknutím příslušného tlačítka, stlačením klávesové zkratky ALT+3 nebo zavoláním funkce inspect, která zajistí, že se prozkoumá hodnota či objekt umístěný na nejvyšším místě zásobníku operandů (TOS – Top Of Stack). Objekty je možné nejenom zkoumat, ale také měnit jejich hodnoty či další vlastnosti – do značné míry se zde využívá takzvané reflexe, známé i z mnoha jiných interpretovaných programovacích jazyků.

Na následujících třech screenshotech je ukázán způsob zkoumání objektu uloženého na zásobníku. Práce začíná ve standardním režimu Listener, v němž je na zásobník uložena hodnota [ 1 2 3 swap rot .s ], což je objekt představující citovaný program, který může být v případě potřeby kdykoli spuštěn. Tento objekt je uložen na zásobník stiskem klávesy ENTER.

factor38

Obrázek 8: Uložení citovaného programu (nebo libovolné další hodnoty) na zásobník a vyvolání funkce inspect

Zavoláním funkce inspect se provede přepnutí do režimu Inspector s tím, že se položka umístěná na vrcholu zásobníku prozkoumá a vypíše na obrazovku, samozřejmě v závislosti na konkrétním typu objektu a jeho vlastnostech, spolu s jejím typem (zde se jedná o text „quotation with 6 elements“). V případě výše uvedeného citovaného programu [ 1 2 3 swap rot .s ] vypadá jeho „rozklad“ na vlastnosti následovně:

factor39

Obrázek 9: Po zavolání funkce inspect se zobrazí vlastnosti objektu uloženého na vrcholu zásobníku operandů

To však není vše, protože režim Inspector v sobě skrývá i další funkce. Klikem levým tlačítkem myši na tři tečky zobrazené vedle jména či hodnoty každé vlastnosti se otevře samostatné podokno, ve kterém je možné detailněji danou vlastnost prozkoumat, změnit ji (to však nemusí být ve všech případech dovoleno, především u neměnných – immutable – objektů) nebo ji vyhodnotit. Zvláště výhodné je to u citovaných programů obsahujících podbloky nebo u složitých datových struktur, například seznamů, ve kterých jsou uloženy vnořené seznamy. Pro jednotlivé „podobjekty“ se otevírá vlastní pohled, ovšem je možné použít příkaz pro návrat zpět.

factor3a

Obrázek 10: Každou část objektu je možné prozkoumat samostatně, v případě potřeby ji změnit (pokud je to možné) apod.

5. Režim Walker

Režim Walker je možné využít zejména při hledání chyb v programech. Svým pojetím se blíží známým debuggerům, ovšem s tím rozdílem, že zatímco v běžných imperativních jazycích bývá většinou nutné sledovat i stav mnoha proměnných, v jazycích založených na zásobníku se mnohdy můžeme spokojit se sledováním položek uložených na zásobníku operandů (Data Stack) a na úschovném zásobníku (Retain Stack). Způsob práce v režimu Walker je ukázán na následujících obrázcích, které celý postup demonstrují mnohem lépe než sebelepší text.

Nejprve postačí do textového pole Input zapsat zkoumaný výraz a stlačit klávesu ENTER, čímž se výraz přenese do textového pole CallStack a šipka ukazující aktivní bod se nastaví před první slovo. Potom je možné opětovným mačkáním klávesové zkratky ALT+S výrazem krokovat a sledovat jeho vliv na obsah obou zásobníků. Samozřejmě je možné pomocí klávesové zkratky ALT+I „vejít“ i do volaných slov a prozkoumat jejich kód.

factor3b

Obrázek 11: Zápis jednoduchého výrazu do pole Input (pole Callstack prozatím tento výraz neobsahuje)

factor3c

Obrázek 12: Stlačením klávesy ENTER se výraz přenese do pole Callstack a aktivní bod se nastaví před první slovo

factor3d

Obrázek 13: Postupným mačkáním klávesové zkratky ALT+S je možné krokovat po jednotlivých slovech a přitom sledovat stav zásobníku operandů (Data Stack) i úschovný zásobník (Retain Stack)

factor3e

Obrázek 14: Po vyhodnocení celého výrazu se jeho výsledek vypíše do podokna Output, přičemž na zásobníku operandů mohou zůstat nezpracované objekty

Následuje ukázka ladění výrazu, který ve své původní verzi obsahuje chybu. Zatímco při spuštění celého výrazu nevíme přesně, kde chyba nastala (jedná se o chybnou práci se zásobníkem operandů a úschovným zásobníkem), po krokování je již vše zřejmé a výraz je možné opravit.

factor3f

Obrázek 15: Chybný výraz je zapsán do textového pole Input

factor3g

Obrázek 16: Krokování opraveného výrazu

factor3h

Obrázek 17: Po opravě jsme došli až na konec výrazu a získali tak kýženou hodnotu 42

6. Režim Profiler

Posledním režimem dostupným z hlavní nabídky integrovaného vývojového prostředí jazyka Factor, je režim nazvaný Profiler. Do tohoto režimu se lze dostat buď stiskem příslušného tlačítka nebo zápisem zkoumaného výrazu do vstupního textového pole a stlačením klávesové zkratky CTRL+R. Třetí způsob spočívá v zápisu citovaného programu do hranatých závorek a zavolání funkce profile. Výraz je ve všech třech případech interpretován běžným způsobem a na konec se do horní části okna integrovaného vývojového prostředí vypíšou informace o tom, které funkce byly volány. Profiler má však v současné verzi ještě některé limity, které jeho užitečnost poněkud snižují. Například se nevypisují zabudované funkce, což je škoda, protože právě počet jejich volání může být zajímavý, například při vytváření statistiky o práci s VM na nejnižší úrovni. Také se nedají zjistit informace o zásobnících, například nejvyšší počet obsazených položek, průměrná naplněnost zásobníku atd.

factor3i

Obrázek 18: Výsledek běhu profileru je zobrazen ve formě přehledné tabulky

CS24_early

7. Odkazy na další informační zdroje

  1. Factor programming language:
    http://factor­code.org/
  2. Factor documentation:
    http://factor­code.org/respon­der/help/
  3. Factor FAQ:
    http://factor­code.org/faq.fhtml
  4. Factor: a practical stack language (blogpost):
    http://factor-language.blog­spot.com/
  5. Factor-talk --:
    https://lists­.sourceforge.net/lis­ts/listinfo/fac­tor-talk
  6. Factor-talk – archive:
    http://source­forge.net/mai­larchive/forum­.php?forum_na­me=factor-talk
  7. concatenative (IRC kanál o podobných programovacích jazycích):
    http://www.ir­cbrowse.com/cda­tes.html?chan­nel=concatena­tive
  8. Vocabulary index (dnes již docela rozsáhlé):
    http://factor­code.org/respon­der/help/show-help?topic=vocab-index
  9. Factor Magic:
    http://fun-factor.blogspot­.com/2007/03/fac­tor-magic.html
  10. Factor Magic, Part 2:
    http://fun-factor.blogspot­.com/2007/04/fac­tor-magic-part-2.html
  11. Pastebin (collaborative development over IRC):
    http://paste.fac­torcode.org/
  12. planet-factor:
    http://planet­.factorcode.or­g/

8. Obsah další části článku o programovacím jazyce Factor

Ústředním tématem následující části článku o netradičním programovacím jazyce Factor bude objektový systém, tj. použití objektů a objektově orientovaného přístupu při vývoji aplikací. Dále pak využití funkcionálního programování, jež je ve Factoru samozřejmě plně podporované, a také způsob vývoje založený na neustálém provádění refaktoringu a jednotkových testů, ke kterým syntaxe i sémantika Factoru programátory vede (na stejném principu je ostatně založeno i v některých vývojářských kruzích populární extrémní programování známé také pod zkratkou XP). Také si popíšeme vybrané zajímavé a užitečné knihovny, které je možné v programech použít. Nebude chybět ani zmínka o nasazení Factoru v roli jednoduchého samostatně pracujícího internetového či intranetového aplikačního serveru (AS).

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.