Programátorské editory (X)WPE a (X)FTE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= A novice programmer was once assigned to code a simple financial package. The novice worked furiously for many days, but when his master reviewed his program, he discovered that it contained a screen editor, a set of generalized graphics routines, and artificial intelligence interface, but not the slightest mention of anything financial. When the master asked about this, the novice became indignant. "Don't be so impatient," he said, "I'll put the financial stuff in eventually." -- Geoffrey James, "The Tao of Programming" Miroslav Janiš, 9. června 1998 Abstract Editory wpe a fte budou patrně bližší těm, kteří přecházejí na Linux z DOu a UNIXové editory typu vi nebo emacs jsou pro ně záhadou. Oba popisované editory se více či méně úspěšně snaží napodobit "standardní" Borlandí ovládání (které podle mne nepatří mezi nejhorší). Hned na začátku bych však zmínil i nevýhody těchto editorů - fte nemá verzi pro terminál a u wpe se mi ji vůbec nepodařilo rozchodit. Takže jejich použitelnost je zúžena na X-Window System a u fte ještě lze použít verzi pro textovou konzoli. (BTW: pokud používáte KDE, tak vás možná potěší verze pro tento X desktop (není ale součástí standardní distribuce fte).) Editor XWPE Téměř dokonalá kopie Borlandího rozhraní; umožňuje vše (velmi nadneseně řečeno), co si zmlsaný programátor může přát. Stvořil ho pan Fred Kruse a ve verzi 1.4.2 existuje bez změny již od roku 1993. Teprve v nedávné době byly zdrojáky oprášeny a byl zahájen projekt "za lepší WPE" (just kidding). Podívejte se na adresu XWPE http://www.rpi.edu/ payned/xwpe/. Další text se bez výjimek bude vztahovat ke staré verzi 1.4.2. Xwpe Podobnou simulací Borlandů je program RHIDE, který byl napsán pro djgpp, což je dosový port překladače GNU C (produkuje tak dobrý kód, že byl použit IDSoftwarem k překladu QUAKEa místo Watcom C). RHIDE existuje jak pod DO, tak pro Linux. Linuxovou verzi jsem však nezkoušel a o té dosové si pamatuji jen to, že když jsem hned na začátek zdrojáku napsal komentář, tak při listování spolehlivě zatuhl :-) Takže toto rozhraní rád přenechám povolanějším... Stručný výčet schopností WPE - vytváření projektů s definicí parametrů pro překladač i linker - definice breakpointů a krokování přímo ve zdrojovém kódu, klasické výpisy obsahu proměnných (Watch) a zásobníku programu (Stack) - odskakování na chyby a "warningy" objevené překladačem a zpřístupněné pomocí okénka Messages - možnost nakonfigurovat a využít různé překladače - kromě C(++) třeba Fortran, Pascal či LaTeX (hmm\ldots{} tady je trochu problém, protože xwpe "cpe" zcela svévolně libovolnému překladači spuštěnému z menu příkazem Run/Compile parametr -c, takže je třeba spouštět skript, který ignoruje první parametr (-c) a spouští latex až s tím druhým (filename)) - zobrazování manových stránek i GNU info --- umožňuje pohodlnou navigaci dokumentem, leč tu a tam špatně interpretuje odkaz (spíš ignoruje)... - "obarvování" syntaxe (snaha o český překlad (spíš přepis) slova highlight) a konfigurace barev editoru a syntaxe - konfigurace chování editoru (tabelátory, autoindent, autosave...), ale jinak je konfigurace možností editace dost omezená. - a nakonec umí také zcela nečekaně v ten nejnevhodnější okamžik spolehlivě chcípnout (hlavně při prohlížení manových stránek) ;-) (ale většinou se mu podaří rozdělanou práci uložit...) Zhodnocení Obecně lze říci, že k programování (spíše ke zkoušení programovat) je tento editor celkem použitelný - napíšete kód, rovnou ho přeložíte, opravíte syntaktické a jiné chyby odhalené překladačem a můžete ho vesele krokovat a provádět s ním různé jiné kejkle bez nutnosti vytvářet Makefile a spouštět debugger. Ovšem k většímu projektu je Makefile stejně nutno vytvořit (co s nepřenositelným "projektfajlem"? (Nějakým kouzlem (skriptíkem) by z něho ten Makefile vytvořit možná šlo...)) a chyby je v zásadě lépe vůbec nedělat --- ušetří to spoustu práce s následným honěním nějakého stupidního bugu ;-). Jinak se mi zdá tento editor dost omezený - barevná syntaxe funguje jen pro pár vyvolených (C(++), Pascal, Fortran(?)...), indent je dost hloupý, a editor vůbec neumí kompletaci slov (doplňování slov podle předchozího kontextu). O definování klávesových zkratek pro vkládání často používaných výrazů si při používání tohoto editoru můžete nechat jen zdát. A právě tyto vlastnosti má editor fte. Editor XFTE Editor fte si neklade za cíl kopírovat IDE. Je to jen editor. Ovšem editor vhodný pro programátory zvyklé Borlandímu ovládání. Zdá se, že byl původně stvořen pod OS/2 a teprve postupem času portován na ostatní systémy i "systémy" --- DOS, Linux, Win32. Napsal (a naprogramoval :-) ) ho pan Mirko Macek a je možné ho získat na (http://ixtas.fri.uni-lj.si/ markom/fte). Zde existuje ve verzi pro X-Window a linuxovou konzoli (hovoříme-li o možnostech týkajících se Linuxu). Někde na adrese http://www.kde.org lze též najít port pro KDE od jiného autora. Tato verze má tu výhodu, že pokud máte správně nainstalovanou českou klávesnici pod X-Window (čili chodí-li vám třeba pod KDE aplikacemi), tak vám zde bude chodit též. Méně stručný výčet schopností FTE - Konfigurovatelné zvýraznění syntaxe (highlighting) - můžete přidávat vlastní definice různých formátů souborů. Nadefinovány jsou tyto jazyky/formáty: C(++), Java, REXX, Perl, Pascal, Ada, UNIX shell skripty, tcl, HTML, La\TeX, E-mailové zprávy, DIFF a další. Ne všude funguje hilite tak, jak by si člověk představoval - u HTML nejsou nadefinována některá klíčová slova a JavaScript to vůbec nerozezná :-) V shellovských skriptech je zase jako příkaz zvýrazněno jen první slovo, takže pokud voláte nějaký program celou cestou, tak je zvýrazněn jen první adresář (kromě lenosti však nic nebrání odstranění těchto nedostatků přímo v konfiguračních souborech). - Speciální indent pro C(++), Perl, Javu, REXX, přičemž pro C existují tři módy --- standardní, GNU a Linux kernel styl. Céčkovský indent mne opravdu nadchl --- na patřičné místo na řádku kursor odskakuje hned po stisknutí klávesy Enter a inteligentně rozpoznává složené závorky. To znamená, že zdroják píšete bez jakýchkoli starostí o formátování textu --- vše se provádí automaticky. Další pomůcka usnadňující orientaci v textu je, že při najetí kursorem na závorku (jakoukoli --- [, ], {, }, ( a ) ) se zvýrazní odpovídající závorka. - Schopnost kompletování slov na základě předchozího kontextu - pokud se v předchozím textu již dané slovo vyskytuje, stačí napsat několik prvních písmen a stiskem kláves Ctrl+Tab se slovo automaticky dopíše (pro lenochy jako jsem já je to přímo terno\ldots). Bohužel to již nefunguje, když něco dopisujete na začátku zdrojáku a slovo, které byste chtěli doplnit, se sice v textu již vyskytuje, ale nachází se za inkriminovaným místem :-( - Folds (čti faldy ;-) ) - ačkoli je pro ně vytvořeno speciální menu, teprve nedávno (cca půl hodiny) jsem pochopil, k čemu tohle zvíře vlastně je, neboť jsem měl čas, chuť a hlavně důvod (psaní tohoto článku) se tím zabývat. Zdá se, že je to velmi užitečná schopnost zpřehlednit vytvářený text --- např. v C zdrojáku můžete pomocí menu Fold/Create folds at routines vytvořit "faldík" pro každou funkci. Potom stiskem kláves Alt+Gray / všechny foldy zavřete. Text se poté jeví jako seznam funkcí - zobrazí se totiž pouze první řádek ve foldu. Na libovolný fold lze najet kursorem a kombinací kláves Ctrl+Gray + a Ctrl+Gray - je lze otvírat či zavírat. Foldy lze vytvářet i pomocí regexpu či jak se vám zachce - viz menu Fold. Není však vše zlato, co se třpytí... U foldů lze definovat pouze začátek. Ukončení zařídí buď definice dalšího foldu nebo konec souboru. To vede např. při "ofoldování" zdrojáku podle funkcí (viz výše) k tomu, že se komentáře před funkcí, které se jí většinou také týkají, dostanou na konec foldu, ve kterém je předcházející funkce. Je zde však stále možnost použít regexp --- takže pokud píšete komentáře k funkcím ve stylu /* Fce: ... */, můžete vytvořit foldy přes regexp pomocí výrazu { \/\* Fce:}. - Chování editoru lze ovlivňovat na poměrně nízké úrovni (víte, jak to myslím - assembler je také programovací jazyk nízké úrovně, ale lze v něm udělat všechno). Pro každý typ dokumentu je vytvořen zvláštní konfigurační soubor, ve kterém je nadefinován způsob obarvování syntaxe, speciální klávesové zkratky, přídavná menu (viz HTML), formátování textu, okraje a spousta dalších vlastností. Vše lze libovolně měnit a upravovat podle vlastních představ. Je však pravda, že je v těch konfiguračních souborech trochu chaos, ale když začnete souborem main.fte, tak se snadno zorientujete. A editor fte má pro tyto konfiguráky zvláštní mód s barvičkami :-). Po editaci konfiguračních souborů je třeba ještě vytvořit "překlad" pomocí prográmku cfte a překopírovat ho do souboru HOME/.fterc. Potom znovu spustíte fte a je to. - překlad a opravy zdrojových textů - fte umožňuje spouštět překladač na pozadí (implicitně spouští make, takže je třeba vytvořit i Makefile (pro který je též zvláštní mód)) a odchytává si jeho chybové hlášky. Potom lze pomocí okna Messages skákati po chybách a opravovati. Žádné debugovací schopnosti (krokování či breakpointy) to však nemá - je ovšem otázka, zda je to bug nebo feature (fprintf(stderr, "Err: blah\n"); také není k zahození). Zhodnocení Ačkoli ladící schopnosti editoru fte jsou zredukovány na okénko s chybovými hláškami, přesto si tento editor snadno získal mé srdce - jeho implicitní nastavení mi totiž maximálně vyhovuje, a tak změny v konfiguraci nebyly nějak dalekosáhlé. Přidal jsem si pouze mód pro českou klávesnici, zkratku pro v HTML módu (Ctrl+Space) a ještě pár maličkostí jako používání českého fontu nebo předefinování zkratky Ctrl+Tab na Shift+Tab kvůli KDE. Samozřejmě, že i tento editor jako většina jiných má své nedostatky, o kterých jsem se zmiňoval výše, ale tyto nedostatky bohatě vyvažují možnosti, které tento editor poskytuje. Grasp Karel Žák, 9. června 1998 A toto je můj favorit - GRASP neboli Graphical Representations of Algorithms, Structures and Processes. Nejedná se o žádného vývojářského obra, ale naopak o docela úhledný editor, který svou funkci pro programování projektů o několika souborech a pár stech řádcích plní na výbornou. Osobně ho používám asi 1 rok a jsem nadšen. Současná verze je 6.2.7 pro Unix (29. dubna 1998) a 6.2.8 pro Win95/NT (25. března 1998). Program je napsán pro X Window za použití Motif 1.1.2. Pochopitelně autoři nezapomínají ani na ty co nemají Motif a program lze stáhnout na adrese: http://www.eng.auburn.edu/department/cse/research/grasp/ jako staticky slinkované binárky. GRASP je připraven pro jazyky Ada 95, C, C++, Java a VHDL. GRASP je integrován do GNU rodiny kompilátorů pro Adu, C a Sunovského javac pro Javu (dle informací na Webu). Jako první se při spuštění objeví okno obsahující soubory projektu, pokud žádný projekt nemáte tak logo programu. Zde se lze rozhodnout jestli si založíte nový projekt nebo si prostě jen tak zeditujete nějaký ten soubor. Tato možnost mi tak trochu chybí u Source Navigátoru, který předpokládá, že pokud někdo něco chce, musí si nejdříve vytvořit projekt. Pro své interní informace si GRASP vytváří soubor v adresáři, ve kterém se nacházejí editované soubory. Pak už stačí jen vybrat jazyk, ve kterém bude vámi editovaný soubor, nebo přímo vybrat soubor v souborech zařazených do projektu, a objeví se vlastní editor. Editor podporuje všechny obvyklé funkce (tedy obarvování klíčových slov, zarovnávání, spouštění make, run programu atd.), ale hlavně CSD. A to je ten důvod proč o GRASPu píši. CSD - Control Structure Diagram je nádherná věc, kterou můžete vidět na přiloženém obrázku. Ano, to jsou ty "čáry", které nám krásně zpřehledňují zdrojový kód. Na první pohled je ihned patrné kdy a kam se vracíte, kde je jaký cyklus, if nebo něco jiného. Součástí značení textu může též být možnost číslování řádků. Co se mi také líbí je, že pokud uděláte chybu (např. zapomenete středník), tak vás program taktně upozorní, že s takovým kódem CSD prostě neudělá (máte-li tedy CSD v celém souboru v pořádku, je pravděpodobné, že i základní syntaxe kódu je OK). O případných chybách GRASP informuje programátora v okně vzkazů. Další zajímavou vlastností GRASPu je expanze maker. To znamená, že editor makra ukrytá v souborech includovaných do editovaného souboru pro vlastní kontrolu expanduje (ale na obrazovce a v souboru vám pochopitelně zůstane to co jste napsali). Tak např. pokud bude soubor.h a v něm makro AHOJ a my toto makro budeme používat v souborech .c, bude GRASP kontrolovat jak toto makro "zapadá" do souborů .c. Pokud tedy bude v makru AHOJ chyba, budeme na tuto skutečnost upozorněni. GRASP tedy použité AHOJ nebere jen jako text, ale jako opravdové makro. Lze nastavit, z jakých #include souborů bude expanze probíhat (lze zahrnout i /usr/include). V GRASPu si můžete také definovat vlastní šablony. Já jsem to například používal při psaní programů používajících knihovnu mSQL, kdy se mi nechtělo psát pořád ty šílené názvy funkcí. Jen stačilo nadefinovat funkce nebo i cykly (a ostatně cokoliv) do souboru se šablonami, a v menu editoru se vše objevilo. Pak pokud chcete něco z toho co jste nadefinovali, jen zamyšujete do tohoto menu a text ukrytý pod touto položkou je GRASPem napsán. Na dalším obrázku je toto menu se šablonami dodanými s programem to celé světle modré okénko. Mezi další příjemnosti patří barevný tisk do PostScriptu, kdy na výtisku je pochopitelně možné mít i CSD (to by mohlo být užitečné pro všechny tvůrce literatury o programovaní (už vidím ty krásné a přehledné příručky a ne ten šedý chaos, na kterém oči umdlévají - ale vraťme se z obláčku na zem...). Nově je v GRASPu interface pro grep, ale to si už asi každý představí sám. A dobrá zpráva na konec, v další verzi má být podpora Tcl a Perlu, a tak si přijdou na své i nekompilovanci... Source Navigator Karel Žák, 9. června 1998 Pokud se u GRASPu zmiňuji o tom, že se hodí i pro psaní malých prográmků, tak Source Navigator (SN) bych zařadil do přesně opačné kategorie IDE programů. Pochopitelně i SN lze použít na psaní několika málo řádek, ale pravděpodobně při něm nevyužijete všechny jeho možnosti a jak dále uvidíme, bylo by to tak trochu jako používat "dělo na komáry". Verze kterou já používám je tzv. \uv{lite version}, tuto lze získat na http://www.cygnus.com. Její omezení (na které jsem narazil) je neochota pracovat s projekty o více než 50 000 řádkách. Zájemcům o plnou verzi sám SN napoví hned při spuštění, kam se obrátit a pro koho si dolárky připravit (ano, ano, žádné GNU). SN je kompletním prostředím pro vývoj jedním vývojářem (např. program C-Forge to umí i pro tým vývojářů rozesetých po síti, ale o tom až někdy příště). Součástí balíku je manažer projektů, manažer souborů a funkcí, interface pro debugger a make a hlavně editor. Vše je velice snadno a různorodě konfigurovatelné. SN umí aplikovat všechny své možnosti na Tcl, Javu, Fortran, Cobol, C/C++, asm. Ke všem jazykům je možno nastavit i externí editor a specifikovat koncovky souborů. Bohužel k C++ a C přistupuje stejně. Možná by nebylo od věci, pokud je editován soubor.c, nenutit programátorovi na pracovní plochu nástroje na práci s objekty, ale uvidíme, vše se vyvíjí. Jak je dobrým zvykem, přistupuje i SN k psaní programů jako k tvorbě projektů. Projekt je možné vytvořit i z existujících souborů. K tomu slouží něco co lze nazvat manažerem projektů. Zde je možné přidávat a ubírat adresáře, soubory do projektu, ale i spojovat projekty atd. Při vytvoření projektu udělá SN v určeném adresáři jeden soubor a adresář, ve kterých si udržuje databáze o zdrojovém kódu. Pro každý projekt lze vytvořit specielní nastavení všeho nastavitelného. Tedy krátce: - barvy a fonty pro asi 40 druhů textů (např. komentáře, deklarace, ...), oken a menu - tisk - HTML viewer - bug report - debugger - make - version control system (výběr s RCS, CVS, SCCS). - tvorba záloh (.bak) - automatické zarovnávání - převod tabulátorů na mezery - nastavení cache - a ještě moc a moc věciček\dots{} Po vytvoření projektu se objeví něco jako manažer souborů. Ten je schopen zobrazovat buď seznam souborů nebo velice pěkný seznam funkcí (na obrázku). Právě schopnost zacházet s projektem z hlediska funkcí a ne jen souborů je velice efektivní. Programátor pak už nemusí přemýšlet, kde v jakém souboru je jaká funkce, ale jen v seznamu funkcí, který lze třídit dle nastavitelného filtru, najít tu pravou a editovat. Editor v sobě sdružuje hned několik hezkých nástrojů (některé lze volat i z manažera souborů). Editor je schopen zarovnávat, zvýrazňovat klíčová slova, kopírovat, zacházet s bloky a hlavně umožňuje hledat a hledat (v aktuálním souboru nebo v celém projektu). Pokud kliknete pravým tlačítkem myši na jakoukoliv funkci nebo proměnnou, editor vám nabídne menu, pomocí něhož se přemístíte na implementace nebo deklarace dané funkce nebo proměnné. Nevíte-li tedy, co to je např. za položku blabla ve struktuře něco, stačí kliknout na něco->blabla a podívat se, kde a co a jak je ve vašem projektu spojeno s touto položkou. V horní části editoru je opět přístupný seznam se všemi objekty, proměnnými, makry a funkcemi. Dále pak seznam toho, co bylo naposledy hledané. Aby se vývojář při práci neztratil, jsou dostupná i tlačítka (šipky) back/forward, které vás vrátí na vaši předchozí/následující pozici v projektu. Editor umožňuje i jiná zobrazení než jen klasické (záložka Edit) zobrazení (textu) kódu. Na ostatních záložkách je možné zacházet s Class, Retriever, Hierarchy (bohužel pro svou nedotčenost C++ tuto část jaksi taktně vynechám, ale z hlediska koncepce SN lze předpokládat, že i tato oblast je zde velice dobře propracovaná) a pak (a to se mi moc líbí) záložky Xref a Include. V Xref je možné nechat si dle nastavené hloubky vnoření doslova nakreslit jaké funkce a proměnné jsou volány a použity v dané funkci. Tak např. na dalším obrázku je znázorněno, že funkce init_tree volá funkci rec_tree a u obou funkcí i použité proměnné. Prakticky tak lze udělat mapu vzájemných provázaností funkcí v celém programu, pokud jako začátek nastavíte main() a levels dostatečně velký (a procesor máte dostatečně výkonný). Pochopitelně je možné se kliknutím přemístit do dané funkce. Include umožňuje to samé, ale u souborů. Použití záložky Grep je myslím jasné. SN, jak už zaznělo, má i interface pro debugování. Jako debugger používá defaultně gdb. Aktuálně prováděný kód zobrazuje SN v okně editoru, debugovat lze prakticky bez psaní příkazů na příkazovou řádku gdb - stačí jen klikat. V tomto mne SN nějak neoslovil a kvalitou ho pravděpodobně předčí DDD. Já osobně raději používám samotné gdb. Převratné není ani rozhraní pro make. Obsahuje vše co lze standardně očekávat (ukazování na chyby odhalené při kompilaci, nastavení parametrů pro make atd.). Co mi u SN chybí - a je např. u Emacsu - je skrývání podmíněně kompilovaných částí kódu dle direktiv #ifdef (bylo v emacsu pěkně předvedeno na Cikháji). Další trochu nepříjemnou věcí je doba ukládání souborů - SN si totiž znova vytváří databáze informací o zdrojovém kódu a to trochu trvá. To je velice zhruba vše. Pravděpodobně jsem vynechal mnoho detailů, které SN umožňuje, ale to není náplní Linuxových novin, to se musí zažít při práci s SN. Na závěr lze říci, že se jedná o velice dobrý IDE software i pro opravdu velké projekty, který by bylo zajímavé vidět v plné verzi (na domovské stránce ho mají vyfocený v úhledné, ale bohužel typicky komerční krabici) a vnutit mu např. celý kernel Linuxu - a já myslím, že i s takovým balíkem zdrojáků by bez větších problémů pracoval pro zdar svého majitele. výheň