Prakticky nezbytným prostředkem používaným většinou dnešních programátorů je vývojové prostředí. Může se například jednat o programátorský textový editor zkombinovaný s dalšími samostatnými nástroji, ovšem mnoho vývojářů dává v současnosti přednost takzvaným integrovaným vývojovým prostředím (IDE). V dnešním článku se s některými vybranými integrovanými vývojovými prostředími dostupnými v systému Fedora stručně seznámíme.

Integrovaná vývojová prostředí

Integrovaná vývojová prostředí (Integrated Development Environment neboli zkráceně IDE) za sebou mají již téměř neuvěřitelných čtyřicet let vývoje a v současnosti se jedná o programový prostředek využívaný vývojáři pracujícími s nepřeberným množstvím programovacích jazyků od jazyků nízkoúrovňových (může jít o různé assemblery a makroassemblery) přes klasické kompilované programovací jazyky typu C, C++, C# či Java až po oblíbené interpretované programovací jazyky (Python, Ruby, Perl) apod. Hlavní důvod, proč velká část programátorů preferuje při své práci použití integrovaného vývojového prostředí, spočívá především v tom, že se díky IDE může celý vývoj a následné ladění aplikace urychlit a zjednodušit, což samozřejmě v důsledku vede ke zvýšení produktivity programátora.

ide_01Obrázek 1: S integrovaným vývojovým prostředím Eclipse jsme se již (alespoň částečně) seznámili v samostatném seriálu, kde jsme se věnovali popisu způsobu využití tohoto prostředí pro vývoj aplikací v Javě. Eclipse však je možné využít i společně s dalšími programovacími jazyky, například s C a C++ (Eclipse CDT), jazykem Python (PyDev) či Clojure (plugin nazvaný Counterclockwise).

Základní vlastnosti moderních IDE

Moderní integrovaná vývojová prostředí jsou většinou tvořena samostatnou aplikací vybavenou mnohdy velmi komplexním grafickým uživatelským rozhraním. Tato aplikace programátorům poskytuje nástroje určené pro správu projektů, vytváření a úpravu zdrojových kódů, refaktoring zdrojových kódů, porovnání dvou či více verzí zdrojového kódu (popř. i podporu pro tvorbu a aplikaci takzvaných patchů), překlad programů a většinou taktéž podporu pro ladění přeložených programů a pro jejich profiling (tj. zjištění, ve kterých částech kódu běžící proces strávil nejvíce času). Některá integrovaná vývojová prostředí navíc programátorům nabízí i rozhraní k systémům pro správu verzí – CVS, SVN, git, Mercurial apod. - většinou opět s podporou porovnání dvou či více variant zdrojových souborů či celých projektů.

ide_02Obrázek 2: Ukázka „alternativního“ způsobu využití integrovaného vývojového prostředí Eclipse. Po instalaci pluginu nazvaného Counterclockwise lze IDE Eclipse použít společně s interpretrem programovacího jazyka Clojure, a to včetně integrace smyčky REPL (Read-Eval-Print-Loop) přímo do Eclipse.

Jednotlivá IDE se od sebe odlišují tím, do jaké míry jsou tyto nástroje navzájem integrovány. V některých případech totiž vývojové prostředí využívá externí aplikace (například externí programátorský textový editor, překladač, debugger, profiler), další IDE pak většinu funkcí integrují do jedné monolitické aplikace. Oba přístupy mají své klady, ale samozřejmě i zápory. O některých se zmíníme v navazujícím textu. U některých komplikovanějších IDE dokonce můžeme najít souběžné použití obou přístupů. Příkladem je opět Eclipse, kde se v případě práce s projekty vytvářenými v Javě využívá mnoho pluginů, které lze považovat za součást Eclipse (včetně interního překladače ECJ), zatímco v případě, že se Eclipse vyžije pro tvorbu projektů v C a C++, používají se pro překlad či ladění externí aplikace.

„Odlehčená“ vývojová prostředí pro Fedoru

V následujících kapitolách se seznámíme s některými integrovanými vývojovými prostředími dostupnými ve standardních repositářích Fedory. Dále popisovaná prostředí se vyznačují především poměrně malými systémovými nároky, což tato IDE odlišuje například od již zmíněného univerzálního prostředí Eclipse (ostatně taktéž dostupného v repositářích Fedory) či Netbeans popř. IDEA. Eclipse a Netbeans jsou integrovaná vývojová prostředí nabízející programátorům široké spektrum funkcí, na druhou stranu se však jedná o IDE, která pro svůj běh vyžadují relativně výkonný mikroprocesor a taktéž několik stovek megabajtů operační paměti jen pro samotné spuštění jejich uživatelského rozhraní (o tom se lze snadno přesvědčit s využitím nástroje „top“).

ide_03Obrázek 3: S vhodnými skripty a pluginy je možné v integrované vývojové prostředí přeměnit i některé vyspělejší programátorské textové editory. Zde je zobrazen projekt naprogramovaný v jazyku C a otevřený v textovém editoru Vim. Podobnou funkcionalitu však lze dosáhnout i například v Emacsu (tam především s využitím různých režimů), JEditu a dokonce i v Geditu (viz též screenshot číslo 4).

Pro moderní desktopové počítače či pro výkonné notebooky sice nemusí systémové nároky prostředí Eclipse či Netbeans představovat větší problém, ovšem dnes se například na některých školách zavádí výuka využívající Rasperry PI či podobné zařízení, kde je kapacita operační paměti a/nebo výpočetní výkon mikroprocesoru pro bezproblémový běh Eclipse nedostatečná (mimochodem – využití těchto jednodušších typů mikropočítačů, navíc vybavených programovatelnými vstupně/výstupními piny, může přinést do výuky výpočetní techniky mnoho pozitivního, to je však téma na samostatnou studii). Někteří vývojáři navíc dávají přednost využití spíše jednoduššího popř. jednostranně zaměřeného integrovaného vývojového prostředí, například z toho důvodu, že mají nad funkcí IDE mnohem větší kontrolu.

ide_04Obrázek 4: I textový editor Gedit, který je standardní součástí Gnome Shellu, je možné s využitím vhodně vybraných zásuvných modulů přeměnit v jednoduché integrované vývojové prostředí (bližší informace si řekneme příště).

Většina integrovaných vývojových prostředí, kterým se budeme v dalším textu věnovat, podporuje tvorbu projektů ve větším množství programovacích jazyků, ať již se jedná o jazyky kompilované či o jazyky, v nichž se programy spouští s využitím interpretru. Dnes se ovšem zaměříme především na podporu (kompilovaného) programovacího jazyka C a taktéž C++. Integrovaným vývojovým prostředím specializovaným na další typy programovacích jazyků (především na Javu a v ještě větší míře pak na programovací jazyk Python) se budeme věnovat až v některém z dalších dílů tohoto článku.

ide_05Obrázek 5: Code::Blocks je vývojové prostředí orientované převážně na tvorbu projektů v programovacích jazycích C a C++. I toto multiplatformní vývojové prostředí bude podrobněji popsáno v navazujícím článku.

Anjuta

Prvním „odlehčeným“ integrovaným vývojovým prostředím, s nímž se v tomto článku alespoň ve stručnosti seznámíme, je IDE nazvané Anjuta (DevStudio), které se vyznačuje na dnešní dobu poměrně malými systémovými nároky. Toto vývojové prostředí, jehož první verze vznikla již v roce 1999, nabízí programátorům především správu projektů společně s možností jednoduché navigace (včetně vyhledávání atd.) v rozsáhlejších projektech. Dále je pak možné využít množství externích nástrojů, například i Valgrind (C/C++). Při zakládání nových projektů je podporováno větší množství programovacích jazyků, především se jedná o jazyky C, C++, Python, Vala, Java či JavaScript.

ide_06Obrázek 6: Integrované vývojové prostředí Anjuta se představuje. Tento screenshot i všechny následující snímky obrazovky byly získány v systému Fedora.

Základní funkcionalita nabízená vývojovým prostředím je implementována přímo v Anjutě, ovšem v případě potřeby je možné další funkce poměrně snadno doinstalovat, tedy alespoň v tom případě, že jsou tyto funkce implementovány v některém z pluginů (zásuvných modulů) určených pro Anjutu. Již v základní instalaci tohoto integrovaného vývojového prostředí jsou některé pluginy přítomny. Například se jedná o plugin podporující ladění s využitím externího debuggeru (GNU Debugger) nebo o pluginy určené pro práci se systémy verzí (CVS apod.).

ide_07Obrázek 7: V dialogu s nastavením Anjuty lze zjistit i všechny nainstalované zásuvné moduly, popř. je možné určit, který zásuvný modul má být povolen a který nikoli.

Programátorský editor v prostředí Anjuta

Poměrně velké množství času stráví vývojář psaním nového zdrojového kódu, popř. úpravami již napsaného kódu. Velmi důležitou součástí každého integrovaného vývojového prostředí je tedy programátorský textový editor, na nějž jsou v současnosti kladeny (v porovnání s relativně nedávnou minulostí) dosti velké požadavky – to, co bylo ještě před několika lety výjimečnou vlastností je dnes považováno za naprostý standard 🙂 Pojďme si nyní alespoň ve stručnosti říci, které vlastnosti nám textový editor zabudovaný do prostředí Anjuta nabízí.

ide_08Obrázek 8: Programátorský textový editor, který je integrován do vývojářského prostředí Anjuta, nabízí svým uživatelům většinu funkcí vyžadovaných vývojáři, včetně zvýraznění syntaxe, automatického odsazování zdrojového kódu, zobrazení čísel řádků i možnost automatického doplnění jména volané funkce.

Programátorský editor IDE Anjuta v první řadě podporuje automatické odsazování bloků zdrojového kódu (takzvaný režim „autoindent“), samozřejmě s možností volby, o kolik mezer má být odsazení provedeno, popř. s volbou, zda se mají pro odsazení použít znaky pro mezery či raději tabulátory. Zajímavější a pro mnoho vývojářů užitečnější je však funkce „autocompletion“, která programátorům nabízí možnost automatického doplnění jména funkce, jména datové struktury atd. Tuto funkci lze s výhodou využít především u rozsáhlejších projektů s mnoha uživatelskými či knihovními funkcemi (příkladem může být například hra využívající poměrně rozsáhlou knihovnu Allegro či poněkud méně rozsáhlou knihovnu SDL).

ide_09Obrázek 9: Další užitečná vlastnost programátorského textového editoru integrovaného vývojového prostředí Anjuta – výběr libovolné deklarace v okně „Project“ se v textovém editoru projeví přepnutím pohledu na příslušnou deklaraci.

Správa projektů v IDE Anjuta

Integrované vývojové prostředí Anjuta obsahuje podporu pro vytváření a správu projektů. Projektem jsou zde myšleny jak zdrojové kódy vytvářené aplikace, tak i všechna potřebná nastavení využívaná při překladu, linkování a v neposlední řadě i při ladění s využitím externího debuggeru. Při spuštění Anjuty je možné zvolit vytvoření nového projektu či import existujícího projektu – tento dialog je zobrazen na dalším screenshotu:

ide_10Obrázek 10: Dialog zobrazený při spuštění Anjuty, kde je možné zvolit buď vytvoření nového projektu nebo import již existujícího projektu uloženého na souborovém systému.

Při vytváření nového projektu jsou použity předpřipravené šablony obsahující již hotové (většinou velmi jednoduché) aplikace, samozřejmě včetně veškerého nastavení použitého při překladu a linkování výsledného spustitelného souboru. To je velmi výhodné, protože v některých jiných integrovaných vývojových prostředích může být pro programátory relativně složité nastavit například cesty ke všem potřebným knihovnám, zvolit vhodné parametry předávané linkeru atd. S využitím šablon se tato problematika zjednoduší na výběr jedné ikony.

ide_11Obrázek 11: Šablony s předpřipravenými demonstračními aplikacemi, které je možné využít při vytváření nového projektu. Můžeme zde vidět, že šablony jsou rozděleny podle jednotlivých programovacích jazyků a například v případě jazyka C lze použít šablonu s jednoduchou GTK aplikací, aplikací využívající knihovnu SDL, aplikací postavenou pouze nad holou knihovnou Xlib atd.

ide_12Obrázek 12: V dalším dialogu se vyplní doplňující informace o projektu.

Ladění programů v IDE Anjuta

Další důležitou vlastností, kterou programátoři od integrovaného vývojového prostředí (většinou) vyžadují, je podpora pro ladění programů přímo v grafickém uživatelském rozhraní vývojového prostředí. To je pro většinu programátorů snazší a přehlednější, než spouštění externích ladicích nástrojů (debuggerů). Zejména to platí pro GNU Debugger (GDB), který je vybaven sice velmi mocným, avšak na druhou stranu i relativně složitým ovládáním z příkazové řádky.

ide_13Obrázek 13: V integrovaném vývojovém prostředí Anjuta je možné přes zásuvné moduly využívat různé ladicí nástroje. V případě programovacích jazyků C a C++ nás nejvíce zajímá GNU Debugger neboli GDB.

Integrované vývojové prostředí Anjuta obsahuje plugin umožňující komunikaci s GNU Debuggerem (GDB), což znamená, že je možné ladit aplikace vytvořené v programovacích jazycích C, C++ i dalších jazycích překládaných do formátů rozpoznávaných GDB (Fortran, Ada...). Pokud je tento plugin inicializován, lze přímo v integrovaném editoru nastavovat breakpointy, které se zobrazí červenou tečkou (breakpoint je nastaven na celý řádek). Aby bylo ladění vůbec možné, je nutné projekt přeložit volbou Debug Build, což ve většině případů zajistí vložení všech důležitých ladicích informací přímo do výsledného binárního spustitelného souboru – tyto informace jsou následně použity debuggerem, který je například použije pro správné spárování instrukcí s odpovídajícími čísly řádků.

ide_14Obrázek 14: Přímo v integrovaném textovém editoru je možné nastavit breakpointy, které jsou označeny červenou tečkou. Aby byly breakpointy aktivní, je nutné projekt přeložit volbou Debug Build – viz též zprávy vypsané ve spodní části grafického uživatelského rozhraní Anjuty.

U breakpointů lze samozřejmě zobrazit a nastavit jejich vlastnosti (viz též screenshot číslo 15) a při ladění jsou vývojáři k dispozici všechny základní ladicí funkce – krokování, vstup do volané funkce atd. Navíc je možné si zobrazit i konzoli se zprávami vypisovanými samotným GNU Debuggerem.

ide_15Obrázek 15: Na listu breakpoints (spodní část grafického uživatelského rozhraní Anjuty) je zobrazen seznam všech breakpointů, včetně jejich stavu, nastavené podmínky a počtu průchodů breakpointem.

ide_16Obrázek 16: Při ladění se spustil GNU Debugger (GDB) ovládaný přímo Anjutou. Varovná zpráva zobrazená v okně GDB nás nemusí děsit, protože GDB ve skutečnosti pracuje bez problémů.

Qt Creator aneb tak trošku jiné IDE

Druhým integrovaným vývojovým prostředím, s nímž se v tomto článku seznámíme, je aplikace nazvaná Qt Creator. Jak již název tohoto integrovaného vývojového prostředí napovídá, jedná se o IDE určené primárně pro desktopové prostředí KDE založené na knihovně Qt, ovšem ve skutečnosti nám samozřejmě nic nebrání použít Qt Creator i na desktopu se spuštěným Gnome Shellem popř. nějakým (alespoň z pohledu Fedory) „alternativním“ desktopovým prostředím (jediným problémem bude delší čas spouštění zapříčiněný načítáním knihovny Qt do paměti). To, že je Qt Creator původně orientován na vývoj aplikací postavených na knihovně Qt a tím pádem i na programovacím jazyku C++, je patrné již při pohledu na první screenshoty, kde jsou ukázány dialogy zobrazené při vytváření nového projektu.

ide_17Obrázek 17: Grafické uživatelské rozhraní Qt Creatoru. Typickým prvkem GUI je levý panel s přepínáním režimů (horních šest ikon) a s nejčastěji používanými příkazy (dolní ikony).

ide_18Obrázek 18: Součástí Qt Creatoru je i systém nápovědy a poměrně rozsáhlý tutoriál.

Správa projektů v Qt Creatoru

Qt Creator nám při vytváření nových projektů nabízí, podobně jako již výše popsané integrované vývojové prostředí Anjuta, projekty založené na nějaké existující (předpřipravené) šabloně. V případě Qt Creatoru ovšem většina šablon předpokládá, že je v systému nainstalován nástroj qmake. Nicméně i pokud se nějaký projekt založí na existující „Qt šabloně“, není nijak problematické změnit jeho nastavení takovým způsobem, aby se namísto qmake používal klasický nástroj make či jiná aplikace zavolaná pro překlad a následné sestavení projektu. Alternativně je možné projekty vytvořit ze zdrojových souborů uložených v systémech pro správu verzi. Podporovány jsou například systémy GIT, CVS, SVN či Mercurial, což je ostatně patrné i při pohledu na screenshot číslo 20.

ide_19Obrázek 19: Dialog zobrazený v průběhu vytváření nového projektu. Orientace na knihovnu Qt (a částečně i na vývoj mobilních aplikací) je zde jasně viditelná.

ide_20Obrázek 20: Projekty je možné alternativně vyklonovat i z repositářů. Z tohoto dialogu je patrné, že jsou podporovány všechny nejpoužívanější systémy pro správu verzí.

Grafické uživatelské rozhraní Qt Creatoru

Zatímco se grafické uživatelské rozhraní výše popsaného vývojového prostředí Anjuta do značné míry podobalo většině dalších známých IDE, v případě Qt Creatoru může být uživatel-programátor v prvních chvílích poněkud zaskočen, a to jak způsobem rozmístění jednotlivých prvků grafického uživatelského rozhraní (levý sloupec s ikonami, způsob rozdělování bočního panelu, režimy zobrazení v bočním panelu atd.), tak i způsobem ovládání tohoto IDE. Ve skutečnosti je však ovládání Qt Creatoru poměrně logické a ve chvíli, kdy si uživatel zvykne na některé netradiční prvky, se stane práce v tomto integrovaném vývojovém prostředí poměrně rychlá, k čemuž mj. přispívá i možnost ovládat celé grafické uživatelské rozhraní jen pomocí klávesnice.

ide_21Obrázek 21: Typické rozložení ovládacích prvků při tvorbě či editaci projektů. Největší plochu zabírá textový editor, na levé straně jsou ikony pro přepínání režimů a vyvolání nejčastěji používaných příkazů. Uprostřed se nachází takzvaný sidebar, který lze rozdělit na mnoho podoken, přičemž každé podokno může zobrazovat jiný pohled (projekt, otevřené dokumenty, outline...).

Příkladem efektivního a rychlého ovládání klávesnicí mohou být například klávesové zkratky Ctrl+[1-6] určené pro přepínání režimů (s režimy ostatně koresponduje prvních šest ikon umístěných v levém sloupci), klávesová zkratka Alt+0 určená pro zapnutí/vypnutí bočního panelu (sidebar) nebo zkratky Alt+[1-4], které přepínají obsah spodního okna (zde se nachází volby Build Issues, Search Results, Application Output a Compile Output...).

ide_22Obrázek 22: Pro orientaci v rozsáhlejších projektech je velmi užitečný pohled „outline“ vybraný v sidebaru.

Textový editor Qt Creatoru

Při popisu zajímavých funkcí Qt Creatoru nesmíme zapomenout ani na textový editor, který je jeho nedílnou součástí. Tento programátorský editor umožňuje zvýraznit syntaxi u podporovaných typů souborů (zdrojové soubory programovacích jazyků C a C++, konfigurační soubory zpracovávané nástrojem qmake...), automaticky zvolit počet mezer či tabulátorů na začátku nového řádku (režim „autoindent“), zobrazit čísla řádků či sbalit vybrané bloky zdrojového textu (funkce pro „folding“) apod.

ide_23Obrázek 23: Nastavení vlastností integrovaného programátorského editoru v IDE Qt Creator.

Zajímavé a v jednom případě i překvapivé jsou i způsoby obarvení zdrojových kódů, protože kromě dnes již běžného zvýraznění syntaxe lze odlišnou barvou zvýraznit aktuálně editovaný řádek a dokonce i zvýraznit, což je poněkud netypická vlastnost, aktuálně editovaný blok, například funkci, programovou smyčku či blok „if“. Tato vlastnost textového editoru je ukázána na následující trojici screenshotů:

ide_24Obrázek 24: Zvýraznění celé funkce (nazvané update_class_name) odlišnou barvou pozadí (zde barvou bílou na rozdíl od barvy světle šedé).

ide_25Obrázek 25: Zvýraznění bloku „if“ uvnitř funkce nazvané update_class_name.

ide_26Obrázek 26: Zvýraznění vnitřního bloku „if“ uvnitř funkce nazvané update_class_name (jak je zde patrné, využívají se různé stupně šedi).

Užitečná je i klávesová zkratka Ctrl+/, která dokáže na začátek všech řádků vybraného bloku vložit znaky pro zapoznámkování řádku (dvojice lomítek v případě C++) či naopak tyto znaky odstranit.

ide_27Obrázek 27: Další užitečná funkce editoru – zobrazení on-line informací k symbolu, nad kterým je umístěn kurzor.

ide_28Obrázek 28: Klávesová zkratka F3 slouží ke skoku na definici či deklaraci vybraného symbolu.

Emulace ovládání programátorského textového editoru Vim

Pro programátory, kteří jsou zvyklí používat textový editor Vim může být taktéž užitečná další vlastnost programátorského textového editoru, jenž je součástí Qt Creatoru. Editor Qt Creatoru totiž dokáže do jisté míry emulovat chování Vimu, samozřejmě včetně jeho multimodálního rozhraní, a dokonce je možné Qt Creator nastavit takovým způsobem, že si přečte uživatelský konfigurační soubor .vimrc.

ide_29Obrázek 29: Nastavení režimu emulace textového editoru Vim.

Pokud je režim emulování editoru Vim (takzvaný FakeVim) povolen, je v pravém dolním rohu stavové řádky zobrazen aktuální režim Vimu (COMMAND, INSERT, REPLACE, VISUAL) a s využitím znaku : (dvojtečka) lze přejít do režimu zadávání příkazů, z nichž nejpoužívanější pravděpodobně bude příkaz pro textovou substituci (:s). Režim emulace Vimu lze kdykoli zapnout či vypnout klávesovou zkratkou Alt+V, Alt+V (nejedná se o chybu, skutečně je nutné dvakrát stlačit Alt+V).

ide_30Obrázek 30: Při nastaveném režimu emulace se v pravé dolní části okna integrovaného vývojového prostředí zobrazuje aktuální režim Vimu (zde se jedná o režim COMMAND).

ide_31Obrázek 31: Po stisku dvojtečky se v režimu emulace Vimu mohou zadávat různé příkazy, zde například příkaz pro textovou substituci.

Ladění programů v Qt Creatoru

V Qt Creatoru lze při správném nastavení projektu provádět i ladění vytvářeného programu. Většinou se pro ladění využívá GNU Debugger (GDB), který je v případě potřeby automaticky spuštěn přímo vývojovým prostředím, podobně jako tomu bylo u výše popsaného IDE Anjuta. Ladění je posléze prováděno v grafickém uživatelském rozhraní Qt Creatoru, včetně možnosti práce s breakpointy, podporou krokování apod.

ide_32Obrázek 32: Nastavení vlastností aktuálně vybraného projektu.

ide_33Obrázek 33: Nastavení vlastností projektu, včetně volby debuggeru.

ide_34Obrázek 34: Nastavení debuggeru.

Obsah druhého dílu článku

Ve druhém dílu tohoto článku si popíšeme některá další zajímavá vývojová prostředí dostupná pro Fedoru. Bude se jednat především o prostředí nazvané Geany a taktéž o integrované vývojové prostředí s neobvyklým názvem Code::Blocks.