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ň