Schopnosti překladačů programovacího jazyka Python

Rozměr: px
Začít zobrazení ze stránky:

Download "Schopnosti překladačů programovacího jazyka Python"

Transkript

1 Mendelova univerzita v Brně Provozně ekonomická fakulta Schopnosti překladačů programovacího jazyka Python Diplomová práce Vedoucí práce: Ing. Pavel Haluza, Ph.D. Bc. Ondřej Pala Brno 2015

2

3 Rád bych poděkoval své přítelkyni, rodině a v neposlední řadě i mému vedoucímu práce Ing. Pavelu Haluzovi, Ph.D. za užitečné rady při tvorbě práce.

4

5 Čestné prohlášení Prohlašuji, že jsem tuto práci: Srovnání překladačů programovacího jazyka Python vypracoval/a samostatně a veškeré použité prameny a informace jsou uvedeny v seznamu použité literatury. Souhlasím, aby moje práce byla zveřejněna v souladu s 47b zákona č. 111/1998 Sb., o vysokých školách ve znění pozdějších předpisů, a v souladu s platnou Směrnicí o zveřejňování vysokoškolských závěrečných prací. Jsem si vědom/a, že se na moji práci vztahuje zákon č. 121/2000 Sb., autorský zákon, a že Mendelova univerzita v Brně má právo na uzavření licenční smlouvy a užití této práce jako školního díla podle 60 odst. 1 Autorského zákona. Dále se zavazuji, že před sepsáním licenční smlouvy o využití díla jinou osobou (subjektem) si vyžádám písemné stanovisko univerzity o tom, že předmětná licenční smlouva není v rozporu s oprávněnými zájmy univerzity, a zavazuji se uhradit případný příspěvek na úhradu nákladů spojených se vznikem díla, a to až do jejich skutečné výše. V Brně dne 20. května 2015

6

7 Abstract PALA, Ondřej. Ability of compilers programming language Python. Brno, Diploma thesis. Mendel university in Brno. Diploma thesis rate ability of selected compilers programming language Python. First path of thesis is focused to programming language Python and principle of working compilers. Second path is focused to creating testing tasks, defining evaluation criterias of compilers and testing compilers without testing tasks. Keywords Compilers, programming language Python, testing tasks, evaluation criteria. Abstrakt PALA, Ondřej. Schopnosti překladačů programovacího jazyka Python. Brno, Diplomová práce. Mendelova univerzita v Brně. Diplomová práce hodnotí schopnosti vybraných překladačů programovacího jazyka Python. První část práce je zaměřena na programovací jazyk Python a princip činnosti překladačů. Druhá část je pak zaměřena na vytvoření testovacích úloh, stanovení hodnotících kritérií překladačů a otestování překladačů pomocí testovacích úloh. Klíčová slova Překladače, programovací jazyk Python, testovací úlohy, hodnotící kritéria.

8

9 Schopnosti překladačů programovacího jazyka Python 9 Obsah 1 Úvod a cíl práce Úvod Cíl práce Přehled literatury 19 3 Programovací jazyk Python Historie programovacího jazyka Python Verze programovacího jazyka Python Python Python Python Vlastnosti programovacího jazyka Python Chyby při vývoji aplikací Lexikální chyby Syntaktické chyby Příklady syntaktických chyb při programování v jazyce Python Sémantické chyby Příklady sémantických chyb při programování v jazyce Python Logické chyby Překladače Druhy překladačů Kompilátor Interpret Hybridní překladače Části překladače Lexikální analyzátor Syntaktický analyzátor Sémantický analyzátor... 31

10 Schopnosti překladačů programovacího jazyka Python Optimalizátor kódu Generátor cílového kódu nebo interpret Kompatibilita překladačů Překladače programovacího jazyka Python Překladač Pyjamas Hlavní vlastnosti Hlavní výhody Princip činnosti Překladač Python Hlavní vlastnosti Hlavní výhody Princip činnosti Překladač Skulpt Překladač Jython Hlavní vlastnosti Hlavní výhody Překladač Ironpython Hlavní vlastnosti Hlavní výhody Překladač Stackless Python Hlavní vlastnosti Hlavní výhody Překladač Shed Skin Hlavní vlastnosti Hlavní výhody Překladač Py2exe Hlavní vlastnosti Hlavní výhody Překladač Active Python Hlavní vlastnosti Hlavní výhody... 40

11 Schopnosti překladačů programovacího jazyka Python 11 7 Kritéria pro hodnocení překladačů jazyka Python Obtížnost instalace a odinstalace Instalace Odinstalace Kompatibilita s operačními systémy Možnost zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová a prostorová složitost překladu Časová složitost překladu Prostorová složitost překladu Úroveň dokumentace Testovací úlohy Základní matematické operace Verze s chybami Práce s cykly Cyklus for Cyklus for verze s chybami Cyklus while Cyklus while verze s chybami Práce s řetězci Přístup k znakům řetězce Přístup k znakům řetězce verze s chybami Formátování výstupu Formátování výstupu verze s chybami Funkce pro práci s řetězci Funkce pro práci s řetězci verze s chybami Práce s regulárními výrazy Verze s chybami Práce se soubory Čtení ze souborů... 56

12 Schopnosti překladačů programovacího jazyka Python Čtení ze souborů verze s chybami Zápis do souboru Zápis do souboru verze s chybami Práce s XML Tvorba XML souborů Tvorba XML souborů verze s chybami Čtení XML souborů Čtení XML souborů verze s chybami Webové služby Dostupnost HTML stránky Dostupnost HTML stránky verze s chybami Vrácení dat HTML stránky Vrácení dat HTML stránky verze s chybami Definice tříd Dědičnost Dědičnost verze s chybami Definice třídy a vytvoření instance této třídy Definice třídy a vytvoření instance této třídy verze s chybami Průběh hodnocení překladačů Výsledky Překladač Pyjamas Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Pyjamas... 78

13 Schopnosti překladačů programovacího jazyka Python Překladač Python Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Python Překladač Skulpt Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Skulpt Překladač Jython Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace... 91

14 Schopnosti překladačů programovacího jazyka Python Hodnocení překladače Jython Překladač Ironpython Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Ironpython Překladač Stackless Python Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezení chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Stackless Python Překladač Shed Skin Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu...100

15 Schopnosti překladačů programovacího jazyka Python Úroveň dokumentace Hodnocení překladače Shed Skin Překladač Py2exe Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnosti zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Py2exe Překladač Active Python Obtížnost instalace Obtížnost odinstalace Kompatibilita s operačními systémy Možnost zpětné vazby k uživateli Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Časová náročnost překladu Prostorová náročnost překladu Úroveň dokumentace Hodnocení překladače Active Python Závěr Literatura 116

16 Schopnosti překladačů programovacího jazyka Python 16

17 Schopnosti překladačů programovacího jazyka Python 17 1 Úvod a cíl práce 1.1 Úvod Existují dva základní přístupy k programování a to strukturovaný a objektově orientovaný. V současné době je právě nejrozšířenějším způsobem objektově orientované programování. Takto orientované jsou např. jazyky C#, Java, C++ a také právě jazyk Python, kterého se tato práce týká. Jazyk Python je tedy, jak už bylo výše řečeno objektově orientovaný, to znamená, že využívá objektů. Každá reálná skutečnost je reprezentována objektem, který zahrnuje atributy (vlastnosti) a metody pro práci s tímto objektem. Procesor počítače nerozumí přímo příkazům jazyka Python, nebo kterýmkoliv jiným příkazům jiného tzv. vyššího programovacího jazyka, ale příkazům ve strojovém kódu. Do tohoto kódu je vyšší programovací jazyk překládán pomocí překladačů (kompilátorů). Ke každému jazyku existuje více různých volně dostupných překladačů a je velmi těžké posoudit, který je lepší. Různé překladače totiž reagují různě např. na syntaktické chyby (tím jsou myšleny informace o konkrétních chybách v syntaxi např. oznámení, kde se daná chyby nachází, zda ji vůbec překladač detekuje apod.), mají jinak kvalitně zpracovanou dokumentaci a různě obtížně se instalují, odinstalují a konfigurují. 1.2 Cíl práce V současné době patří mezi nejrozšířenější programovací jazyky právě ty, které jsou objektově orientované. Mezi tento druh programovacích jazyků patří i jazyk Python. Tato práce je zaměřena na různé volně dostupné překladače tohoto programovacího jazyka. V první části se budu zabývat programovacím jazykem Python, jeho specifickými vlastnostmi, verzemi apod. Dále bude pojednáno o překladačích obecně. Tím jsou myšleny druhy překladačů a princip jejich činnosti. Druhá část diplomové práce se pak zabývá vybranými překladači programovacího jazyka Python, dále stanovením kritérií pro hodnocení vybraných překladačů tohoto programovacího jazyka, popisu těchto kritérií a vytvoření sady testovacích úloh, zahrnujících základní matematické operace, cykly, práci s řetězci, práci s regulárními výrazy, se soubory, práci s webovými službami a definici tříd, pomocí kterých pak budou vybraného překladače programovacího jazyka Python otestovány. Výsledky tohoto testování budou pak vyhodnoceny a přehledně interpretovány. Tato práce poskytuje detailní podklady pro další následné testování schopností překladačů, včetně testovacích úloh, které mohou k tomuto testování být použity v případě výše uvedeného programovacího jazyka.

18 Schopnosti překladačů programovacího jazyka Python 18 Cílem této práce je tedy prozkoumat dané překladače jazyka Python z hlediska daných hodnotících kritérií, stanovit způsob jejich hodnocení z hlediska těchto kritérií a provést samotné ohodnocení těchto překladačů.

19 Schopnosti překladačů programovacího jazyka Python 19 2 Přehled literatury Vzhledem k rychlému a neustálému rozvoji oblasti informačních technologií dochází i k neustálému publikování knih a různých materiálů týkajících se této oblasti. Jinak tomu není ani v případě tématu, kterým se zabývá tato práce. Existuje mnoho různě kvalitních materiálů týkajících se problematiky překladačů a programovacích jazyků. Snad nejznámějším a nejkvalitnějším počinem je kniha Compilers: Principles, Techniques, and Tools (Aho, 2007) od Alfreda V. Aho a kolektivu. V knize je podrobně rozebrána problematika programovacích jazyků a hlavně problematika překladačů, konkrétně tedy jak jednotlivé části překladačů (syntaktický, sémantický analyzátor), tak jednotlivé fáze překladu. V oblasti českých zdrojů je velmi zajímavou studijní oporou materiál Tvorba překladačů (Vavrečková, 2008) pocházející ze Slezské univerzity v Opavě, která se velmi podrobně a srozumitelně zabývá vlastnostmi překladačů, jejich druhy a hlavně jednotlivými fázemi překladu lexikální, syntaktickou a sémantickou fází překladu. Pokud se zaměříme konkrétně na téma týkající se této práce, tj. na programovací jazyk Python, tak za zmínku stojí zejména kniha Dive Into Python 3(Pilgrim, 2009)od Marka Pilgrima, jejíž český překlad je volně dostupný na webových stránkách. Jedná se o kvalitního průvodce celým tímto programovacím jazykem. Autor přehledně a srozumitelně vysvětluje jednotlivé části jazyka Python od jeho základních prvků, jako jsou deklarace proměnných, základní matematické operace, definice podmínek, cykly, přes náročnější témata jako jsou práce se vstupními soubory a řetězci, až po využívání webových služeb, zpracování XML souborů a problematiku týkající se objektově orientovaného programování. Další neméně kvalitní knihou, zabývající se programovacím jazykem Python je Python 3: výukový kurz (Summerfield, 2010) od Marca Summerfielda, která opět pojednává o všech oblastech jazyka Python, stejně jako kniha předchozí. Pokud se ale zaměříme konkrétně na oblast překladačů jazyka Python, musíme se spokojit pouze s internetovými zdroji. Tyto zdroje se věnují jednotlivým překladačům jazyka Python, ale pouze na úrovni popisu jeho vlastností, nikoliv na úrovni, na které se touto tématikou zabývá tato diplomová práce. Zejména je tím myšleno to, že doposud nikdo jednotlivé překladače programovacího jazyka Python neporovnal podle přesně stanovených kritérií. Jedinými pracemi, které se podobnou problematikou zabývají, jsou diplomové práce Schopnosti překladačů vybraných strukturovaných jazyků (Zerdaloglu, 2012) a Schopnosti překladačů vybraných objektově orientovaných jazyků (Ventruba, 2011). První z těchto prací se, jak už název vypovídá, zabývá srovnáváním překladačů strukturovaných programovacích jazyků, konkrétně tedy jazyka Pascal a jazyka C. Druhá z těchto prací se zabývá srovnáváním překladačů jazyků C++, C# a Java.

20 Schopnosti překladačů programovacího jazyka Python 20 3 Programovací jazyk Python 3.1 Historie programovacího jazyka Python Počátky jazyka Python jsou datovány do roku Koncept tohoto programovacího jazyka byl vytvořen již v roce S tvorbou tohoto jazyka začal pan Guido van Rossum, původem z Holandska, ale až o 9 let později, tj. v roce Jazyk Python byl vyvíjen jako nástupce programovacího jazyka ABC, konkrétně pro operační systém Amoeba. První verze jazyka Python byla uvedena v lednu roku Zřejmě nejvýznamnějším milníkem v historii programovacího jazyka Python bylo uvedení jeho druhé verze - Pythonu 2.0. Stalo se tak 16. října roku Hlavními vlastnostmi této nové verze jazyka byl úplný Garbage collection a podpora unicodu. Poté v roce 2008 přichází na svět třetí verze tohoto jazyka Python 3.0, která přináší další vylepšení a její hlavní rysy jsou zpětně kompatibilní se staršími verzemi Pythonu 2.6 a Pythonu 2.7 (History of Python, 2015). Obrázek 1: Původní logo programovacího jazyka Python, zdroj: en.wikipedia.org/wiki/history_of_python Obrázek 2: Aktuální logo programovacího jazyka Python, zdroj: Verze programovacího jazyka Python Python 1.0 Jak už bylo řečeno výše, první verze jazyka Python Python 1.0 spatřila světlo světa v lednu roku Mezi nejvýznamnější znaky této verze Pythonu patřilo: Možnost využití lambda funkcí lambda Možnost využití datové struktury map pro ukládání dat Možnost snadného filtrování dat pomocí filter

21 Schopnosti překladačů programovacího jazyka Python 21 Samozřejmě, že Python 1.0 nebyla poslední verze tohoto jazyka, po několika letech byla vydána aktualizace první verze Python 1.2 a poté i Python 1.4, který přinesl velkou novinku vestavěnou podporu komplexních čísel (History of Python, 2015) Python 2.0 Verze jazyka Python Python 2.0 přináší možnost využít dynamických seznamů (polí), tzv. listů. Tvůrci Pythonu se inspirovali u jazyků SETL a Haskell. S další aktualizací Pythonu, tj. s verzí Python 2.1 přichází hlavně změna v licencování. Licence držící práva na jazyk Python byla pojmenována Python Software Foundation a jejím majetkem se staly veškeré kódy, dokumentace a specifikace jazyka Python. Další z aktualizací jazyka Python, tj. verze Python 2.2 se stala důležitým milníkem objektově orientovaného programování v programovacím jazyce Python. Byly totiž sjednoceny Pythonovské datové typy, které jsou napsány v programovacím jazyce C se třídami, které jsou napsány v jazyce Python a tak se programovací jazyk Python stal i objektově orientovaným (History of Python, 2015) Python 3.0 Python 3.0, někdy také nazývaný jako Python 3000 nebo Py3K, přináší zejména vylepšení nedostatků, které měli předešlé verze. Konkrétně se jedná o fakt, že v předešlých verzích existovalo např. více možností jak řešit jeden konkrétní problém a tuto duplicitu právě Python 3.0 odstraňuje. Tato verze jazyka se snaží, aby každý problém šel řešit jedním konkrétním způsobem. I přes tuto skutečnost ale zůstává programovací jazyk Python více-paradigmatický, tím je myšleno, že podporuje řešení problémů objektovým, strukturovaným a funkcionálním programovacím paradigmatem (History of Python, 2015). 3.3 Vlastnosti programovacího jazyka Python Programovací jazyk Python je interpretovaným jazykem, který je zejména objektově orientovaný, ale jak už bylo výše uvedeno, podporuje i další programovací paradigmata a to strukturované a funkcionální. Jedná se o programovací jazyk kompatibilní se všemi nejznámějšími a nejpoužívanějšími operačními systémy, konkrétně tedy s operačními systémy Windows, Linux a Mac OS. Další velkou předností tohoto jazyka je, že v porovnání s jinými programovacími jazyky je úspornější na kód. Program v jazyce Python je obecně kratší, než programy v jiných programovacích jazycích. Velmi zajímavý je i interaktivní Python shell, který je dodáván společně s oficiálním překladačem tohoto jazyka. Tento shell umožňuje spouštět příkazy jazyka Python přímo v tomto příkazovém řádku. Pro lepší představu uvedu tento příklad: napíšeme-li do interaktivního Pythonovského shellu

22 Schopnosti překladačů programovacího jazyka Python 22 například přiřazovací příkaz, ve kterém přiřadíme do proměnné a hodnotu 5 (a=5) a poté zadáme do příkazového řádku název proměnné, tj. a, vypíše nám interaktivní příkazový řádek její hodnotu (Python, 2015). Pokud se zaměříme na syntaxi jazyka Python, tak můžeme narazit na několik zajímavých věcí: Není nutné deklarovat proměnné, datový typ proměnné je určen až ve chvíli, kdy je do proměnné přiřazena nějaká hodnota podle této hodnoty, je pak určen datový typ. Jazyk Python má silnou typovou kontrolu, tato kontrola ale není prováděna při překladu, ale až za běhu daného programu. Při deklaraci funkcí, podmínek if a cyklů for nebo while, využívá Python pro identifikaci bloku kódu, který bude prováděn jak už ve funkci, podmínce nebo v cyklech odsazení. Jednoduše řečeno kód, který je pod definicí např. funkce odsazen, bude prováděn právě v této funkci. Kód funkce tedy končí prvním řádkem kódu, který není odsazený. Velikost odsazení je standardně 4 mezery, odsazení ale nemusí mít vždy tuto velikost, ale je důležité velikost tohoto odsazení dodržovat stejnou v celém kódu. Cyklus while může mít i svůj blok else, který je známý především v souvislosti s podmínkou if. Pokud pak cyklus doběhne bez přerušení, tak je proveden výraz za klíčovým slovem else (Python profesionálně: úvod, 2012). Je možné využívat takzvaných lambda funkcí. Používají se zejména v případech, kdy potřebujeme deklarovat funkci ve funkci, nebo kdy potřebujeme deklarovat nějakou velmi jednoduchou funkci. Příklad takovéto funkce můžete vidět níže, konkrétně se jedná o lambda funkci vracející dvojnásobek zadané hodnoty: d = lambda x: x*2 d(5) Funkci poté předáme jako parametr číslo, která chceme zdvojnásobit (Lambda, filter, reduce and map, 2011). V poslední řadě se musíme zaměřit na asi největší výhodu a přednost programovacího jazyka Python a to na skutečnost, že existuje mnoho překladačů, pro tento jazyk, které umožňují např. generovat spustitelné soubory (exe soubory) ze skriptů jazyka Python, nebo vyvíjet pomocí jazyka Python v Microsoft Visual Studiu. O těchto i dalších překladačích bude pojednáno v dalších částech této práce.

23 Schopnosti překladačů programovacího jazyka Python 23 4 Chyby při vývoji aplikací Tak jako v každé jiné lidské činnosti, tak i při vývoji aplikací dochází k různým chybám, jelikož člověk není neomylný. Rozlišujeme čtyři základní druhy chyb, které mohou při překladu programu nastat: Lexikální chyby Syntaktické chyby Sémantické chyby Logické chyby O všech těchto chybách bude podrobněji pojednáno níže. 4.1 Lexikální chyby Tento druh chyb bývá odhalen při samotném počátku překladu, jelikož první částí překladu zdrojového kódu je jeho lexikální analýza, kdy je zdrojový kód překládán na posloupnost atomických symbolů, které jednoznačně identifikují každou část zdrojového kódu. Tento druh chyby tedy souvisí s tím, že lexikální analyzátor při překladu nenalezne pro danou část zdrojového kódu atomický symbol. Typicky se může jedna o situaci, kdy je například špatně zadán název datového typu nebo použit špatný symbol pro určitou operaci. 4.2 Syntaktické chyby Jak už název těchto chyb napovídá, k jejich odhalení při překladu programu dochází ve fázi syntaktické analýzy. Při syntaktické analýze je kontrolována syntaktická správnost napsaného kódu (programu). Takovým příkladem základní syntaktické chyby u většiny programovacích jazyků může být zapomenutí středníku, kterým oddělujeme od sebe příkazy. V případě programovacího jazyka Python, kterému je tato práce věnována, se pak může jednat o nevložení konce řádku za daným příkazem, jelikož oddělovačem příkazů v tomto jazyce je právě znak konce řádku, tzn. na každém řádku je uveden pouze jeden příkaz.

24 Schopnosti překladačů programovacího jazyka Python Příklady syntaktických chyb při programování v jazyce Python Neuvedení znaku konce řádku za příkazem při programování v jazyce Python jsou jednotlivé příkazy od sebe oddělovány znakem konce řádku, tzn. na každém řádku se musí nacházet pouze jeden příkaz. Níže je uveden příklad této syntaktické chyby. a = 5 b = 6 Syntakticky správně jsou tyto dva příkazy zapsány takto: a = 5 b = 6 Neodsazení bloku, který má být součástí cyklu nebo funkce (metody) u většiny programovacích jazyků jsou bloky (příkazy, které jsou součástí cyklů, podmínek nebo metod) uzavírány do složených závorek. U programovacího jazyka Python je tomu jinak. Příkazy, které jsou součástí cyklů, podmínek, případně metod, musí být odsazeny. Podle tohoto odsazení pak překladač jazyka Python pozná, které příkazy jsou součástí nadřazeného cyklu, podmínky nebo metody. Velikost tohoto odsazení musí být v celém programu stejná. Níže je opět uveden příklad této chyby. if a > 5: print a Správně jsou tyto příkazy zapsány zde: If a > 5: print a Neuvedení dvojtečky za definicí cyklu, podmínky, funkce (metody) a třídy při definici cyklů, podmínek, funkcí (metod) a tříd je třeba blok, který bude součástí těchto objektů, uvodit dvojtečkou, tzn. že za příkazy, které definují cyklus, podmínku, funkce případně třídu je nutné uvést dvojtečku. Pro lepší pochopení je opět níže uveden příklad této chyby a poté správný zápis. class Auto def init (v) self.vaha = v

25 Schopnosti překladačů programovacího jazyka Python 25 Správně je tento blok příkazů zapsán takto: class Auto: fef init (v): self.vaha = v Neuvedení klíčového slova def před definicí metody (funkce) každá funkce, případně metoda určité třídy musí být uvozena klíčovým slovem def za kterým musí následovat jména této funkce (metody). Níže uvedený zápis metody je chybný. pozdrav (): print ahoj Správný zápis této metody vypadá takto: def pozdrav(): print ahoj Neuvedení kulatých závorek za jménem funkce (metody) tak jako u většiny programovacích jazyků, tak i u programovacího jazyka Python, musí být za definicí funkce (metody), tzn. za názvem metody, kterému předchází klíčové slovo def, uvedena dvojice kulatých závorek (). Příklad této časté syntaktické chyby můžete vidět níže. def pozdrav: print Ahoj Naopak správný zápis této funkce můžete vidět zde: def pozdrav(): print Ahoj Uvedení špatného klíčového slova nejedná se o nic jiného, než o špatný zápis určitého klíčového slova. Nejčastějšími zdroji těchto chyb jsou překlepy. Příklad chyby, která vznikla špatným zapsáním klíčového slova, můžete vidět níže. printl Ahoj

26 Schopnosti překladačů programovacího jazyka Python 26 Správně je tento příkaz zapsán takto: print Ahoj Použití špatného logického operátoru jedná se zejména o špatné použití operátoru s významem je rovno, je větší nebo rovno, je menší nebo rovno a je různo. Pro lepší názornost jsou všechny tyto chyby uvedeny pod tímto textem. a = 5 if a = 5: print Ano Správně je tento kus kódu zapsán zde: a = 5 if a == 5: print Ano Dále se zaměříme ne operátor větší nebo rovno, případně menší nebo rovno. U tohoto druhu operátoru záleží na pořadí jednotlivých operátorů. Chyba nastane, když operátor větší nebo rovno zapíšeme takto: a = 5 if a => 5: print "Ok" Správně je tento operátor pak zapsán takto: a = 5 if a >= 5: print "Ok" Obecně se třeba psát operátory v tom pořadí v jakém je vyslovujeme, tj. v případě operátoru větší nebo rovno napřed zapsat znak je větší a až poté znak rovno. 4.3 Sémantické chyby Sémantické chyby nesouvisí nijak se syntaxí, jako chyby předešlé, tj. chyby syntaktické, ale přímo s použitím určitých příkazů programovacího jazyka. Na tyto chyby je programátor upozorněn sémantickým analyzátorem při sémantické fázi překladu zdrojového kódu. Konkrétně se například jedná o chyby kdy se progra-

27 Schopnosti překladačů programovacího jazyka Python 27 mátor snaží sčítat řetězcovou a číselnou proměnnou nebo přistupovat k položce v poli přes index, kterým není indexována žádná z položek tohoto pole Příklady sémantických chyb při programování v jazyce Python Použití nedefinované proměnné každá použitá proměnná musí být napřed inicializována, tzn. musí být do ní přiřazena určitá hodnota. Dále je třeba si dávat pozor na to, kde je daná proměnná deklarována. Pokud deklaruji určitou proměnnou ve skriptu, pak se jedná o globální proměnou platnou v celém skriptu. Naopak deklaruji-li proměnnou (klidně i stejného jména, jako onu globální) v určitém cyklu, podmínce případně metodě (funkci), pak je tato proměnná lokální a její platnost spadá do daného bloku kódu, tzn. do daného cyklu, podmínky nebo metody. Příklad této chyby je uveden níže pod tímto textem. def vrat_a(): print a vrat_a() Správně je tato funkce napsána zde: def vrat_a(): a = 4 print a vrat_a() Neuvedení potřebného počtu parametrů určité funkce každá funkce má definovaný počet svých parametrů, neuvedením potřebného počtu argumentů skončí překlad takovéhoto programu sémantickou chybou. Jednou takou chybu můžete vidět níže. a = ahoj print len() Správně je tento kousek kódu uveden zde: a = ahoj print len(a) Přístup na položku v poli přes nesprávný index v případě, že přistupujeme v poli na položku, jejíž index je větší než počet prvků pole. Děje se tomu tak například ve zdrojovém kódu níže:

28 Schopnosti překladačů programovacího jazyka Python 28 a = [1,2,3] print (a[4]) Jelikož výše uvedené pole obsahuje tři prvky, správný přístup k prvkům tohoto pole se provede přes index, který nabývá hodnot od nuly do dvou (prvky pole jsou indexovány od nuly). Příklad kódu bez chyby je uveden zde: a = [1, 2, 3] print a[2] 4.4 Logické chyby Tento druh chyby nemusí být vůbec překladačem daného jazyka identifikován, jelikož překladač nedokáže rozpoznat chybu v logice napsaného programu. Jedná se tedy zejména o chyby vznikající ve chvíli, kdy programátor nedostatečně porozumí zadání programu a tato skutečnost pak vede k tomu, že výsledný program, ač je úspěšně překladačem přeložen, nedělá to, co by měl dělat. Tento druh chyby může tedy být eliminován pouze důkladným prostudováním si zadání a pochopením, co má daný program dělat.

29 Schopnosti překladačů programovacího jazyka Python 29 5 Překladače Překladač je obecně program, který provádí zobrazení zdrojového programu napsaného ve zdrojovém jazyce do cílového programu v cílovém jazyce a to tak, že cílový program má stejný význam jako zdrojový program. Obecně se tedy jedná o zobrazení programu, který je napsán v některém z vyšších programovacích jazyků do strojového kódu (assembleru), tedy to jazyka, kterému rozumí procesor počítače (Vavrečková, 2008). 5.1 Druhy překladačů Kompilátor Kompilátor, nebo jinak generační překladač, provádí překlad některého z vyšších programovacích jazyků, jako je Java, C#, C++ apod. do strojového kódu (assembleru, jinak nazývaného jako jazyk symbolických adres). U kompilátorů je tedy požadovaný program přeložen jako jeden celek (ne po částech, tak jako u interpretu). Výhodou tohoto druhu překladače je rychlost přeloženého programu výsledný spustitelný soubor pracuje ve většině případů velmi rychle, oproti tomu rychlost překladu u překladačů tohoto druhu je menší, než u překladačů druhu interpret. Jednou z větších nevýhod kompilátorů je nepřenositelnost výsledku překladu mezi různými druhy operačních systémů. Mezi nejznámější programovací jazyky využívající kompilovaný překlad jsou Delphi, Pascal, C nebo C++ (Vavrečková, 2008). Obrázek 3: Princip činnosti kompilátoru, zdroj: Interpret Interpret provádí překlad, na rozdíl od kompilátoru, po částech. Po částech interpretuje zdrojový program a vytváří v paměti počítače určitou reprezentaci daného vstupního zdrojového programu. Překlad programu pomocí interpretačního překladače tudíž probíhá rychleji, než u kompilovaného překladu, jelikož jsou po-

30 Schopnosti překladačů programovacího jazyka Python 30 stupně zpracovávány jednotlivé příkazy zdrojového programu a ty jsou pak interpretovány a provedeny. Určitou nevýhodou je, že při každém spuštění je nutné provádět překlad zdrojového programu znovu, což může být také určitou nevýhodou a důvodem, proč některé vyšší programovací jazyky používají právě kompilační překladače. Pokud bychom měli zmínit hlavní výhodou tohoto druhu překladače, pak je to určitě přenositelnost kódu mezi jednotlivými platformami (Windows, Linux a Mac OS). Nejznámějšími programovacími jazyky, které využívají interpretační překladač je právě Python, dále PHP, Perl, Ruby, JavaScript a samozřejmě také příkazové řádky operačních systémů Windows a Linux (Vavrečková, 2008). Obrázek 4: Princip činnosti interpretu, zdroj: Vavrečková, Hybridní překladače Jedná se o typ překladačů, které můžeme zařadit někam mezi kompilátory a interprety. Jejich princip činnosti spočívá v tom, že jedna část těchto překladačů generuje tzv. mezikód, který není nijak závislý na operačním systému a tento mezikód je pak interpretován druhou částí překladače, která souvisí s operačním systémem, na kterém překlad probíhá. Typickým programovacím jazykem, který využívá tento druh překladačů je jazyk JAVA (mezikód tohoto jazyka se nazývá bytekód) a jazyky využívající technologii.net (C#, Visual Basic.NET) (Vavrečková, 2008). 5.2 Části překladače Lexikální analyzátor Lexikální analyzátor převezme ze svého vstupu zdrojový program (program, které má být překladačem přeložen) a převádí jej do takové podoby, které poté

31 Schopnosti překladačů programovacího jazyka Python 31 rozumí i ostatní části překladače. Zdrojový program je tedy převeden na posloupnost atomických symbolů (Vavrečková, 2008). Níže je uveden příklad. int i = 15 // vstup <integer><identifikator i><assignment><number 15> <semicolon> // výstup Vstup (zdrojový program) je postupně převeden na posloupnost atomických symbolů, které identifikují každou část vstupního zdrojového programu. Při lexikální analýze jsou ignorovány bílé znaky a komentáře a není vůbec kontrolováno, zda dané konstrukce mají nějaký smysl. Tato část překladače bývá realizována pomocí stavového automatu (Konstrukce překladače, 2011) Syntaktický analyzátor Jedná se o nejdůležitější fázi překladu. Syntaktický analyzátor si bere posloupnosti atomických symbolů, které byly vygenerovány lexikálním analyzátorem a z nich vytváří strukturu překládaného programu - příkazy, bloky příkazů (Vavrečková, 2008). Tyto symboly jsou přiřazovány k sobě a vytváří tak příkazy, které mají být provedeny a při tom kontroluje jejich správnou syntaxi to zda odpovídají pravidlům, které jsou definovaná v gramatice daného jazyka (Konstrukce překladače, 2011). Tyto pravidla definují, v jakém pořadí se mohou jednotlivé identifikátory objevit v daném příkaze nebo jaké operace jsou přípustné Sémantický analyzátor Při této analýza je vytvořena tabulka symbolů, která obsahuje všechny objekty, které byly při sémantické analýze nalezeny. Obsahuje tedy proměnné, konstanty, funkce, procedury, názvy tříd apod. O každém objektu jsou pak v tabulce uvedeny podrobné informace, jako je např. datový typ, název identifikátoru, adresa v paměti, nebo také zda už byl daný objekt použit apod. Pomocí této tabulky je poté přiřazován význam jednotlivým příkazům a blokům kódu, které byly výstupem syntaktické analýzy. V případě, že je např. prováděna sémantická analýza příkazu, ve kterém jsou sčítány dvě proměnné, je napřed provedena kontrola datového typu obou proměnných zda je možná danou operaci s těmito datovými typy vykonat a poté je teprve provedena daná operace. Pokud datové typy nesouhlasí, může sémantický analyzátor provést přetypování, ale např. v případě provádění matematických operací s proměnnými číselného a řetězcového datového typu je u mnohých programovacích jazyků zobrazena chyba při sémantické fázi překladu (Vavrečková, 2008).

32 Schopnosti překladačů programovacího jazyka Python Optimalizátor kódu Do této fáze překladače obvykle vstupuje kód v tzv. intermediálním tvaru. Jedná se o program, který je svým tvarem už velmi podobný cílovému programu, ale je lépe přizpůsobitelný různé optimalizaci. Obvykle je to tedy program, který je velmi podobný assembleru nebo dynamický seznam obsahující jako položky derivační stromy jednotlivých příkazů. Optimalizátor kódu optimalizuje příkazy tak, že např. kontroluje, zda není třeba do některé z proměnných v cyklu přiřazována ta stejná hodnota vícekrát apod. Jednoduše řečeno, optimalizuje kód tak, aby bylo používáno co nejméně pomocných proměnných (Vavrečková, 2008) Generátor cílového kódu nebo interpret Jedná se o poslední část překladače, která generuje výsledný kód v jazyce symbolických adres (assembler), případně v jazyce sestavujícího programu (pak se jedná o interpretační překlad) nebo ve strojovém kódu (např. exe a dll v operačním systému Windows) (Vavrečková, 2008). 5.3 Kompatibilita překladačů V případě, že bychom chtěli vytvořit překladač určitého programovacího jazyka tak, aby byl kompatibilní se třemi základními nejrozšířenějšími operačními systémy na světě Windows, Linux a MAC OS, velmi záleží na části překladače, která optimalizuje kód a generuje cílový program. Jinými slovy, části překladače jako je lexikální, syntaktický a sémantický analyzátor jsou ve většině případů nezávislé na cílovém operačním systému. Takže v případě, kdy potřebujeme překladače, který vygeneruje cílový program kompatibilní se všemi výše uvedenými operačními systémy, musí být vytvořeny tři různé části pro optimalizaci kódu a generování cílového programu (každá pro jeden druh operačního systému) (Vavrečková, 2008).

33 Schopnosti překladačů programovacího jazyka Python 33 6 Překladače programovacího jazyka Python V této kapitole se zaměříme na vybrané překladače programovacího jazyka Python, které budou později podrobněji zkoumány a analyzovány z hlediska hodnotících kritérií, které budou popsána dále v této práci. 6.1 Překladač Pyjamas Hlavní vlastnosti Pyjamas, nebo někdy také Pyjs, je vývojová platforma, sloužící pro vývoj webových aplikací či webových stránek. Konkrétně webových aplikací nebo webových stránek založených na Javascriptu (What is pyjs?, 2013). Mimo jiné je také požadavkem pro jeho spuštění nainstalovaný oficiální překladač jazyka Python Hlavní výhody Mezi hlavní výhody tohoto překladače patří: Podpora datových typů jazyka Python (List, Dictionary, Tuple, string), které jsou převedeny na objekty Javascriptu mající stejné vlastnosti. Vše může být napsáno čistě a přehledně objektově orientovaným způsobem (v programovacím jazyce Python). Tímto způsobem by bylo obtížné psát kód v čistém Javascriptu (Overview, 2013) Princip činnosti níže. Překladač se skládá z několika hlavních částí, které jsou uvedeny na obrázku Obrázek 5: schéma činnosti překladače Pyjamas, zdroj: pyjs.org/overview.html

34 Schopnosti překladačů programovacího jazyka Python 34 Blíže si popíšeme jednotlivé části tohoto překladače jazyka Python. Knihovny Pyjs tato část překladače je velmi důležitá, bere si zdrojový kód, který je napsán v programovacím jazyce Python a pomocí syntaktického stromu generuje kód v Javascriptu Knihovny Pyjslib i když je většina konstrukcí jazyka Python velmi podobná Javascriptu, najdou se určité oblasti, ve kterých se tyto dva programovací jazyky svými konstrukcemi značně liší. Jedná se zejména o oblast datových typů. Například seznamy v Pythonu jsou touto knihovnou převedeny na samostatné objekty a metody pro práci s těmito objekty. Tyto metody implementují přidávání prvků do těchto objektů (dříve seznamů v Pythonu) apod. UI widgety a DOM knihovny jedná se o knihovny obsahující prvky uživatelského rozhraní, jako jsou různá tlačítka, formuláře apod. Tak, jako všechny ostatní prvky, jsou i prvky uživatelského rozhraní napsány v programovacím jazyce Python a poté jsou přeloženy do Javascriptu. Build vytváří výsledné HTML, případně Javascriptové soubory (Overview, 2013). 6.2 Překladač Python Hlavní vlastnosti Jedná se o volně dostupný, oficiální překladač programovacího jazyka Python. Aktuálně je dostupná nejnovější verze Python V případě stažení tohoto překladače nezískáme jen samotný překladač, ale i vývojové prostředí zvané IDLE, pro vývoj aplikací v jazyce Python a v poslední řadě také interaktivní příkazový řádek, pomocí kterého je možné přímo spouštět příkazy tohoto programovacího jazyka (Python, 2015). Obrázek 6: Interaktivní příkazový řádek

35 Schopnosti překladačů programovacího jazyka Python Hlavní výhody Obrázek 7: IDLE - vývojové prostředí jazyka Python Hlavními výhodami tohoto nejrozšířenějšího překladače jazyka Python jsou: Oficiální překladač jazyka. Součástí balíčku i vývojové prostředí, interaktivní příkazový řádek a možnost instalace Python.exe umožňuje poté spouštět skripty jazyky Python přímo v příkazovém řádku operačního systému Windows. Pravidelné aktualizace a oprava chyb (Python, 2015) Princip činnosti Po stažení a instalaci je možné psát skripty v jazyce Python pomocí vývojového prostředí IDLE, případně přímo v interaktivním příkazovém řádku (shellu), nebo pomocí jakéhokoliv jiného textovém editoru. Po napsání takovéhoto skriptu (s příponou.py) je pak možné tento program spustit přímo v příkazovém řádku operačního systému Windows, nebo ve vývojovém prostředí IDLE(Python, 2015). 6.3 Překladač Skulpt Jedná se o implementaci programovacího jazyka Python v internetovém prohlížeči. Tato implementace (včetně překladače interpretu) je volně dostupná ke stažení na webových stránkách. Implementace tohoto překladače je podobně jako u překladače Pyjamas založená na Javascriptu. Tohoto překladače je hojně využíváno u online služeb, které poskytují online vývojová prostředí pro interpretaci příkazů jazyka Python. Jednou z takovýchto služeb (využívající překladač Skulpt) je Trinket.io (Skulpt, 2014).

36 Schopnosti překladačů programovacího jazyka Python 36 Obrázek 8: Online služba využívající překladač Skulpt, zdroj: trinket.io/python 6.4 Překladač Jython Hlavní vlastnosti Jedná se o implementaci programovacího jazyka Python, která je spouštěna pomocí platformy Java. Poté je možné (po importování Javy) při programování v jazyce Python využívat i funkcí a objektů z programovacího jazyka Java. Po překladu je z napsaného zdrojového kódu vygenerován soubor s příponou.jar tzv. Java bytecode (General information, 2014) Hlavní výhody Hlavními výhodami překladače Jython jsou: Generování Java bytekódu v případě, že potřebujeme Java bytekód a programujeme v jazyce Python. Možnost využití metod a tříd jazyku Java při programování v jazyce Python (Why Jython, 2014). 6.5 Překladač Ironpython Hlavní vlastnosti Jedná se implementaci programovacího jazyka Python pomocí technologie.net, kterou vyvinula firma Microsoft. Tato technologie je známa zejména v souvislosti v vývojovým prostředím firmy Microsoft, Visual Studiem. Tento pře-

37 Schopnosti překladačů programovacího jazyka Python 37 kladač je celý napsán v programovacím jazyce C#. Zasloužil se o to pan Jim Hugunin, který také vytvořil překladač, překládající jazyk Python do Java bytekódu, Jython. Ironpython mohl být napsán pomocí jazyka C#, jelikož mezi tímto jazykem a jazykem Python, je mnoho syntaktických podobností. Překladač je v současnosti neustále vyvíjen a zdokonalován pro firmu Microsoft (Ironpython, 2014) Hlavní výhody Hlavními důvody proč tento překladač použít jsou: Možnost použít pro vývoj aplikací v jazyce Python vývojové prostředí Visual Studio Možnost použít skripty v jazyce Python v již vytvořené aplikaci, která je napsána v některém z.net jazyků. Dojde k přidání vrstvy (s daným skriptem jazyka Python) do aplikačního rámce dané.net aplikace a pak mohou programátoři ve svých skriptech jazyka Python používat i objekty technologie.net. Použití reflexe souvisí s předchozím bodem. Jakmile programátor použije některý z objektů technologie.net jsou k tomuto objektu získány i všechny jeho příslušné metody se kterými může tento objekt pracovat. Této vlastnosti je využito při tzv. našeptávání, viz. obrázek níže (Ironpython, 2014). Obrázek 9: Našeptávání při tvorbě zdrojového kódu, zdroj: Překladač Stackless Python Hlavní vlastnosti Jedná se o implementaci programovacího jazyka Python, která používá zásobník, který je podobný zásobníku programovacího jazyka C (Stackless Python,

38 Schopnosti překladačů programovacího jazyka Python ). Hlavní způsob použití tohoto druhu překladače programovacího jazyka Python, spočívá v tom, že umožňuje při vývoji aplikací v jazyce Python, použít preemtivní multitasking. Ten je charakterizován tím, že procesor počítače nepředá plnou kontrolu danému procesu, nýbrž mu předá řízení pouze na určitý čas. To je výhodné zejména z hlediska, kdy daný proces havaruje a tak nedojde k zastavení všech dalších procesů. Zjednodušeně řečeno, Stackless Python umožňuje pracovat s microthready a tasklety (Stackless Python, ABC Linux, 2013) Hlavní výhody Hlavní výhody tohoto druhu překladače plynou zejména z jeho již výše popsané vlastnosti, tj. z možnosti využití preemtivního multitaskingu. 6.7 Překladač Shed Skin Hlavní vlastnosti Jedná se o překladač, který překládá programy napsané v programovacím jazyce Python do kódu, který napsán v jazyce C++. Je nutné si uvědomit, že se jedná o experimentální překladač, jak je podotknuto na oficiálních webových stránkách tohoto překladače. Většina funkcí a metod jazyka Python, jsou tímto překladačem podporovány, to ale neznamená, že podpora je plnohodnotná. Pro příklad, nejsou podporovány metody getattr a hasattr. Překladač Shed Skin tedy ve výsledku generuje kód v jazyce C++, který potřebuje ke své činnosti pouze C++ runtime knihovny (Shed Skin, 2014) Hlavní výhody Pokud bychom měli vyzdvihnout určité výhody tohoto druhy překladače programovacího jazyka Python, jedná se zejména o jeho základní funkčnost, tím je myšlena skutečnost, že generuje kód v C++ kódu. 6.8 Překladač Py2exe Hlavní vlastnosti Hlavní funkcí tohoto překladače je, že z programu, který je napsán v jazyce Python vytvoří spustitelný soubor soubor s příponou.exe. Překladač byl původně vyvinut panem Thomasem Hellerem, který se o vývoj v dnešní době už nestará, ale na vývoj pouze přispívá. Překladač Py2exe využívá například BitTorrent apod.

39 Schopnosti překladačů programovacího jazyka Python 39 Pro svoji činnosti potřebuje tento překladač oficiální překladač jazyka Python (Python: Py2exe, 2014) Hlavní výhody Opět je hlavní výhodou tohoto překladače vlastně jeho hlavní funkce, tj. skutečnost, že dokáže z programu napsaného v programovacím jazyce Python, vygenerovat spustitelný soubor, tj. soubor s příponou.exe. 6.9 Překladač Active Python Hlavní vlastnosti Jedná se o kompletní balíček, který obsahuje překladač (interpret) programovacího jazyka Python, stejně jako vývojové prostředí Komodo, různé tutoriály a návody, dokumentaci apod. Jedná se tedy o kompletní balíček, který může konkurovat oficiálním nástrojům pro vývoj v jazyce Python. Tento překladač a balíček je zmíněn již dříve. Active Python má několik verzí bezplatnou, která je určena pro nekomerční vývoj aplikací a placenou, která je určena pro komerční vývoj aplikací a obsahuje kompletní balíček, na rozdíl od bezplatné verze, které neobsahuje všechny části jako verze komerční (ActiveState, 2014). Obrázek 10: Vývojové prostředí Komodo, doporučované k překladači Active Python, zdroj:

40 Schopnosti překladačů programovacího jazyka Python Hlavní výhody Největší výhodou oproti oficiálnímu balíčku pro vývoj aplikací v programovacím jazyce Python je skutečnost, že vývojové prostředí Iron Pythonu je propracovanější. Co se týče dalších vlastností, ty budou podrobněji zkoumány pomocí hodnotících kritérií.

41 Schopnosti překladačů programovacího jazyka Python 41 7 Kritéria pro hodnocení překladačů jazyka Python 7.1 Obtížnost instalace a odinstalace Instalace Jedná se o základní kritérium, protože než můžeme přistoupit k překladu daných programů v jazyce Python, musíme mít naistalován některý z překladačů. Každý překladač se jinak a různě obtížně instaluje. Většina překladačů, stejně tak jako většina programů bývá instalována pomocí průvodce, který uživatele postupně informuje o jednotlivých krocích instalace a ptá se jej na důležité informace, které potřebuje k úspěšnému provedení instalace např. kam má daný překladač instalátor nainstalovat apod. Způsob instalace také může záviset na operačním systému, ve které je instalace prováděna. Jak už bylo řečeno, většina zkoumaných překladačů jazyka Python se instaluje pomocí standardního průvodce, ale není tomu tak u všech. Některé je třeba různě konfigurovat a pak obtížnost instalace závisí na dalším zkoumaném kritériu, na úrovni dokumentace Odinstalace Obtížnost odinstalace souvisí s obtížností instalace. Většina překladačů, které jsou instalovány pomocí průvodce, mají i průvodce pro odinstalaci. Další možností, jak nainstalované překladače odebrat z operačního systému, je např. možnost využít Ovládacích panelů v operačních systémech Windows, kde můžeme nainstalované programy odinstalovat v sekci Programy. V případě, že u daného překladače proběhla instalace jiným způsobem, např. konfigurací různých souborů apod., pak obtížnost instalace závisí opět na úrovni dokumentace, kde si může uživatel přečíst, jak odinstalaci provést. 7.2 Kompatibilita s operačními systémy Existují tři nejpoužívanější operační systémy pro osobní počítače Windows, Linux a Mac OS. U všech zkoumaných překladačů bude vyhodnocena jejich kompatibilita se všemi třemi výše uvedenými druhy operačních systému, tzn. zda je daný překladač dostupný pro dané tři operační systémy. Samotné testování, tím je myšleno vyhodnocení všech dalších kritérií pro hodnocení překladačů u všech překladačů programovacího jazyka Python, bude provedeno pouze v prostředí dvou operačních systémů. Konkrétně tedy v prostředí operačního systému Windows 8.1 a Linux Ubuntu.

42 Schopnosti překladačů programovacího jazyka Python Možnost zpětné vazby k uživateli Do této kategorie spadají zejména možnosti, jakými daný překladač poskytuje zpětnou vazbu uživateli. V praxi se tedy jedná zejména o to, jakým způsobem překladač uživatele informuje o následujících skutečnostech: Chybách při překladu jak identifikuje danou chybu, zda udává i pozici chyby v kódu, případně i nějaký její popis a návrh řešení jak tuto chybu vyřešit. O úspěšném překladu programu. Případně o dalších skutečnostech, které by měl uživatel mít v povědomí. 7.4 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Reakce na chyby ve všech výše uvedených fázích překladu bude testována pomocí testovacích úloh, které zahrnují všechny základní konstrukce, které jsou nejběžnější pro programovací jazyk Python. Konkrétně se jedná o: Základní matematické operace sčítání, odčítání, násobení a dělení. Práci s cykly cyklus while a for. Práci s řetězci různé funkce pro práci s řetězci, přístup ke konkrétním znakům řetězcových proměnných apod. Práci s regulárními výrazy nalezení určitých znaků, přístup ke všem nalezeným položkám apod. Práci se soubory zápis a čtení ze souborů. Práci s XML soubory čtení a zápis do tohoto druhu souborů. Práci s webovými službami - zpracování HTTP requestů apod. Definici tříd při objektově orientovaném programování, konkrétně se jedná o zakládání tříd, dědičnost apod. Pro každou z výše uvedených oblastí budou vytvořeny testovací úlohy, které budou ve dvou verzích a to ve verzi, které neobsahují žádnou chybu a dále ve verzi, kde daný zdrojový kód obsahuje chyby. Pomocí takto vytvořených testovacích úloh bude poté vyhodnocena schopnost všech překladačů programovacího jazyka Python reagovat na lexikální, syntaktické a sémantické chyby. Testování proběhne v prostředí dvou operačních systémů Windows 8.1 a Linux Ubuntu

43 Schopnosti překladačů programovacího jazyka Python Časová a prostorová složitost překladu Časová složitost překladu Časová složitost je definována jako čas, který je potřebný k provedení určité činnosti. V našem případě je to čas, který je potřebný k provedení překladu. Překládány budou testovací úlohy a bude tak zkoumán čas překladu zdrojového kódu v jazyce Python, který je bez chyby a zdrojový kód v jazyce Python, který obsahuje chyby. Tyto skutečnosti budou pak zkoumány u každého z dříve uvedených překladačů programovacího jazyka Python. V prostředí operačního systému Linux Ubuntu, bude časová složitost překladu vyhodnocena pomocí příkazu time, který lze použít v příkazovém řádku operačního systému Linux. Použití je jednoduché, před příkaz u kterého chceme zjistit jeho čas provedení, se pouze uvede příkaz time. Tudíž v našem případě před příkaz, který zajistí překlad dané testovací úlohy, bude uveden příkaz time, který určí časovou složitost překladu. Naopak v prostředí operačního systému Windows 8.1 ekvivalent funkce time jako je u operačního systému Linux, neexistuje. Proto bude použita konzolová aplikace TimeMem, která je spouštěna v příkazovém řádku systému Windows a jako její parametr bude vždy uveden příkaz pro překlad programu v jazyce Python python a za tímto příkazem soubor obsahující program v jazyce Python (Timewindows, 2012). Případně bude časová složitost překladu zkoumána jinými prostředky pokud to dovolí např. aktuálně používaný překladač, např. jeho vývojové prostředí.

44 Schopnosti překladačů programovacího jazyka Python 44 Obrázek 11: Konzolová aplikace TimeMem, zobrazující časovou složitost překladu, konzolová aplikace dostupná na: Prostorová složitost překladu Prostorová složitost je definována jako velikost operační paměti, kterou procesor využije při provádění určitého příkazu. V našem případě se tedy bude jednat o velikost paměti, která bude potřebná k provedení překladu testovacích příkladů. Opět analogicky jako u časové složitosti překladu, bude pro zajímavost porovnáván rozdíl mezi prostorovou složitostí překladu programu s chybou a bez chyby. V prostředí operačního systému Linux bude použito aplikace Htop, která je volně stažitelná pro každou distribuci operačního systému Linux. Tato aplikace dokáže monitorovat spuštěné procesy v operačním systému Linux. V operačním systému Linux musíme ale dbát na jeho způsob správy paměti. Abychom dostali opravdu kapacitu operační paměti, kterou potřebuje daný proces ke svému provedení, musíme od sebe odečíst hodnoty RES a SHI, což je resident size, neboli skutečná velikost paměti (ta může ale být ale sdílena mezi různými procesy) a shared memory, což je právě kapacita operační paměti, kterou daný proces sdílí s dalšími procesy (Kolik paměti zabírá konkrétní aplikace?, 2012).

45 Schopnosti překladačů programovacího jazyka Python 45 Obrázek 12: Htop - zobrazení spuštěných procesů Naopak v operačním systému Windows 8.1 bude využito Správce úloh, který zobrazuje všechny spuštěné procesy. Obrázek 13: Správce úloh operačního systému Windows 8.1

46 Schopnosti překladačů programovacího jazyka Python Úroveň dokumentace Posledním, ale neméně důležitým kritériem pro ohodnocení zkoumaných překladačů programovacího jazyka Python je úroveň dokumentace. Dokumentace by měla být na takové úrovni, aby poskytla uživateli dostatečné informace ohledně daného překladače. Dokumentace by měla přehledně a srozumitelně informovat uživatele např. o postupu instalace překladače, případně o jeho konfiguraci, dále pak o postupu jak pomocí něj provést překlad, případně jak řešit nějaké nejčastěji se vyskytující problémy. Přehledně a srozumitelně napsaná dokumentace, která zahrnuje všechny informace potřebné pro práci s daným překladačem, velmi usnadní a zrychlí práci s tímto překladačem.

47 Schopnosti překladačů programovacího jazyka Python 47 8 Testovací úlohy Tato kapitola bude věnována popisu všech testovacích úloh. Podrobně budou zejména popsány verze s chybami. Jednotlivé chyby jsou, pokud je to možné, v uvedeném kódu vyznačeny kurzívou. Všechny tyto testovací úlohy jsou dostupné v příloze této diplomové práce. 8.1 Základní matematické operace Základními matematickými operacemi se rozumí sčítání, odčítání, násobení a dělení. Níže můžete vidět jednoduchý program, který realizuje tyto operace s dvěma číselnými proměnnými. a = b = print (a + b) print (a b) print (a * b) print (a / b) Verze s chybami Mezi hlavní chyby, které se mohou vyskytnout v programech pracujících s matematickými operacemi je např. sčítání proměnné která je číselného datového typu a proměnné, která je řetězcového datového typu. Tato situace může při programování v jazyce Python celkem často, jelikož se jedná o programovací jazyk, kde při vytváření proměnné není udáván její datový typ. Datový typ dané proměnné přiřadí až sám Python po jejím naplnění, tj. pokud je do ní pak přiřazeno např. číslo jedná se o číselnou proměnnou. a = 'A' b = print (a + b) print (a b) print (a * b) print (a / b) Další z řady velmi častých chyb je dělení nulou. Jak víme už ze základní školy, dělit nulou prostě nelze. a = b = 0 print a + b

48 Schopnosti překladačů programovacího jazyka Python 48 print a - b print a * b print a / b Určitě nesmíme zapomenout na chybu, která se může vyskytnout v jakékoliv oblasti, ale pro jednoduchost byla zařazena do oblasti matematických operací. Jedná se o deklaraci proměnné a nepřeřazení žádné hodnoty do této proměnné. a = b = print a + b print a - b print a * b print a / b Pokud chceme výsledek matematické operace opatřit nějakým popiskem může se snadno stát, že vyprodukujeme tuto chybu zapomeneme zřetězit řetězec, který má být funkcí print vypsán s danou proměnnou pomocí operátoru zřetězení (+). a = b = print "vysledek" a + b print a - b print a * b print a / b Poslední, ale velmi zásadní chybou při používání matematických operací je opomenutí některého z matematických operátorů, např. operátoru pro sčítání, jak můžete vidět v kódu níže. a = b = print a b print a - b print a * b print a / b 8.2 Práce s cykly Cykly jsou důležitou konstrukcí a součástí každého programovacího jazyka. Jinak tomu není ani u programovacího jazyka Python, kterému je věnována tato práce. Programovací jazyk Python zahrnuje dva typy cyklů a to cyklus for a cyklus while.

49 Schopnosti překladačů programovacího jazyka Python Cyklus for Následující kód ukazuje bezchybnou konstrukci cyklus for. for i in range(11): print i * Cyklus for verze s chybami Základní chybou při využití cyklu for v programovacím jazyce Python je neuvedení číselného parametru funkci range, která udává počet opakování daného cyklu. for i in range(): print i * 5 Další chybou související s funkcí range je, když dáme této funkci jako parametr příliš velké číslo, tj. číslo přesahující hodnotu maxint u jazyka Python. Konkrétně se jedná o číslo v řádech stamilionů. for i in range( ): print i * Další chybou související s funkcí range, která definuje počet opakování cyklu, je případ, kdy dáme této funkci jako parametr proměnnou, ale ta nebude číselného typu, ale řetězcového. a = "ahoj" for i in range(a): print i * 5 Předposlední chybou, která se produkována programátory velmi často, je opomenutí dvojtečky za definicí cyklu. for i in range(11) print i * 5 Poslední chybou, je chyba, která je velmi specifická pro programovací jazyk Python. Jedná se o neodsazení příkazu, který má být provádět v daném cyklu. for i in range(11): print i * 5

50 Schopnosti překladačů programovacího jazyka Python Cyklus while Bezchybná konstrukce cyklus while v programovacím jazyce Python zahrnuje proměnnou která bude postupně inkrementována a porovnávána s hodnotou, která udává, kolikrát bude příkaz, nebo příkazy v daném cyklus provedeny. Dále pak samozřejmě také odsazení příkazů, které mají být v tomto cyklu prováděny. i = 1 a = 5 while i <= 10: print a * i i = i Cyklus while verze s chybami Základní chybou při práci s cyklem while je nedeklarování proměnné, která bude porovnávána s hodnotou v podmínce cyklu. V příkladu níže se konkrétně jedná o proměnnou i. a = 5 while i <= 10: print a * i i = i + 1 Další velmi častou chybou, související opět s proměnnou, jejíž hodnota je porovnávána v podmínce cyklu, je její neinkrementování v cyklu. i = 1 a = 5 while i <= 10: print a * i Chybou, která může velmi často nastat právě v programovacím jazyce Python, jelikož jak už bylo dříve řečeno, Python nevyžaduje při deklarování proměnných udávat datový typ, je porovnávat v podmínce cyklu proměnnou s řetězcem nebo řetězcovou proměnnou. i = 1 a = 5 while i <= '10': print a * i i = i + 1

51 Schopnosti překladačů programovacího jazyka Python 51 Při využívání cyklu while musíme v podmínce cyklu velmi často použít operátory porovnání, chyba může nastat při použití operátoru větší (menší) nebo rovno, pokud uvedeme špatné pořadí operátoru rovno a operátoru větší (menší). i = 1 a = 5 while i =< 10: print a * i i = i Práce s řetězci Přístup k znakům řetězce S řetězcovými proměnnými je v programovacím jazyce Python zacházeno stejně jako ve většině moderních programovacích jazycích, tj. že na řetězec je pohlíženo jako na pole znaků a k tudíž můžeme k jednotlivým znakům řetězce přistupovat přes číselný index. a = "ahoj" b = "120" print a[1] print a[5:] for i in a: print i print a + " " + b Přístup k znakům řetězce verze s chybami Jedním ze základních chyb při přístupu k znakům daného řetězce je když se snažíme vypsat znaky od indexu, který v daném řetězci neexistuje. a = "ahoj" b = "120" print a[1] print a[5:] for i in a: print i print a + " " + b Další velmi podobná chyba je pokud chceme přistoupit k jednomu konkrétnímu znaku řetězcem přes index, který neexistuje. a = "ahoj"

52 Schopnosti překladačů programovacího jazyka Python 52 b = "120" print a[6] for i in a: print i print a + " " + b Velmi častou chybou je dále případ, kdy se snažíme zřetězovat číselné a řetězcové proměnné. Abychom toho úspěšně dosáhli, musíme danou číselnou proměnnou pomocí funkce str přetypovat na řetězcovou proměnnou. Tak se tomu ale neděje v následujícím příkladu. a = "ahoj" b = 120 print a[2] for i in a: print i print a + " " + B Pokud při přiřazování řetězce do proměnné zapomeneme tento řetězec uzavřít do dvojitých uvozovek, pak se také jedná o jednu z častých chyb. a = "ahoj b = "120" print a[1] for i in a: print i print a + " " + b Formátování výstupu Formátováním výstupu je myšlen případ, kdy chceme pomocí funkce print vytisknout na standardní výstup určitý řetězec a ten doplnit dalšími informacemi hodnotami z dalších proměnných. Níže můžete vidět příklad. jmeno = 'mark' heslo = '123heslo' print "{0}ovo heslo je {1}".format(jmeno, heslo)

53 Schopnosti překladačů programovacího jazyka Python Formátování výstupu verze s chybami Jednou z nejčastějších chyb je neuvedení funkci format potřebný počet parametrů, který se odvíjí od počtu číselných identifikátorů v řetězci, do kterého se budou přidávat hodnoty z proměnných. jmeno = 'mark' heslo = '123heslo' print "{0}ovo heslo je {1}".format(jmeno) Naopak další chybou je také případ, kdy uvedeme do textu číselný identifikátor, který je vyšší jak počet parametrů funkce format (číselné identifikátory jsou číslovány od nuly). jmeno = 'mark' heslo = '123heslo' print "{0}ovo heslo je {2}".format(jmeno, heslo) Poslední velmi častou chybou je pak neoddělení proměnných ve funkci format čárkou. jmeno = 'mark' heslo = '123heslo' print "{0}ovo heslo je {1}".format(jmenoheslo) Funkce pro práci s řetězci Pro práci s řetězci existuje mnoho různých funkcí, např. funkce zjišťující délku daného řetězce, funkce převádějící daný řetězec na velká písmena apod. Naším hlavním cílem je ale demonstrovat na testovacích úlohách reakci na chyby a v případě funkcí pro práci s řetězci jsou tyto reakce stejné překladač reaguje stejným způsobem. Proto bylo pro účely testování vybráno pouze pár základních funkcí např. již výše zmíněná funkce pro zjištění délky řetězce, převedení řetězce na velké znaky apod. s = "ahoj jak se mas" c = '100' if c in s: print "ano" else: print "ne" v = c.upper() print len(s) print v

54 Schopnosti překladačů programovacího jazyka Python Funkce pro práci s řetězci verze s chybami V programovacím jazyce Python můžu elegantně a jednoduše zjišťovat zda nějaký znak nebo řetězec leží v určitém řetězci a to pomocí funkce in. Pokud ale začnu zjišťovat, zda leží číselná proměnná v řetězcové proměnné, dojde k chybě. s = "ahoj jak se mas" c = 100 if c in s: print "ano" else: print "ne" Chyba také nastane, pokud se snažím aplikovat na číselnou proměnnou jakoukoliv metody pro práci s řetězci. V kódu níže se tak děje s funkcí upper. s = "ahoj jak se mas" c = '100' if c in s: print "ano" else: print "ne" c = 100 v = c.upper() print v 8.4 Práce s regulárními výrazy Regulární výraz je výraz, který pomocí zástupných znaků popisuje určitý řetězec, konkrétně tedy jeho tvar. Této velmi užitečné věci můžeme využít např. při hledání řetězcům (znaků) určitého tvaru např. v textu apod. Pomocí níže uvedeného kódu například můžeme nalézt malá písmena abecedy, která se nachází vždy na první pozici ve slově. import re text = "ahoj jak se mas?" p = re.findall("([a-z])\w+", text) for i in p: print i

55 Schopnosti překladačů programovacího jazyka Python Verze s chybami Abychom mohli v programovacím jazyce Python pracovat s regulárními výrazy, je třeba mít importovanou knihovnu re, pro práci s těmito výrazy. Pokud tak neučiníme dojde k chybě, tak jako v níže uvedeném kódu. text = "ahoj jak se mas?" p = re.findall("([a-z])\w+", text) for i in p: print i Další velmi častou chybou, která souvisí s knihovnou re je zapomenutí identifikátoru této knihovny při použití regulárního výrazu. V níže uvedeném příkladu musíme tak učinit před použitím funkce findall, správně je tento kousek kódu tedy zapsán takto re.findall. import re text = "ahoj jak se mas?" p = findall("([a-z])\w+", text) for i in p: print i Dále je nutné funkci findall poskytnout potřebný počet parametrů tj. regulární výraz a také řetězec nebo řetězcovou proměnnou ve které má pomocí regulárního výrazu vyhledávat. Pokud tomu tak není, dojde k chybě. import re text = "ahoj jak se mas?" p = re.findall("([a-z])\w+") for i in p: print i Velmi častou chybou, která spíše plyne z nepozornost programátora, je neuzavření řetězce definujícího regulární výraz do uvozovek. import re text = "ahoj jak se mas?" p = re.findall("([a-z])\w+, text) for i in p: print i Poslední chybou, která opět spadá do stejné kategorie, jako chyba výše, je zapomenutí čárky, která odděluje jednotlivé parametry funkce findall, tj. řetězec de-

56 Schopnosti překladačů programovacího jazyka Python 56 finující regulární výraz a proměnnou, případně řetězec ve kterém má být vyhledávání prováděno. import re text = "ahoj jak se mas?" p = re.findall("([a-z])\w+" text) for i in p: print i 8.5 Práce se soubory Práci se soubory můžeme rozdělit na dvě základní úlohy čtení ze souboru a zápis (případně přidávání záznamů) do souboru Čtení ze souborů Čtení ze souboru je v jazyce Python, stejně tak jako v mnoho dalších moderních programovacích jazycích velmi jednoduché. Programovací jazyk Python pomocí funkce open otevře daný soubor a pak z něj můžeme např. pomocí funkce readlines načíst do proměnné (typu pole) všechny řádky z daného souboru. f = open('vstup_soubor.txt', 'r') radky = f.readlines() for i in radky: print i f.close() Čtení ze souborů verze s chybami Velmi častou chybou při čtení ze souborů bývá uvedení špatného identifikátoru, který udává způsob, jakým má být daný soubor otevřen. Pro názornost je níže uveden příklad, kde chceme ze souboru číst (používáme funkce readlines), ale soubor se snažíme otevřít pro zápis funkci open dáváme jako druhý parametr w (write). f = open('vstup_soubor.txt', 'w') radky = f.readlines() for i in radky: print i f.close()

57 Schopnosti překladačů programovacího jazyka Python 57 Další velmi častou chybou je nepřiřazení výsledku funkce readlines do nějaké proměnné. f = open('vstup_soubor.txt', 'r') f.readlines() for i in radky: print i f.close() Dále je v níže uvedením kódu chyba, která opět souvisí s funkcí readlines, konkrétně se jedná o zapomenutí závorek za touto funkcí. f = open('vstup_soubor.txt', 'r') radky = f.readlines for i in radky: print i f.close() Pokud nastane situace, kdy zapomeneme uzavřít řetězec obsahující vstupní soubor do uvozovek, tak také dojde k chybě. f = open(vstup_soubor.txt, 'r') radky = f.readlines() for i in radky: print i f.close() Zápis do souboru Zápis do určitého souboru je opět velmi jednoduchý, stejně tak jako čtení. Stačí otevřít pomocí funkce open určitý soubor pro zápis a poté pomocí funkce write do daného souboru zapsat potřebné informace. f = open('vystup_soubor.txt', 'w+') s = "ahoj jak se mas? ja se mam dobre" f.write(s) f.close()

58 Schopnosti překladačů programovacího jazyka Python Zápis do souboru verze s chybami Nejčastější chyba, která obecně při práci se soubory může nastat je, že daný soubor, do kterého chceme zapisovat (případně ze kterého chceme číst) neexistuje. f = open('ahoj', 'r+') s = "ahoj jak se mas? ja se mam dobre" f.write(s) f.close() Pokud zapomeneme uvést funkci write parametr, tj. to co chceme zapsat do daného souboru, pak také samozřejmě dojde k chybě. f = open('ahoj.txt', 'r+') s = "ahoj jak se mas? ja se mam dobre" f.write() f.close() Chyba také nastane v případě, že se snažíme do textového souboru pomocí funkce write zapsat proměnnou, která je číselného datového typu. V takovém případě dojde chybě. Pokud bychom chtěli této chybě předejít, museli bychom danou proměnnou přetypovat pomocí funkce str, na proměnnou řetězcového datového typu. f = open('vystup_soubor.txt', 'r+') s = 100 f.write(s) f.close() 8.6 Práce s XML XML neboli Extensible Markup Language je značkovací jazyk, který se zejména používá pro přenos dat různých typů. Většina moderních programovacích jazyků práci se soubory tohoto typu podporuje, jinak tomu není ani u jazyka Python (XML, 2015) Tvorba XML souborů Tvorba XML souborů je v programovacím jazyce Python stejně tak jako mnoho dalších věcí, velmi jednoduchá. Můžete se o tom přesvědčit v kódu, který je uveden pod tímto textem. Důležité je mít importovanou některou z knihoven, která umožní v jazyce Python pracovat s XML soubory. Napřed je vytvořen kořen struktury pomocí příkazu Element, poté je vytvořen jeho potomek pomocí příkazu SubElement a tomuto potomku jsou vytvořeny a přidány jeho atributy.

59 Schopnosti překladačů programovacího jazyka Python 59 import xml.etree.celementtree as ET koren = ET.Element("koren") potomek = ET.SubElement(koren, "uzel") ET.SubElement(doc, "polozka1", name="pol1").text = "hodnota1" ET.SubElement(doc, "polozka2", name="pol2").text = "hodnota2" strom = ET.ElementTree(koren) strom.write("vystup.xml") Výsledný XML soubor je pak v následujícím tvaru. <koren> <uzel> <polozka1 name="pol1">some value1</polozka1> <polozka2 name="pol2">some vlaue2</polozka2> </uzel> </koren> Tvorba XML souborů verze s chybami Pokud neuvedeme název kořenového elementu, tj. nějaký parametr funkci Element, tak samozřejmě dochází k chybě. import xml.etree.celementtree as ET koren = ET.Element() potomek = ET.SubElement(koren, "uzel") ET.SubElement(doc, "polozka1", name="pol1").text = "hodnota1" ET.SubElement(doc, "polozka2", name="pol2").text = "hodnota2" strom = ET.ElementTree(koren) strom.write("vystup.xml") Stejně tak dojde k chybě, pokud funkci ElementTree neposkytneme povinný parametr, kterým je právě kořen XML struktury. Funkce ElementTree pak nemůže vytvořit celkovou stromovou strukturu. import xml.etree.celementtree as ET koren = ET.Element( koren ) potomek = ET.SubElement(koren, "uzel") ET.SubElement(doc, "polozka1", name="pol1").text = "hodnota1"

60 Schopnosti překladačů programovacího jazyka Python 60 ET.SubElement(doc, "polozka2", name="pol2").text = "hodnota2" strom = ET.ElementTree() strom.write("vystup.xml") Jelikož chceme poté danou XML strukturu zapsat do souboru, pak pokud neuvedeme funkci write potřebný parametr, kterým je název souboru, do kterého má být zapsáno, dojde k chybě. import xml.etree.celementtree as ET koren = ET.Element("koren") potomek = ET.SubElement(koren, "uzel") ET.SubElement(doc, "polozka1", name="pol1").text = "hodnota1" ET.SubElement(doc, "polozka2", name="pol2").text = "hodnota2" strom = ET.ElementTree(koren) strom.write() Nyní se dostáváme k poslední z velmi častých chyb a tou je uvedení špatného názvu funkce. Na příkladu níže můžete tedy vidět, špatně zapsané klíčové slovo Element. import xml.etree.celementtree as ET koren = ET.lement("koren") potomek = ET.SubElement(koren, "uzel") ET.SubElement(doc, "polozka1", name="pol1").text = "hodnota1" ET.SubElement(doc, "polozka2", name="pol2").text = "hodnota2" strom = ET.ElementTree(koren) strom.write(koren) Čtení XML souborů Stejně jako při vytváření XML souborů, tak i při čtení a zpracovávání těchto souborů, musíme použít knihovny pro to určené. Samotné čtení je pak jednoduché, jak můžete vidět v ukázce kódu níže pod tímto textem. from xml.dom import minidom xml = minidom.parse("vstup.xml") jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staff") for p in polozky:

61 Schopnosti překladačů programovacího jazyka Python 61 cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Čtení XML souborů verze s chybami Zřejmě nejčastější chybou při zpracovávání informací, nebo čtení XML souborů je případ, kdy uvedeme špatný název atributu, ke kterému chceme přistupovat. Děje se tomu tak i ve zdrojovém kódu níže. Místo abychom přistupovali k elementu s jménem staff, přistupujeme k elementu s názvem staffa. from xml.dom import minidom xml = minidom.parse("vstup.xml") jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staffa") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Další velmi častou chybou je opomenutí importu potřebných knihoven pro čtení XML souborů. V níže uvedeném příkladu chybí tedy import knihovny xml.dom. xml = minidom.parse("vstup.xml") jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staff") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Chybou, která opět souvisí s potřebnou knihovnou pro čtení XML souborů, je zapomeutí identifikátoru knihovny při práci s funkcemi této knihovny. V příkladu níže chybí před funkcí parse identifikátor minidom.

62 Schopnosti překladačů programovacího jazyka Python 62 from xml.dom import minidom xml =parse("vstup.xml") jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staffa") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Pokud zapomeneme uvést jméno XML souboru, ze kterého má být čtení prováděno, tak podobně jako při čtení každého jiného souboru, tak i v této situaci dojde k chybě. Jméno souboru se uvádí jako parametr funkce parse. from xml.dom import minidom xml = minidom.parse() jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staffa") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Obdobná chyba nastává, pokud uvedeme do parametru této funkce (funkce parse) neexistující soubor. from xml.dom import minidom xml = minidom.parse("vstupaa.xml") jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staffa") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Funkce getelementsbytagname vrací na základě daného parametru všechny dané položky do proměnné, která je poté typu pole. Tudíž pokud budeme přistu-

63 Schopnosti překladačů programovacího jazyka Python 63 povat v této proměnné na položky pomocí indexu, který je větší jak je samo pole, dojde k chybě. from xml.dom import minidom xml = minidom.parse("vstup.xml") jmeno = xml.getelementsbytagname("name")[10] print(jmeno.firstchild.data) polozky = xml.getelementsbytagname("staffa") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) Pokud uvedeme špatný název některé z funkcí, tak také samozřejmě dochází k chybě. Na příkladu níže se tak děje při použití funkce getelementsbytagname. from xml.dom import minidom xml = minidom.parse("vstup.xml") jmeno = xml.getelementsbytagname("name")[0] print(jmeno.firstchild.data) polozky = xml.gtelementsbytagname("staff") for p in polozky: cislo = p.getattribute("id") nick = p.getelementsbytagname("nickname")[0] plat = p.getelementsbytagname("salary")[0] print("id:%s, nickname:%s, salary:%s" % (cislo, nick.firstchild.data, plat.firstchild.data)) 8.7 Webové služby Programovací jazyk Python umožňuje provádět velmi náročné operace v souvislosti s webovými službami. Pro účely testování překladačů v této oblasti tohoto programovacího jazyka si ale vystačíme s jednoduchými příklady, jelikož na těchto jednoduchých příkladech je vidět jak programovací jazyk Python reaguje na chyby Dostupnost HTML stránky Následující ukázka kódu nedělá nic jiného než pomocí zadané url zjistí, zda je webová stránka na dané adrese dostupná nebo ne. Na tomto příkladě si také ukážeme jak se v jak jsou v jazyce Python definovány vyjímky.

64 Schopnosti překladačů programovacího jazyka Python 64 import urllib2 url = " try: urllib2.urlopen( url) except urllib2.urlerror: print "nedostupna" else: print "dostupna" Dostupnost HTML stránky verze s chybami Základní chybou je neuvedení parametru funkci urlopen, která jako parametr vyžaduje url adresu. V příkladu níže je sice u této funkce uveden parametr proměnná url, ta ale není nikde před tím naplněna. import urllib2 try: urllib2.urlopen(url) except urllib2.urlerror: print "nedostupna" else: print dostupna Další z mnoho chyb je neuvedení potřebné knihovny, se kterou bude pracováno. V následujícím kódu za klíčovým slovem import chybí právě název knihovny urllib2, která umožňuje práci s webovými službami. import url = " try: urllib2.urlopen( url) except urllib2.urlerror: print "nedostupna" else: print "dostupna" Jak už bylo zmíněno na začátku kapitoly věnované právě webovým službám, tak jsou do těchto úloh zahrnuty i výjimky. Jednou z chyb, která může nastat při práci s nimi, je neuvedení některého z klíčových slov, které jsou potřebné. V následujícím příkladu není např. uvedeno klíčové slovo try. import urllib2 url = " urllib2.urlopen( url)

65 Schopnosti překladačů programovacího jazyka Python 65 except urllib2.urlerror: print "nedostupna" else: print "dostupna" Vrácení dat HTML stránky V následujícím příkladu se zaměříme na zpracování dat z webových stránek. Konkrétně programovací jazyk Python umožňuje jednoduše vrátit veškerý obsah dané stránky (včetně HTML tagů). import urllib url = urllib.urlopen(" obsah = url.read() url.close() print obsah Vrácení dat HTML stránky verze s chybami Jednou ze základních chyb, které mohou nastat je, že uvedeme špatnou url. Funkce urlopen se pak snaží na tuto url adresu přistoupit, ale samozřejmě se jí to nepodaří, takže dojde k chybě. import urllib url = urllib.urlopen(" obsah = url.read() url.close() print obsah 8.8 Definice tříd Definici tříd provádíme při objektově orientovaném programování. Blíže je o zvláštnostech programovacího jazyka Python v oblasti objektového programování pojednáno v kapitole 3.3 Vlastnosti programovacího jazyka Python Dědičnost Při dědičnost využíváme toho, že daný potomek má velmi podobné vlastnosti jako jeho předek. V následujícím příkladu můžeme vidět definici třídy Auto, ze které pak dále dětí třída Autobus. Pro jednoduchost znovu uvedu, že metody obsahující klíčové slovo init v programovacím jazyce Python definují konstruktor a metody obsahující klíčové slovo del definují destruktor. class Auto: def init (self, jm, ci):

66 Schopnosti překladačů programovacího jazyka Python 66 self.jmeno = jm self.cislo = ci def zobraz_info(self): print self.jmeno print self.cislo def del (self): print "Auto zanika" class Autobus(Auto): def init (self, jm, ci): Auto. init (self, jm, ci) def del (self): print "Autobus zanika" auto = Auto("Skoda", 12245) autobus = Autobus("Karosa", 1234) auto.zobraz_info() autobus.zobraz_info() del auto del autobus Dědičnost verze s chybami Základní chybou při využívání dědičnost v jazyce Python, je neuvedení třídy, ze které je děděno. Děje se tomu tak v ukázce kódu níže. Třída Autobus nemá uvedena svého předchůdce, tj. třídu Auto v závorkách za konstruktorem. class Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def zobraz_info(self): print self.jmeno print self.cislo def del (self): print "Auto zanika" class Autobus():

67 Schopnosti překladačů programovacího jazyka Python 67 def init (self, jm, ci): Auto. init (self, jm, ci) def del (self): print "Autobus zanika" auto = Auto("Skoda", 12245) autobus = Autobus("Karosa", 1234) auto.zobraz_info() autobus.zobraz_info() del auto del autobus Další chybou související s předchůdcem dané třídy, je neuvedení definice této třídy. Jak můžete vidět v kódu níže chybí definice třídy Auto, ze které třída Autobus dědí. class Autobus(Auto): def init (self, jm, ci): Auto. init (self, jm, ci) def del (self): print "Autobus zanika" auto = Auto("Skoda", 12245) autobus = Autobus("Karosa", 1234) auto.zobraz_info() autobus.zobraz_info() del auto del autobus V případě, že dědíme a používáme konstruktor předka, musíme uvést také jeho definici a stejný počet parametrů. V příkladu níže se tomu tak neděje. class Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def zobraz_info(self): print self.jmeno

68 Schopnosti překladačů programovacího jazyka Python 68 print self.cislo def del (self): print "Auto zanika" class Autobus(Auto): def init (self): Auto. init (self, jm, ci) def del (self): print "Autobus zanika" auto = Auto("Skoda", 12245) autobus = Autobus("Karosa", 1234) auto.zobraz_info() autobus.zobraz_info() del auto del autobus Definice třídy a vytvoření instance této třídy Definice tříd má svá pravidla a to v každém programovacím jazyce. V jazyce Python musí každá definice třídy začínat klíčovým slovem class a za tímto slovem následuje jméno této třídy, které začíná velkým písmenem. Za tímto názvem je pak uvedena dvojtečka a pod touto definicí jsou definovány jednotlivé metody a atributy této třídy. V případě programovacího jazyka Python nesmíme zapomenout na odsazení definic těchto metod a atributů podle, kterého jazyk Python rozpozná, co je součástí definice dané třídy a co ne. class Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 12334) print auto.jmeno print auto.cislo del auto

69 Schopnosti překladačů programovacího jazyka Python Definice třídy a vytvoření instance této třídy verze s chybami Jednou ze základních chyb při vytváření instancí dané třídy, je neuvedení správného počtu parametrů danému konstruktoru. V ukázce pod tímto textem můžete vidět, že konstruktor třídy Auto přijímá dva parametry, ale při vytváření instance této třídy konstruktor žádné parametry nedostává. class Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto() print auto.jmeno print auto.cislo del auto Další z velmi častých chyb je přístup k atributu, který není v dané třídě děfinován. V následující ukázce zdrojového kódu přistupujeme k atributu jm, který není v dané třídě definován. class Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 1235) print auto.jm print auto.cislo del auto Chyba také nastává, pokud při vytváření instance dané třídy uvedeme špatný název dané třídy. V případě naší ukázky se jedná o příkaz auto = auto("opel", 1235). Třída ale není pojmenována auto, ale Auto.

70 Schopnosti překladačů programovacího jazyka Python 70 class Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = auto("opel", 1235) print auto.jmeno print auto.cislo del auto Velmi častou chybou při programování v jazyce Python je špatné uvedení klíčového slova init, které definuje konstruktor. V případě, že jej totiž uvedeme špatně, pak jazyk Python vytváří instance dané třídy s implicitní, tj. bezparametrickým konstruktorem a v případě, že danému konstruktoru definujeme nějaké parametry, tak vše skončí chybou. Ukázku můžete vidět pod tímto textem. class Auto: def _init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 1235) print auto.jmeno print auto.cislo del auto Další specialitou při objektově orientovaném programování v jazyce Python je nutnost každé metodě a i konstruktoru dát jako parametr na první místo klíčové slovo self, které vlastně definuje, že daná metoda, případně konstruktor náleží dané třídě. Ve zdrojovém kódu níže je klíčové slovo selfv definici konstruktoru vynecháno a to způsobuje chybu při překladu. class Auto: def init (jm, ci): self.jmeno = jm self.cislo = ci def del (self):

71 Schopnosti překladačů programovacího jazyka Python 71 print "Auto zanika" auto = Auto("Opel", 1235) print auto.jmeno print auto.cislo del auto Další chyba týkající se opět klíčového slova self nastane ve chvíli, kdy při přiřazování hodnot z parametrů konstruktoru do atributů dané třídy nepoužijeme před jménem atributu dané třídy klíčové slovo self. Příklad této chyby můžete vidět níže. class Auto: def init (self, jm, ci): jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 1235) print auto.jmeno print auto.cislo del auto Další chyby, které uvedeme se týkají zejména nepozornost programátorů. První z nich je zapomenutí dvojtečky za definicí třídy, případně definicí metody apod. V příkladu níže, můžete vidět, že za definicí jména třídy není uvedena dvojtečka. class Auto def init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 1235) print auto.jmeno print auto.cislo del auto Pokud zapomeneme při definování jakékoliv třídy klíčové slovo class také samozřejmě dojde k chybě. V příkladu pod tímto textem je toto klíčové slovo zapomenuto před jménem třídy Auto.

72 Schopnosti překladačů programovacího jazyka Python 72 Auto: def init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 1235) print auto.jmeno print auto.cislo del auto Dále pokud před definicí jakékoliv metody, případně konstruktoru či destruktoru zapomeneme uvést klíčové slovo def dochází k chybě. V následujícím příkladu není toto klíčové slovo uvedeno před definicí konstruktoru třídy Auto. class Auto: init (self, jm, ci): self.jmeno = jm self.cislo = ci def del (self): print "Auto zanika" auto = Auto("Opel", 1235) print auto.jmeno print auto.cislo del auto

73 Schopnosti překladačů programovacího jazyka Python 73 9 Průběh hodnocení překladačů Každý z překladačů bude otestován v prostředí dvou operačních systémů Linux Ubuntu 14 a Windows 8.1, pokud to kompatibilita daného překladače umožní. Testování bude probíhat z hlediska již dříve popsaných hodnotících kritérií. Všechny kritéria kromě obtížnosti instalace a odinstalace, časové a prostorové náročnost překladu, budou hodnoceny nezávisle na operačním systému, jelikož např. úroveň dokumentace je stejná pro jakýkoliv operační systém. V případě že bude hodnocení kritéria probíhat v prostředí dvou operačních systémů, pak bude celková známka za dané kritérium dána průměrem známek tohoto kritéria z prostředí operačního systému Windows a Linux. Hodnocení překladače z hlediska daného kritéria bude probíhat pomocí známek 1 až 5 (jako ve škole). Určitě se teď také ptáte, jak bude pomocí známek 1 až 5 hodnocena časová a prostorová náročnost překladu. Výsledné známkování těchto kritérií proběhne až po změření časových a prostorových náročností všech překladačů, poté z naměřených hodnot budou určeny hranice pro jednotlivé známky, tj. nejnižší naměřený čas a prostor bude odpovídat známce 1 apod. Jelikož bude testování probíhat pomocí několika testovacích úloh z dané oblasti, tak budou výsledné hodnoty vždy pro danou oblast zprůměrovány a výsledná známka pro např. časovou složitost překladu bude opět průměrem všech hodnot z různých oblastí testovacích úloh opět pro každý operační systém zvlášť. Dále bude každému kritériu přiřazena jeho váha (čím větší váha, tím důležitější je dané kritérium). Váhy jednotlivých kritérií můžete vidět v tabulce níže. Celkové známka daného překladače bude poté dána váženým průměrem všech známek, které získal. V případě, že se bude jednat o kritéria, která jsou závislá na operačním systému, bude hodnota tohoto kritéria dána průměrem vážených průměrů tohoto kritéria u operačního systému Windows 8.1 a Linux Ubuntu. Hodnotící kritérium Váha kritéria Obtížnost instalace 4 Obtížnost odinstalace 4 Kompatibilita s operačními systémy 3 Možnosti zpětné vazby k uživateli 10 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 10 Časová náročnost překladu 8 Prostorová náročnost překladu 7 Úroveň dokumentace 6

74 Schopnosti překladačů programovacího jazyka Python 74 Známky pro ohodnocení časové a prostorové náročnosti překladu byly vypočteny až po ohodnocení těchto kritérií u všech zkoumaných překladačů a to způsobem jaký byl již dříve uveden. Známky pro časovou náročnost překladu nacházející se v jednotlivých intervalech jsou: Známka 1 11 až 304 ms Známka až 598 ms Známka až 892 ms Známka až 1186 ms Známka až 1480 ms Známky pro prostorovou náročnost překladu nacházející se v jednotlivých intervalech jsou: Známka 1 3 až 43 MB Známka 2 44 až 84 MB Známka 3 85 až 125 MB Známka až 166 MB Známka až 207 MB

75 Schopnosti překladačů programovacího jazyka Python Výsledky 10.1 Překladač Pyjamas Obtížnost instalace Základním požadavkem pro instalaci (na obou operačních systémech, na kterých probíhalo testování Windows 8.1 a Linux Ubuntu), nebo spíše konfigurace tohoto překladače, je mít nainstalován oficiální překladač programovacího jazyka Python. Ten je dostupný volně ke stažení na internetových stránkách Samotná instalace tohoto překladače tudíž není realizována pomocí průvodce, ale velmi závisí na úrovni dokumentace, která je dostupná na webových stránkách překladače. Úrovni dokumentace se budeme věnovat samostatně při hodnocení tohoto kritéria. Co se týče celkové obtížnosti instalace, samotná instalace, v tomto případě spíše konfigurace není nijak těžká, spíše je těžší si dané informace jak ji provést na webových stránkách tohoto překladače najít. Informace o instalaci se totiž nenachází přímo na stránkách překladače, ale jsou skryty v GitHubovém repositáři tohoto projektu (překladače). Pokud se tedy zaměříme na samotnou instalaci, ta je pod oběma operačními systémy, na kterých testování překladačů probíhalo stejná. Instalace se skládá z několika kroků: Instalace oficiálního překladače programovacího jazyka Python, dostupného na Stažení překladače (knihoven) Pyjamas Extrakce těchto souborů a vytvoření adresáře Pyjamas na disku C, v případě operačního systému Linux Ubuntu vytvoření této složky v kořenovém adresáři Obtížnost odinstalace Pokud se zaměříme na obtížnost odinstalace tohoto překladače, tak se nemůžeme opřít o žádné informace z dokumentace. Když budeme vycházet ze znalostí, které jsme získali při instalaci překladače Pyjamas, tak stačí z příslušných složek smazat příslušné soubory (týká se to obou operačních systémů Windows 8.1 i Linux Ubuntu). Pokud bychom chtěli být korektní, a odinstalaci dokončit úplně, pak musíme také odebrat oficiální překladač jazyka Python. Jeho odinstalaci bude ale věnována samostatná kapitola při jeho hodnocení.

76 Schopnosti překladačů programovacího jazyka Python Kompatibilita s operačními systémy Pokud budeme vycházet z informací, které jsou dostupné přímo na webových stánkách daného překladače tak se toho moc o této oblasti nedozvíme. Pokud budeme pátrat a opět přejdeme na GitHubový repositář tohoto projektu, můžeme snadno vydedukovat, že jelikož je v tomto repositáři uveden postup pro instalaci na operačních systémech Windows a Linux, pak je překladač Pyjamas také s těmito operačními systémy kompatibilní Možnosti zpětné vazby k uživateli Jelikož tento překladač plně využívá oficiálního překladače programovacího jazyka Python, pak i způsob jakým poskytuje zpětnou vazbu uživateli je stejný jako u tohoto překladače. Více informací o principu činnosti tohoto překladače je uvedeno v dřívějších kapitolách konkrétně v kapitole věnované zkoumaným překladačům programovacího jazyka Python. Výsledné hodnocení překladače v oblasti tohoto kritéria bude tedy stejné jako u oficiálního překladače programovacího jazyka Python Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Jedná se o podobný příklad jako u kritéria možnosti zpětné vazby k uživateli. Jelikož je využíváno oficiálního překladače jazyka Python (dostupného na pak bude hodnocení tohoto kritéria stejné jako u oficiálního překladače Python Časová náročnost překladu Jelikož tento překladač (interpret) využívá oficiálního překladače jazyka Python tak se výsledky moc neliší právě od výsledků tohoto překladače. Nicméně malý rozdíl v nich je. V obou testovaných systémech Linux Ubuntu a Windows 8.1 bylo dosaženo vyšších hodnot časové náročnosti překladu. Je to způsobeno zejména tím, že po překladu daných zdrojových kódu, překladač Pyjamas generuje z daného kódu Javascript. Zajímavostí je také porovnání časové složitosti mezi těmito dvěma operačními systémy. Hodnoty časové náročnosti překladu u operačního systému jsou značně vyšší. To je nejspíše dáno odlišnou architekturou obou operačních systémů. Níže pod tímto textem jsem uvedeny grafy, které přehledně zobrazují dosažené výsledky.

77 Schopnosti překladačů programovacího jazyka Python 77 Porovnání časové náročnosti překladu u skriptů bez chyb (ms) , ,625 0 Windows 8.1 Linux Ubuntu Obrázek 14: Překladač Pyjamas - porovnání časové náročnosti překladu u skriptů bez chyb Prostorová náročnost překladu Podobně jako je to s časovou náročností u překladače Pyjamas, tak je tomu i s prostorovou složitostí jeho překladu. V prostředí obou operačních systémů bylo dosaženo vyšších výsledků, než v porovnání s oficiálním překladačem programovacího jazyka Python. Je to opět dáno tím, že Pyjamas poté generuje Javascriptový kód, tudíž v porovnání se standardním překladačem Pythonu spotřebuje více operační paměti. Na rozdíl od časové náročnosti překladu zde jsou role obráceny. Prostorová náročnost překladu je vyšší u operačního systému Windows 8.1. Tento rozdíl je dán rozdílnou správou paměti (oproti operačnímu systému Linux Ubuntu). Níže jsou opět uvedeny výsledky ve formě grafů. 29 Porovnání prostorové náročnosti překladu u skriptů bez chyb (MB) , Windows 8.1 Linux Ubuntu Obrázek 15: Překladač Pyjamas - porovnání prostorové náročnosti překladu u skriptů bez chyb

78 Schopnosti překladačů programovacího jazyka Python Úroveň dokumentace Posledním kritériem je samotná úroveň dokumentace, o které bylo již při hodnocení několika předešlých kritérií zmíněno. Dokumentace je dostupná na oficiálních stránkách překladače V dokumentaci jsou sice velmi dobře a přehledně uvedeny jednotlivé příkazy apod., ale chybí u nich nějaké podrobnější informace, který by u nich očekával snad každý programátor, tj. např. nějaké ukázkové použití dané funkce apod. Jak už bylo dříve zmíněno v souvislosti s instalací (konfigurací) tohoto překladače, všechny tyto informace by podle mého názoru měli být uvedeny v dokumentaci a ne někde odděleně v GitHubovém repositáři. Co je pozitivní na dokumentaci, je větší množství obsáhlejší ukázkových příkladů Hodnocení překladače Pyjamas Obtížnost instalace 3 Obtížnost odinstalace 2 Kompatibilita s operačními systémy 3 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 2 Časová náročnost překladu 1 Prostorová náročnost překladu 1 Úroveň dokumentace Překladač Python Obtížnost instalace Jedná se o oficiální překladač jazyka Python. Součástí balíčku, který je volně dostupný ke stažení na webových stránkách je i vývojové prostředí IDLE. Co se týče samotné instalace tohoto překladače je velmi jednoduchá a srozumitelná. Napřed se zaměříme na instalaci v prostředí operačního systému Windows 8.1. Tam je instalace totiž realizována tzv. průvodcem, který se uživatele postupně ptá na různé informace, které potřebuje znát, např. kam má daný program v našem případě tento překladač nainstalovat apod. Pokud se přesuneme do prostředí operačního systému Linux Ubuntu, tak tam je instalace ještě snadnější ve většině linuxových distribucích je totiž překladač (interpret) programovacího jazyka Python již nainstalován. Stejně tak tomu je i v našem případě, tedy v případě operačního systému Linux Ubuntu. Jediné co bylo doinstalováno, bylo vývojové prostředí IDLE a to pomocí Ubuntu Software Center.

79 Schopnosti překladačů programovacího jazyka Python Obtížnost odinstalace V prostředí operačního systému Windows 8.1 je odinstalace daného překladače velmi jednoduchá. Součástí nainstalovaného překladače, nebo chcete-li celého balíčku je i odinstalační program, který stačí spustit a překladač Python je odinstalován podobným způsobem, jako byl nainstalován, tj. pomocí tzv. průvodce. Pokud se zaměříme na prostředí druhého operačního systému, tj. systému Linux Ubuntu tak z něj můžeme odebrat maximálně vývojové prostředí IDLE, které bylo doinstalováno a můžeme tak učinit opět pomocí Ubuntu Software Center. Samotný překladač (interpret) programovacího jazyka Python odebrán být nemůže, protože je součástí této linuxové distribuce Kompatibilita s operačními systémy Pokud budeme vycházet z informací, které jsou uvedeny na oficiálních webových stránkách překladače Python, pak snadno zjistíme, že tento překladač je kompatibilní se všemi třemi nejpoužívanějšími operačními systémy, tedy s operačním systémem Windows, Linux a Mac OS Možnosti zpětné vazby k uživateli Pokud se budeme zabývat zpětnou vazbou, kterou poskytuje překladač Python uživateli, dojdeme k následujícímu závěru. Tento překladač totiž poskytuje uživateli zpětnou vazbu v závislosti na typu chyby, kterou zrovna nalezl. Pokud dojde při překladu k lexikální nebo syntaktické chybě, pak je uživateli zobrazeno varování ve formě messageboxu to vše ovšem pouze za předpokladu, že pro vývoj používáme vývojové prostředí IDLE, které bylo součástí překladače. Po odsouhlasení (stisku tlačítka OK v tomto messageboxu) je zobrazen daný program ve vývojovém prostředí IDLE a kurzor je umístěn na řádek, kde se chyba nachází.

80 Schopnosti překladačů programovacího jazyka Python 80 Obrázek 16: Překladač Python - zpětná vazba k uživateli při nalezení lexikálních a syntaktických chyb Pokud naopak dojde k chybě při sémantické fázi překladu, už o této skutečnosti není uživatel informován formou messageboxu, ale normálním výpisem této chyby v příkazovém řádku, nebo v pythonovské konzoli. Obrázek 17: Překladač Python - zpětná vazba k uživateli při nalezení sémantických chyb Pokud shrneme zpětnou vazbu, kterou překladač Python poskytuje uživatelům, pak dojdeme k závěru, že informace, které poskytuje o sémantických chybách, jsou na dobré úrovni poskytuje informace o typu chyby, řádku na kterém se nachází. Naopak v oblasti zpětné vazby ohledně lexikálních a syntaktických chyb bych uvítal více informací, než jen pouhé zvýraznění řádku, kde se daná chyba nachází.

81 Schopnosti překladačů programovacího jazyka Python Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Pokud se zaměříme obecně na reakci na nalezené chyby, pak překladač Python reaguje na lexikální a syntaktické chyby stejně pomocí již dříve zmíněného messageboxu a hlášky syntax error. Dalším druhem chyb, na které reaguje, jsou chyby sémantické a na ty, jak už bylo dříve zmíněno, reaguje podrobněji a lépe. Nyní se pojďme podrobněji zaměřit na reakce překladače Python na chyby v daných testovacích úlohách. Překladač Python našel a identifikoval téměř všechny již dříve uvedené chyby (kapitola Testovací úlohy), tak jak bychom očekávali. Nicméně ani tento překladač není bezchybný a při testování bylo zjištěno pár zajímavostí. První chybou - konkrétně sémantickou chybou, kterou překladač Python neidentifikoval je chyba týkající se přístupu k znakům určitého řetězce. Testovací úloha, u které se tomu tak stalo pochází ze sekce Práce s řetězci. Konkrétně se tedy jedná o tento kousek kódu. a = "ahoj" print a[5:] Ve výše uvedeném kousku kódu se snažím vypsat znaky řetězce od indexu 5 až do konce, ale délka daného řetězce je 4. Zajímavostí je, že pokud se budu snažit jen přistoupit na 5. prvek dané proměnné, tak překladač Python už zahlásí chybu. V následujícím textu si přehledně shrneme reakce na nejčastěji se vyskytující chyby: Chyby související se syntaxí messagebox syntax error Neuvedení potřebného počtu parametrů - TypeError: range expected at least * arguments, got 0, kde * udává počet parametrů, které dané funkce vyžaduje Použití čísla vyššího jak maxint MemoryError Volání nedefinované proměnné - NameError: name '*' is not defined, kde * udává jméno nedefinované proměnné Přístup k atributu, který nemá daná třída definována - AttributeError: * instance has no attribute '**', kde * označuje jméno třídy a ** daný atribut, který není definován v této třídě Přístup k prvku na nedefinovaném indexu - IndexError: tuple index out of range Přístup číselné proměnné k řetězcovým metodám - AttributeError: 'int' object has no attribute '*, kde * je název metody, která byla použita Spojování řetězcové a číselné proměnné - TypeError: cannot concatenate 'str' and 'int' objects Dělení nulou - ZeroDivisionError: float division by zero

82 Schopnosti překladačů programovacího jazyka Python Časová náročnost překladu Zaměříme-li se na časovou náročnost překladu, pak můžeme zjistit mnoho zajímavých věcí. Průměrná časová náročnost překladu je pod operačním systémem Windows ,25ms. Pokud se zaměříme na testovací úlohy, ve kterých byly schválně uvedeny chyby, v případě, že se jednalo o chyby sémantické, pak průměrná časová náročnost překladu takového skriptu byla 24,25ms a v případě chyb syntaktických, případně lexikální tato hodnota činila 15,87ms. V prostředí operačního systému Linux jsme došli k obdobným výsledkům. Opět nejvyšší hodnotu měla časová náročnost překladu skriptů, které byly bez chyb. Tyto skutečnosti jsou zejména dány tím, že programovací jazyk Python je totiž jazyk interpretovaný. Tudíž pokud je při překladu (interpretaci) nalezena chyba, pak je překlad ukončen a tudíž je jeho časová náročnost menší, než když překladač přeloží celý program. Všechny výsledky jsou přehledně interpretovány v grafech níže. Srovnání časové náročnosti překladu testovacích úloh u Windows 8.1 (ms) 35 32, , , Sémantické chyby Lexikální a syntaktické chyby Bez chyb Obrázek 18: Překladač Python - srovnání časové náročnosti překladu testovacích úloh v prostředí Windows 8.1

83 Schopnosti překladačů programovacího jazyka Python 83 Srovnání časové náročnosti překladu (ms) ,25 Windows 8.1 Linux Ubuntu Obrázek 19: Překladač Python - srovnání časové náročnosti překladu u jednotlivých operačních systémů Prostorová náročnost překladu Prostorová složitost překladu nebývá ve dvou testovaných operačních systémech systému Windows 8.1 a Linux Ubuntu velmi podobných hodnot. Zaměřme se tedy napřed na prostředí operačního systému Windows 8.1. V tomto systému u všech testovaných úloh, ať už se jednalo o verze s chybami nebo bez byla naměřena průměrná prostorová náročnost překladu 21MB. Nyní přejdeme do prostředí druhého z operačních systémů. V systému Linux Ubuntu byly naměřeny velmi podobné hodnoty. Průměrná hodnota prostorové náročnosti překladu v tomto systému je tedy 23MB. Srovnání prostorové náročnosti překladu (MB) Windows 8.1 Linux Ubuntu Obrázek 20: Překladač Python - srovnání prostorové náročnosti překladu u jednotlivých operačních systémů Úroveň dokumentace Dokumentace k překladači Python je dostupná online na webových stránkách Je velmi přehledná a obsáhlá. Zahrnuje i návody a postupy jak instalovat překladač Python v prostředích operačních systémů Windows, Linux

84 Schopnosti překladačů programovacího jazyka Python 84 i Mac OS. Také obsahuje různé tutoriály a návody jak začít vyvíjet pomocí programovacího jazyka Python. Celkově hodnotím tuto dokumentaci jako velmi povedenou Hodnocení překladače Python Obtížnost instalace 1 Obtížnost odinstalace 1 Kompatibilita s operačními systémy 1 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1,3 Časová náročnost překladu 1 Prostorová náročnost překladu 1 Úroveň dokumentace Překladač Skulpt Obtížnost instalace Překladač Skuplt je, jak už bylo zmíněno v kapitole, která je věnována podrobnému popisu všech testovaných překladačů dostupný jako online služba. Tudíž nemusí být instalován Obtížnost odinstalace Souvisí s předchozím bodem obtížností instalace. Jelikož je tento překladač dostupný jako online služba, pak nemusí být v případě nepoužívání nijak odebírán Kompatibilita s operačními systémy Zde opět můžeme nalézt souvislost s předchozími body. Jelikož je překladač Skulpt dostupný online, pak je plně kompatibilní se všemi používanými operačními systémy. Stačí mít spuštěný webový prohlížeč Možnosti zpětné vazby k uživateli I přes skutečnost, že překladač Skulpt je dostupný jako online služba jsou jeho možnosti zpětné vazby k uživateli na velmi dobré úrovni. V porovnáním s předešlými překladači, např. s oficiálním překladačem jazyka Python neinformuje uživatele o nalezených chybách tak podrobně, ale i tak jsou informace o daných chybách postačující. Jednu takovou reakci si můžete prohlédnout na obrázku níže.

85 Schopnosti překladačů programovacího jazyka Python 85 Obrázek 21: Překladač Skulpt - ukázka zpětné vazby k uživateli Na obrázku můžete reakci překladače (interpretu) směrem k uživateli vidět v červeném pruhu Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Překladač Skulpt vůbec nerozlišuje nějaká druhy chyb při překladu, jak tomu bylo např. u oficiálního překladače Pythonu, který rozlišoval syntaktické (mezi tyto chyby řadil i lexikální) a sémantické chyby. Tento překladač na všechny tyto druhy chyb samozřejmě reaguje, ale nijak nerozlišuje jejich druhy. Zajímavostí je, že opět jako v případě oficiálního překladače jazyka Python nereaguje na stejnou chybu, tj. když chci pomocí funkce print vypsat obsah řetězcové proměnné od pozice, která už v daném řetězci není až do konce. Dále v tomto interpretu jazyka Python nejsou implementovány knihovny urllib2 a urllib, které slouží pro zpracovávání http požadavků jsou využívány v testovacích úlohách zabývajících se webovými službami. Stejný případ nastal při testování úloh týkajících se XML souborů tento překladač nemá implementovanou knihovnu xml.etree.celementtree. Poslední problém nastal ve chvíli, kdy měli být testovány úlohy týkající se čtení a zápisu do souborů. Tyto funkce totiž tento online překladač (interpret) také implementovány nemá. V následujícím textu si opět přehledně shrneme reakce na nejčastěji se vyskytující chyby: Chyby související se syntaxí ParseError: bad input on line *, kde * je číslo řádku Neuvedení potřebného počtu parametrů - TypeError: *() takes at ** arguments (***) on line ****, kde * je název funkce, ** je počet argumentů, která

86 Schopnosti překladačů programovacího jazyka Python 86 funkce potřebuje, *** je počet argumentů, které dané funkce dostala a **** je číslo řádku na kterém se daná chyba vyskytuje Použití čísla vyššího jak maxint dojde k pádu webové aplikace Volání nedefinované proměnné - NameError: name '*' is not defined on line **, kde * udává jméno nedefinované proměnné a ** číslo řádku na kterém se daná chyba vyskytuje Přístup k atributu, který nemá daná třída definována - AttributeError: * object has no atribute ** on line ***, kde * je název třídy u jejíž instance se chyba vyskytla, ** je název atributu, který není definován a *** je číslo řádku, kde se daná chyba nachází Přístup k prvku na nedefinovaném indexu - IndexError: tuple index out of range Přístup číselné proměnné k řetězcovým metodám - AttributeError: 'int' object has no attribute '*, kde * je název metody, která byla použita Spojování řetězcové a číselné proměnné - TypeError: cannot concatenate 'str' and 'int' objects on line *, kde * je číslo řádku kde daná chyba je Dělení nulou - ZeroDivisionError: interger division or modulo by zero on line *, kde * je číslo řádku, kde se daná chyba vyskytuje Časová náročnost překladu Časová náročnost překladu se na rozdíl od předešlých překladačů nemůže nijak lišit v prostředí různých operačních systémů. Proto bude také zkoumána pouze v prostředí jednoho z nich. Jelikož se jedná o online překladač bude tato vlastnost zkoumána jiným způsobem než u předešlých překladačů. Do každé testovací úlohy bude na začátek přidána proměnná start, která ponese v sobě přibližný start skriptu. Za touto definicí bude následovat blok kódu, který má být proveden (původní testovací úloha) a na jejím konci bude pomocí příkazu print vypsán rozdíl aktuálně zjištěného času a proměnné start. Tak získáme přibližný čas překladu (interpretace) daných testovacích úloh. Nicméně takto nemůžeme zjistit časovou náročnost testovacích úloh, které v sobě obsahují chyby. Jelikož programovací jazyk Python je jazykem interpretovaným, takže překladač přestane interpretovat zdrojový kód ve chvíli, kdy narazí na chybu. Tudíž se vůbec nedostane k poslednímu řádku kódu, kde zjišťujeme celkový čas. Z tohoto důvodu může být u tohoto překladače hodnocena pouze jeho časová náročnost překladu u testovacích úloh bez chyb. Pokud se zaměříme na níže uvedených graf, který znázorňuje časovou náročnost překladů jednotlivých typů úloh, můžeme zjistit, že nejvyšších hodnot nabývala časová náročnost překladu u úloh, kde docházelo k práci s cykly. V grafu jsou také u některých typů úloh uvedeny nulové hodnoty. Je tomu tak z toho důvodu, že jak už bylo dříve řečeno, překladač Skulpt nepodporoval práci s knihovnami pro tyto druhy úloh.

87 Schopnosti překladačů programovacího jazyka Python 87 Srovnání časové náročnosti překladu jednotlivých druhů testovacích úloh (ms) Obrázek 22: Překladač Skulpt - srovnání časové náročnosti překladu jednitlivých typů testovacích úloh Prostorová náročnost překladu Prostorová náročnost překladu nemůže být u tohoto překladače objektivně vyhodnocena, jelikož je jedná o online překladač. Proto bude jeho známka za tuto kategorii nabývat hodnoty nula Úroveň dokumentace Posledním hodnotícím kritériem tohoto překladače je jeho úroveň dokumentace. K tomuto překladači není dostupná dokumentace v takové formě, jako je například dostupná dokumentace k dříve hodnoceným překladačům. Jediné informace, které lze o tomto překladači získat můžeme nalézt na jeho webových stránkách Sice se na těchto stránkách nachází menší množství informací týkajících se např. toho jak tento překladač používat a kde je dostupný, ale podle mého názoru je to nedostačující. Z tohoto důvodu je také úroveň dokumentace tohoto překladače hodnocena nízkou známkou Hodnocení překladače Skulpt Obtížnost instalace 1 Obtížnost odinstalace 1 Kompatibilita s operačními systémy 1 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1,6 Časová náročnost překladu 1 Prostorová náročnost překladu nehodnoceno

88 Schopnosti překladačů programovacího jazyka Python 88 Úroveň dokumentace Překladač Jython Obtížnost instalace Jelikož se jedná o překladač, který generuje jar soubory, tudíž využívá Java Development Kit, tak je hlavním požadavkem mít tuto sadu nástrojů nainstalovánu. Dalším z požadavků je mít nainstalován opět jako u většiny předešlých překladačů, oficiální překladač programovacího jazyka Python. Toho překladač Jythontotiž využívá. Díky němu je pak možné, jak už bylo zmíněno v kapitole věnované samotným překladačům, využívat v pythonovských skriptech konstrukce programovacího jazyka Java. Poté je třeba nainstalovat samotný překladač Jython. Instalace probíhá velmi uživatelsky přívětivě, konkrétně pomocí průvodce, který sám rozbalí a nainstaluje vše potřebné do vašeho počítače. Tento výše uvedený postup platí pro prostředí operačního systému Windows 8.1. Pro druhý z operačních systémů Linux Ubuntu tento překladač není dostupný. Nicméně následně vygenerovaný jar soubor, tedy soubor v tzv. JavaByte kódu je spustitelný (kompatibilní) i s operačním systémem Linux Ubuntu (za předpokladu, že je na něm nainstalována Java). Obrázek 23: Překladač Jython instalace Samotný překlad je prováděn pomocí příkazové řádky pomocí příkazu java jar. Za tento příkaz je poté nutné uvést cestu k souboru jython.jar a cestu k souboru, který obsahuje příslušný pythonovský skript.

89 Schopnosti překladačů programovacího jazyka Python Obtížnost odinstalace Ačkoliv je instalace tohoto překladače prováděna pomocí průvodce, tak pokud se zaměříme na odinstalaci, je tomu úplně jinak. V prostředí operačního systému Windows 8.1 je nutné využít ovládacích panelů, kde je možné odebírat všechny aktuálně nainstalované programy. Jelikož pro prostředí systému Linux Ubuntu není tento překladač dostupný, nebudeme se jeho odinstalací v tomto prostředí zabývat Kompatibilita s operačními systémy Co se týče samotného překladače, ten je kompatibilní pouze s jedním z nejpoužívanějších operačních systémů, konkrétně tedy s operačním systémem Windows. Nicméně, jak už bylo dříve zmíněno, výsledný jar soubor je za předpokladu nainstalované Javy na daném počítači, spustitelný i v prostředí dalších operačních systémů Možnosti zpětné vazby k uživateli Možnosti zpětné vazby k uživateli odpovídají dvěma skutečnostem. Tou první je, že pro překlad je opět využíván oficiální překladač programovacího jazyka Python a tou druhou, že překlad probíhá v prostředí příkazové řádky, tudíž nemůže být daná chyba, nalezená při překladu, nijak graficky zvýrazněna apod. I přes tuto skutečnost je ale úroveň zpětné vazby k uživateli dostačující. V případě, že je nalezena chyba, pak je stejně jako u oficiálního překladače Pythonu oznámen druh chyby a i pozice, včetně čísla řádku, na kterém se nachází. Obrázek 24: Překladač Jython - možnosti zpětné vazby k uživateli

90 Schopnosti překladačů programovacího jazyka Python Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Překladač Jython, stejně tak jako oficiální překladač jazyka Python (podobnost zde není náhodou Jython využívá oficiální překladač jazyka Python, on sám pouze překládá do JavaByte kódu a případně umožňuje používat v pythonovských skriptech některé prvky programovacího jazyka Java), rozlišuje synktatické a sémantické chyby. Mezi chyby syntaktické řadí chyby, které se vyskytnou jak v lexikální, tak i v syntaktické fázi překladu. Na tuto chyby reaguje hláškou SyntaxError. Zaměříme li se na chyby sémantické, tak u nich už rozlišuje jejich typ, který odpovídá typům chyb uvedeným již dříve, při podrobném hodnocení oficiálního překladače programovacího jazyka Python Časová náročnost překladu Pokud se zaměříme na časovou náročnost překladu u překladače Jython, pak si můžeme povšimnout vyšších hodnot tohoto kritéria. To je dáno zejména vlastní činností tohoto překladače generuje totiž JavaByte kód. To, že je vyšší časová náročnost překladu skriptů bez chyb je opět dáno tím, že v tomto případě, překladač interpretuje celý skript, zatímco v případě skriptu, ve kterém je chyba, překladač interpretuje zdrojový kód pouze do chvíle, než narazí na chybu. Níže uvedený graf tedy interpretuje časovou náročnost překladu pouze v prostředí operačního systému Windows 8.1, jelikož překladač Jython není pro operační systém Linux Ubuntu dostupný. Srovnání časové náročnosti překladu (ms) 3020,0 3000,0 2980,0 2960,0 2940,0 2920,0 2900,0 2880,0 2860,0 2840,0 2820,0 2800,0 3005,0 2986,1 2880,0 Sémantické chyby Lexikální a syntaktické chyby Bez chyb Obrázek 25: Překladač Jython - srovnání časové náročnosti překladu u jednotlivých typů testovacích úloh

91 Schopnosti překladačů programovacího jazyka Python Prostorová náročnost překladu U prostorové náročnosti překladu opět platí stejná vlastnost, jako u časové náročnosti překladu a to, že její velikost u překladu skriptů bez chyb je větší, jak u skriptů ve kterých se chyby vyskytují. Pokud se zaměříme na velikost prostorové náročnosti v souvislosti s dalšími překladači, pak zjistíme, že její velikost se příliš neliší, tak jak např. u časové náročnosti překladu. Srovnání prostorové náročnosti překladu (MB) 20,4 20,2 20,0 19,8 19,6 19,4 19,2 19,0 18,8 20,2 19,4 Sémantické chyby 19,5 Lexikální a syntaktické chyby Bez chyb Obrázek 26: Překladač Jython - srovnání prostorové náročnosti překladu u jednotlivých typů testovaných úloh Úroveň dokumentace Dokumentace je stejně jako ve většině případů dostupná online na webových stránkách překladače Jython. Konkrétně se jedná o webovou stránku Úroveň dokumentace je velmi dobrá, téměř na stejné úrovni jako např. u překladače Python. Obsahuje velké množství informací, včetně informací o instalaci apod. Jediné, co úroveň dokumentace sráží, je její určitá nepřehlednost Hodnocení překladače Jython Obtížnost instalace 1 Obtížnost odinstalace 1 Kompatibilita s operačními systémy 4 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1,6 Časová náročnost překladu 5 Prostorová náročnost překladu 1 Úroveň dokumentace - 2

92 Schopnosti překladačů programovacího jazyka Python Překladač Ironpython Obtížnost instalace Již dříve bylo řečeno (konkrétně v kapitole věnované všem testovaným překladačům jazyka Python), překladač Ironpython je vlastně takovým doplňkem vývojového prostředí Visual Basic. Jedná se zřejmě o nejznámější vývojové prostředí vyvinuté firmou Microsoft. Jak už je zvykem, opět využívá oficiálního překladače (interpretu) programovacího jazyka Python. Tudíž jedním z požadavků je mít tento interpret nainstalován, dalším požadavkem je mít nainstalováno vývojové prostředí Visual Studio. Poté můžeme přistoupit k samotné instalaci. Ta je velmi jednoduchá. Je realizována pomocí průvodce a uživatel se nemusí o nic starat. Výsledkem instalace je i přidání šablon projektů v jazyce Python do vývojového prostředí Visual Studio. Tento postup platí pouze pro operační systém Windows, pro jiný druh operačního systému tento překladač není dostupný Obtížnost odinstalace Odinstalace už tak jednoduchá není. Bohužel není dostupná možnost odinstalace, která by byla realizována pomocí průvodce jako instalace. V případě, že chceme překladač Ironpython odebrat musíme smazat obsah příslušné složky, která se nachází v místě, kde máme nainstalováno vývojové prostředí Visual Studio. Konkrétně se jedná o obsah složky Microsoft Visual Studio 10.0/Common7/IDE/Extensions/Ironpython. Po provedení této operace už nebude možné vytvářet Ironpython projekty a překladač Ironpython už nebude dostupný na daném počítači Kompatibilita s operačními systémy Jelikož se jedná o doplněk Visual Studia, které je produktem společnosti Microsoft, tak je tento překladač kompatibilní pouze s operačními systémy Windows Možnosti zpětné vazby k uživateli Možnosti zpětné vazby k uživateli jsou na velmi dobré úrovni, jelikož samotný vývoj pythonovských aplikací může díky překladači Ironpython probíhat v prostředí Visual Studia. Prostředí tohoto vývojového nástroje je velmi interaktivní např. nezobrazuje chyby až při překladu, ale interaktivně upozorňuje uživatele na nalezené chyby již při psaní zdrojového kódu. Velmi dobrý je i nástroj zobrazující obsahy jednotlivých proměnných v případě nalezení chyby (konkrétně tedy chyb v sémantické fázi překladu). Tento nástroj samozřejmě není dostupný pouze v situacích, kdy jsou nalezeny chyby.

93 Schopnosti překladačů programovacího jazyka Python 93 Celkově tedy hodnotím úroveň možností zpětné vazby překladače Ironpython velmi dobře, zejména tedy z důvodu, že je pro vývoj používáno velmi propracované vývojové prostředí Visual Studio Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Tak jako ve většině překladačů programovacího jazyka Python jsou v prostředí nástroje Visual Studio rozlišovány dva druhy chyb. Jedná se o chyby syntaktické (mezi ně počítá toto vývojové prostředí chyby nalezené v lexikální i syntaktické části překladu) a chyby sémantické. Na první skupinu chyb je uživatel upozorňován již před samotným překladem, díky velmi interaktivnímu vývojovému prostředí Visual Studia. V případě, že se pokusí i tak daný zdrojový kód přeložit, je zobrazeno varování zda opravdu chce přeložit a spustit zdrojový kód obsahující chyby. Na druhou skupinu chyb je uživatel upozorněn až při samotném překladu (interpretaci) zdrojového kódu. Ve chvíli, kdy překladač narazí na chybu, je překlad zastaven a uživatel je informován o nalezené chybě. Informován je uživatel prostřednictvím messageboxu, který je spojen s řádkem, kde se příslušná chyba nachází. Na všechny druhy chyb reaguje překladač Ironpython prostřednictvím Visual Studia velmi dobře a podrobně popisuje jednotlivé druhy chyb, včetně jejich umístění. Nyní se zaměřme na jednotlivé reakce na nejčastěji vyskytující se chyby: Chyby související se syntaxí invalid syntax Neuvedení potřebného počtu parametrů TypeError, range expected at least * arguments, got **, kde * je počet argumentů, které funkce potřebuje a ** je počet argumentů, které funkce dostala Použití čísla vyššího jak maxint OverFlowError Volání nedefinované proměnné NameError, name * is not defined, kde * je jméno proměnné, která není definována Přístup k atributu, který nemá daná třída definována - AttributeError: * object has no atribute ** on line ***, kde * je název třídy, u jejíž instance se chyba vyskytla, ** je název atributu, který není definován a *** je číslo řádku, kde se daná chyba nachází Přístup k prvku na nedefinovaném indexu - IndexError: index out of range Přístup číselné proměnné k řetězcovým metodám - AttributeError: 'int' object has no attribute '*, kde * je název metody, která byla použita Spojování řetězcové a číselné proměnné - TypeError: cannot concatenate 'str' and 'int' objects Dělení nulou - ZeroDivisionError: interger division or modulo by zero

94 Schopnosti překladačů programovacího jazyka Python Časová náročnost překladu Jelikož je tento překladač dostupný pouze pro operační systém Windows uvádím srovnání časových náročností překladu u jednotlivých typů testovacích úloh - úloh s chybami a bez chyb. Jak plyne z grafu pod tímto textem, časová náročnost testovacích úloh bez chyb značně převyšuje časovou náročnosti překladu úloh s chybami. To je dáno, jak už bylo několikrát řečeno tím, že v případě úloh, kde jsou uvedeny chyby, překladač interpretuje zdrojový kód jen do chvíle, než na danou chybu narazí, zatímco pokud máme zdrojový kód bez chyby, tak jej interpretuje celý. To, že časová náročnost překladu testovacích úloh značně převyšuje všechny další testovací úlohy je také dáno tím, že časová náročnost testovacích úloh zabývajících se webovými službami dosahovala hodnot přes 100ms. Srovnání časové náročnosti překladu (ms) 140,0 120,0 100,0 80,0 60,0 40,0 20,0 0,0 122,0 26,8 24,8 Sémantické chyby Syntaktické a lexikální chyby Bez chyb Obrázek 27: Překladač Ironpython - srovnání časové náročnosti překladu jednotlivých typů testovacích úloh Prostorová náročnost překladu Prostorová náročnost překladu je při použití překladače Ironpython zatím nejvyšší ze všech dosud naměřených hodnot. Není to ale způsobeno samotným překladačem, jako spíše tím, že využívá vývojové prostředí Visual Studio, které samo o sobě využívá hodně operační paměti. Průměrná hodnota prostorové náročnosti překladu u tohoto překladače dosáhla přibližně 415 MB Úroveň dokumentace Dokumentace je dostupná online na webových stránkách překladače Ironpython, konkrétně na adrese Její úroveň je dobrá, obsahuje téměř všechny potřebné informace. Jediné informace, které chybí nebo by mohly být spíše lépe a více rozvedeny, jsou informace týkající se instalace, případně odinstalace překladače Ironpython. Ony samotné tyto dvě činnosti nejsou nijak těžké, ale bylo by dobré mít v dokumentaci rozvedeny a dopsány tyto dvě základní činnosti.

95 Schopnosti překladačů programovacího jazyka Python Hodnocení překladače Ironpython Obtížnost instalace 1 Obtížnost odinstalace 2 Kompatibilita s operačními systémy 4 Možnosti zpětné vazby k uživateli 1 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1 Časová náročnost překladu 1 Prostorová náročnost překladu 5 Úroveň dokumentace Překladač Stackless Python Obtížnost instalace Napřed se zaměříme na prostředí operačního systému Windows 8.1. V tomto prostředí je instalace realizována pomocí tzv. průvodce. Instalační soubor lze stáhnout z webových stránek překladače a poté jej stačí pouze spustit a vše potřebné je automaticky provedeno. I když překladač Stackless Python využívá opět oficiálního překladače jazyka Python, není nutné tento překladač mít nainstalován na počítači. V případě, že jej uživatel nemá dostupný na počítači, instalátor překladače Stackless Python to zjistí a sám jej na počítač nainstaluje. Pokud už na daném počítači je dostupný, tak pouze extrahuje potřebné soubory do složky, kde se oficiální překladač jazyka Python nachází. Pokud se přesuneme do prostředí operačního systému Linux Ubuntu, pak si stačí stáhnout daný soubor a jeho obsah extrahovat do adresáře, kde je umístěn Python na vašem počítači s OS Linux. Je tedy nutné mít už nainstalován překladač jazyka Python. Abychom mohli použít některé vlastnosti tohoto překladače, které jiný překladač nemá, např. práci s microthready, kanály, serializaci apod., musíme importovat danou knihovnu pomocí import stackless. Samozřejmě, že můžeme i nadále používat klasické konstrukce programovacího jazyka Python Obtížnost odinstalace V prostředí operačního systému Windows 8.1 je odinstalace velmi podobná instalaci. Můžeme ji realizovat pomocí dostupného programu pro odinstalaci (průvodce, který odinstaluje a odebere všechny součásti, které nainstaloval). V prostředí systému Linux Ubuntu je odinstalace opět velmi podobná vlastní instalaci. Stačí totiž smazat příslušné soubory, které jsme při instalaci extrahovali do adresáře s Pythonem.

96 Schopnosti překladačů programovacího jazyka Python Kompatibilita s operačními systémy Jak vyplývá z informací uvedených na webových stránkách tohoto překladače, je dostupný pro všechny tři nejpoužívanější druhy operačních systémů Windows, Linux a Mac OS. Pro každý tento operační systém je dokonce dostupný v několikátí verzích. Tyto verze odpovídají verzi oficiálního překladače jazyka Python, který je nutné mít také naistalován Možnosti zpětné vazby k uživateli Možnosti zpětné vazby k uživateli plně odpovídají možnostem zpětné vazby k uživateli u oficiálního překladače programovacího jazyka Python ( Protože samotnou instalací překladače Stackless Python vlastně přidáme určité knihovny a možnosti jak interpretovat daný kód z těchto knihoven v daném oficiálním překladači jazyka Python Reakce na nalezení chyby v lexikální, syntaktické a sémantické fázi překladu Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu bude probíhat, jak už asi správně tušíte, stejně jako u překladače Python jelikož překladač Staskless Python jej využívá. Opět jsou rozlišovány dva základní druhy chyb chyby syntaktické (mezi ně překladač řadí chyby nalezené v lexikální a syntaktické fázi překladu) a chyby sémantické. Na chyby syntaktické reaguje překladač hláškou SyntaxError umístěnou v messageboxu, v případě, že překlad (interpretaci) spouštíme z vývojového prostředí IDLE. Pokud tomu tak není a překlad spouštíme z příkazového řádku, pak na daný druh chyb reaguje překladač pouze výpisem chyby SyntaxError do příkazového řádku. Pokud se zaměříme na sémantické chyby, tak na ty reaguje překladač stejně, ať už překlad spouštíme z vývojového prostředí IDLE nebo z příkazového řádku je zobrazeno hlášení o chybě formou výpisu dané chyby.

97 Schopnosti překladačů programovacího jazyka Python Časová náročnost překladu Z níže uvedeného grafu můžeme snadno zjistit, že se hodnoty časové náročnosti překladu u obou operačních systémů při porovnání s oficiálním překladačem jazyka Python příliš neliší. To je dáno zejména tím, že překladač Stackless Python jej využívá. Časová náročnost překladu by nabývala nižších hodnot v porovnání se všemi ostatními překladači pouze v případě, kdy bychom začali využívat hlavní výhody tohoto druhu překladače, tj. jeho práci s vlákny apod. Jelikož je pro tyto úlohy tento překladač optimalizován, pak by dosáhnul určitě lepší časové náročnosti překladu než ostatní překladače. Srovnání časové náročnosti překladu testovacích úloh bez chyb (ms) 188, ,625 0 Windows 8.1 Linux Ubuntu Obrázdek 28: Překladač Stackless Python - srovnání časové náročnosti překladu testovacích úloh bez chyb u obou operačních systémů Prostorová náročnost překladu V případě, že se zaměříme na prostorovou náročnost překladu, opět u ní můžeme nalézt určitou podobnost s většinou překladačů nejvíce pak s překladačem Python, kterého využívá. Odlišné hodnoty tohoto kritéria v jednotlivých operačních systémech jsou zejména dány odlišnou správou paměti. Srovnání prostorové náročnosti překladu testovacích úloh bez chyb (MB) 26, , ,5 Windows 8.1 Linux Ubuntu Obrázek 29: Překladač Stackless Python - srovnání prostorové náročnosti překladu úloh bez chyb u obou operačních systémů

98 Schopnosti překladačů programovacího jazyka Python Úroveň dokumentace Dokumentace je dostupná na Ač se to na první pohled nezdá, je dokumentace velmi obsáhlá a plně dostačující. Obsahuje návod k instalaci (včetně odkazů na příslušné soubory) pro všechny tři nejpoužívanější operační systémy. Dále dokumentace zahrnuje i ukázkové příklady a tutoriály, jak začít používat překladač Stackless Python Hodnocení překladače Stackless Python Obtížnost instalace 1 Obtížnost odinstalace 1 Kompatibilita s operačními systémy 1 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1,3 Časová náročnost překladu 1 Prostorová náročnost překladu 1 Úroveň dokumentace Překladač Shed Skin Obtížnost instalace V prostředí Windows 8.1 je instalace velmi jednoduchá. Z webových stránek je nutní stáhnout instalační soubor, která pouze na uživatelem zadané místo rozbalí všechny potřebné soubory. Samotný překlad je pak realizován v příkazovém řádku dávkového souboru systému Windows init.bat. V tomto dávkovém souboru pak stačí uvést jméno pythonovského skriptu a je proveden jeho překlad. V prostředí systému Linux Ubuntu si uživatel musí stáhnout zazipovaný soubor, který pouze rozbalí do jakéhokoliv adresáře a opět je vše hotovo. Překlad je poté prováděn pomocí příkazu shedskin, za kterým je nutné uvést jméno pythonovského skriptu, který má být interpretován Obtížnost odinstalace Odinstalace je v obou operačních systémech totožná. Je třeba pouze smazat příslušné soubory a tím je veškerá práce hotová Kompatibilita s operačními systémy Překladač Shed Skin je plně kompatibilní se všemi nejpoužívanějšími operačními systémy. Konkrétně tedy se systémy Windows, Linux a Mac OS.

99 Schopnosti překladačů programovacího jazyka Python Možnosti zpětné vazby k uživateli Jelikož se jedná o překladač, který je ovládán z příkazové řádky, pak tomu i odpovídají možnosti, jak může tento překladač poskytnout zpětnou vazbu uživatelům. Uživatel je o nalezených chybách informován prostřednictví zprávy, která je vypsána do příkazové řádky. Uživatel se prostřednictvím této informace dozvídá o jakou chybu se jedná a samozřejmostí je i její umístění (číslo řádku) Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Překladač velmi dobře rozlišuje syntaktické a sémantické chyby, přesně tak jako všechny doposud prozkoumané překladače jazyka Python. Mezi syntaktické chyby pak překladač opět řadí chyby, které nalezl jak v lexikální, tak i syntaktické fázi překladu. Nyní se tedy zaměříme na to, jak překladač reaguje na nejčastěji se vyskytující chyby: Chyby související se syntaxí SyntakxError: invalid syntax Neuvedení potřebného počtu parametrů TypeError, range expected at least * arguments, got **, kde * je počet argumentů, které funkce potřebuje a ** je počet argumentů, které funkce dostala Použití čísla vyššího jak maxint OverFlowError: result has too many items Volání nedefinované proměnné NameError, name * is not defined, kde * je jméno proměnné, která není definována Přístup k atributu, který nemá daná třída definována - AttributeError: * object has no atribute ** on line ***, kde * je název třídy, u jejíž instance se chyba vyskytla, ** je název atributu, který není definován a *** je číslo řádku, kde se daná chyba nachází Přístup k prvku na nedefinovaném indexu - IndexError: index out of range Přístup číselné proměnné k řetězcovým metodám - AttributeError: 'int' object has no attribute '*, kde * je název metody, která byla použita Spojování řetězcové a číselné proměnné - TypeError: cannot concatenate 'str' and 'int' objects Dělení nulou - ZeroDivisionError: interger division or modulo by zero

100 Schopnosti překladačů programovacího jazyka Python Časová náročnost překladu Časová náročnost překladu pomocí překladače Shed Skin nabývá jedné z nejnižších hodnot, které byly při zkoumání časové náročnosti překladu u testovaných překladačů zjištěny. Děje se tomu tak u obou operačních systémů Windows 8.1 i Linux Ubuntu. Tuto skutečnost bychom mohli vysvětlit tak, že jako jeden z mála překladačů nevyužívá oficiální překladač jazyka Python. Jednoduše řečeno nepotřebuje ke své činnosti žádné další součásti. Srovnání časové náročnosti překladu u testovacích úloh bez chyb (ms) Windows Linux Ubuntu Obrázek 30: Překladač Shed Skin - srovnání prostorové náročnosti překladu úloh bez chyb u obou operačních systémů Prostorová náročnost překladu Hodnoty prostorové náročnosti překladu při použití tohoto překladače také nabývají velmi nízkých hodnot. V případě operačního systému Windows 8.1 se jedná o hodnotu 1,2 MB a v případě operačního systému Linux Ubuntu se jedná o hodnotu 6,47 MB. Tyto nízké výsledky souvisí opět se skutečností, že tento druh překladače nepotřebuje ke své činnosti žádné další součásti (např. oficiální překladač jazyka Python). Srovnání prostorové náročnosti překladu u testovacích úloh bez chyb (MB) 8 6 6, ,2 Windows 8.1 Linux Ubuntu Obrázek 31: Překladač Shed Skin - srovnání prostorové náročnosti překladu úloh bez chyb u obou operačních systémů

101 Schopnosti překladačů programovacího jazyka Python Úroveň dokumentace Dokumentace je zpracována velmi stručně, ale nachází se v ní vše, co je pro spuštění, tj. konfiguraci překladače nutné. Je pravda, že by mohla být více, tím je myšleno podrobněji zpracována. Na rozdíl od ostatních doposud prozkoumaných dokumentací, neobsahuje tolik ukázkových příkladů a návodů. Nicméně, jak už bylo řečeno, vše potřebné v ní lze nalézt Hodnocení překladače Shed Skin Obtížnost instalace 1 Obtížnost odinstalace 1 Kompatibilita s operačními systémy 1 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1,6 Časová náročnost překladu 1 Prostorová náročnost překladu 1 Úroveň dokumentace Překladač Py2exe Obtížnost instalace Obtížnost instalace bude stejně jako obtížnost odinstalace zkoumána pouze v prostředí operačního systému Windows 8.1, jelikož pro jiný z operačních systémů není tento překladač dostupný. Pro instalaci je nutné si stáhnout z webových stránek překladače, které jsou dostupné na adrese instalátor, který už provede vše potřebné. Pokud se zaměříme na samotné spuštění překladu, tak to je trochu náročnější, ale postup je podrobně popsán v dokumentaci, které se budeme věnovat samostaně. Pro samotný překlad musíme napřed vytvořit tzv. setup.py skript, který obsahuje v sobě cestu k souboru, který bude překladán. Tento skript je tvaru: from distutils.core import setup import py2exe setup(console=[ nazevskriptu.py ]) Poté je třeba tento skript spustit v příkazovém řádku pomocí příkazu: python setup.py install

102 Schopnosti překladačů programovacího jazyka Python 102 Poté je už možné provést překlad interpretaci daného skriptu, která je uvedený v tzv. setup skritu setup.py. Překlad provedeme pomocí příkazu: python setup.py py2exe Pokud chceme daný přeložený skript spustit (nyní se nachází ve formě exe souboru, jelikož tento překladač k této činnosti slouží) musíme pomocí příkazu cd v příkazové řádce přejít do složky dist a v ní už můžeme spustit daný exe soubor. Jeho jméno se shoduje se jménem pythonovského skriptu, který byl překládán Obtížnost odinstalace Obtížnost odinstalace je opět zkoumána pouze v jednom z operačních systémů, konkrétně tedy v prostředí systému Windows 8.1, jelikož pro jiný operační systém není tento překladač dostupný. Pokud chceme tento překladač odebrat musíme využít Ovládacích panelů operačního systému Windows 8.1, kde je možné v sekci Programy daný program odinstalovat Kompatibilita s operačními systémy Informace týkající se kompatibility nejsou nikde na stránkách daného překladače dostupné. Nicméně pokud se podíváme do sekce Downloads, kde jsou dostupné všechny instalátory tohoto překladače, tak snadno zjistíme, že jediným systémem, pro který je tento překladač určen, je operační systém Windows Možnosti zpětné vazby k uživateli Možnosti zpětné vazby k uživateli jsou dané možnostmi příkazové řádky, ve které daný překlad (na exe soubor) probíhá. Reakce na chyby je opět stejná jako v případě většiny zkoumaných překladačů. Uživatel je upozorněn na skutečnost, že došlo k chybě a je informován o jaký druh chyby se jedná a o tom, kde se daná chyba nachází Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu Pokud překladač Py2exe nalezne chybu v lexikální nebo sémantické fázi překladu pak ji ohlásí jako SyntaxError. Naopak pokud nalezne chybu v sémantické fázi překladu, pak danou chybu označí typem chyby (např. TypeError apod.). O každé chybě tedy překladač Py2exe uvádí její typ a i řádek, kde se daná chyby nachází. Pokud se zaměříme na to, jak tento překladač reaguje, na nejčastěji se vyskytující chyby pak dojdeme na to, že reaguje stejně jako většina zkoumaných překladačů.

103 Schopnosti překladačů programovacího jazyka Python Časová náročnost překladu Zkoumání časové náročnosti překladu proběhlo v překladače Py2exe pouze v prostředí operačního systému Windows 8.1, jelikož pro další operační systémy tento překladač není dostupný. Zaměříme li se na níže uvedený graf, snadno si můžeme ověřit již dříve zjištěné informace a to, že časová náročnost překladu testovacích úloh bez chyb je časově náročnější než překlad testovacích úloh s chybami. Je to dáno, tím že při překladu testovacích úloh bez chyb je interpretován celý zdrojový kód, zatímco u testovacích úloh s uvedenými chybami je zdrojový kód interpretován pouze do chvíle, než překladač narazí na danou chybu. Můžeme si také všimnout, že tak jako u všech předchozích zkoumaných překladačů je časová náročnost překladu testovacích úloh se syntaktickými chybami menší než časová náročnost překladu testovacích úloh se sémantickými chybami. To je dáno tím, že překladač napřed provádí lexikální a syntaktickou analýzu. Až po uskutečnění těchto dvou analýz přichází na řadu analýza sémantická. Srovnání časové náročnosti překladu u jednotlivých typů úloh (ms) ,875 19,375 17,875 Sémantické chyby Syntaktické a lexikální chyby Bez chyb Obrázek 32: Překladač Py2exe - srovnání časové náročnosti překladu u jednotlivých typů úloh v prostředí operačního systému Windows Prostorová náročnost překladu Prostorová náročnost překladu byla opět tak jako časová náročnost překladu zkoumána pouze v prostředí operačního systému Windows 8.1. Pro jiný druh operačního systému totiž není tento překladač dostupný. Průměrná hodnota prostorové náročnost testovacích úloh, jak těch bezchybných, tak těch s chybami se pohybovala okolo 12MB Úroveň dokumentace Pokud budeme na webových stánkách tohoto překladače hledat dokumentaci, pak ji nenalezneme. Na stránkách překladače můžeme nalézt pouze v sekci Tuto-

104 Schopnosti překladačů programovacího jazyka Python 104 rial informace o tom, jak provést instalaci, konfigurace a samotný překladač, případně spuštění výsledného exe souboru. Další informace, které by se měly v dokumentaci nacházet, chybí Hodnocení překladače Py2exe Obtížnost instalace 1 Obtížnost odinstalace 2 Kompatibilita s operačními systémy 4 Možnosti zpětné vazby k uživateli 2 Reakce na nalezené chyby v lexikální, syntaktické a sémantické fázi překladu 1,6 Časová náročnost překladu 1 Prostorová náročnost překladu 1 Úroveň dokumentace Překladač Active Python Obtížnost instalace V prostředí operačního systému Windows 8.1 je instalace velmi snadná. Stačí si pouze stáhnout instalační soubor z webových stránek a spustit jej. Po spuštění je provedena instalace tohoto překladače. Instalace je realizována pomocí tzv. průvodce. Samotné vývojové prostředí Komodo, které je k tomuto překladači doporučováno je nutné stáhnout a nainstalovat zvlášť. Přesuneme li se do prostředí druhého operačního systému, na kterém probíhá testování v rámci této práce, tedy do prostředí operačního systému Linux Ubuntu, je instalace provedena pomocí příkazové řádky a použití příkazu sudo. Ještě se zaměřme na jednotlivé verze tohoto překladače a vývojového prostředí. Testování probíhalo na bezplatných verzích. Bezplatná verze překladače Active Python je dostupná bez nějakého časového omezení. Naopak u vývojového prostředí Komodo je dostupná bezplatně pouze trial verze na 21 dní Obtížnost odinstalace V prostředí operačního systému Windows 8.1 je nutné použít Ovládacích panelů, kde je možné v sekci Programy odebrat všechny nainstalované součásti systému Windows. Naopak v prostředí systému Linux Ubuntu je nutné použít opět příkazové řádky a opaku příkazu sudo. Konkrétně se jedná tento příkaz: sudo apt-get remove název_aplikace

105 Schopnosti překladačů programovacího jazyka Python 105 Kde je místo název_aplikace uveden konkrétní název aplikace, kterou chceme odebrat, v našem případě se bude jednat o překladač Active Python Kompatibilita s operačními systémy Zaměříme li se na webové stránky překladače Active Python a jeho dokumentaci, tak snadno zjistíme, že tento překladač je dostupný pro všechny tři nejpoužívanější operační systémy Windows, Linux a Mac OS. Překladač Active Python je dokonce dostupný i pro další operační systémy, např. pro operační systém Solaris apod Možnost zpětné vazby k uživateli Jelikož je k překladači Active Python doporučováno vývojové prostředí Komodo, pak tomu odpovídají i možnosti zpětné vazby k uživateli. Ty se tedy odvíjejí od možností, jak dokáže poskytovat zpětnou vazbu uživateli právě toto vývojové prostředí. Možnosti zpětné vazby k uživateli jsou velmi obdobné jako u překladače Ironpython, který využívá vývojové prostředí Visual Studio. Na nalezené chyby reaguje překladač Active Python prostřednictvím vývojového prostředí Komodo velmi dobře a přehledně. Řádek, kde byla nalezena chyba, je červeně podtržen a každá chyba je popsána v dolní části tohoto vývojového prostředí. Obrázek 33: Překladač Active Python - možnosti zpětné vazby k uživateli prostřednictvím vývojového prostředí Komodo

Překladač a jeho struktura

Překladač a jeho struktura Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Číslo projektu Číslo materiálu Autor Průřezové téma Předmět CZ.1.07/1.5.00/34.0565 VY_32_INOVACE_284_Programovací_jazyky

Více

IB111 Programování a algoritmizace. Programovací jazyky

IB111 Programování a algoritmizace. Programovací jazyky IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky Programovací jazyk Prostředek pro zápis algoritmů, jež mohou být provedeny na počítači Program Zápis algoritmu v programovacím

Více

Matematika v programovacích

Matematika v programovacích Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?

Více

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

Úvod. Programovací paradigmata

Úvod. Programovací paradigmata .. Úvod. Programovací paradigmata Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Cíl: programování efektivně a bezpečně Programovací techniky

Více

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K. Virtuální počítač Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor Virtuální počítač Překladač Překladač : Zdrojový jazyk Cílový jazyk Analytická část:

Více

TÉMATICKÝ OKRUH TZD, DIS a TIS

TÉMATICKÝ OKRUH TZD, DIS a TIS TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 27. Otázka : Principy moderních překladačů, virtuální stroj. Obsah : 1.Překladač a jeho struktura 2.Druhy překladačů 3.Hlavní části překladače 3.1 Lexikální

Více

Lexikální analýza Teorie programovacích jazyků

Lexikální analýza Teorie programovacích jazyků Lexikální analýza Teorie programovacích jazyků doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Osnova dnešní přednášky 1 Úvod do teorie překladačů kompilátor a interpret

Více

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE

Více

IB111 Úvod do programování skrze Python Přednáška 13

IB111 Úvod do programování skrze Python Přednáška 13 IB111 Úvod do programování skrze Python Přednáška 13 Programovací jazyky Nikola Beneš 14. prosinec 2016 IB111 přednáška 13: programovací jazyky 14. prosinec 2016 1 / 21 Osnova dnešní přednášky Programovací

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

MAXScript výukový kurz

MAXScript výukový kurz MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...

Více

Programovací jazyky Přehled a vývoj

Programovací jazyky Přehled a vývoj Programovací jazyky Přehled a vývoj 1 Programování a programovací jazyk Historie a současnost programovacích jazyků Objektově orientované a vizuální programování Značkovací a skriptovací jazyky 2 Programování

Více

Seznámení s prostředím dot.net Framework

Seznámení s prostředím dot.net Framework Základy programování v jazyce C# Seznámení s prostředím dot.net Framework PL-Prostředí dot.net - NET Framework Je základním stavebním prvkem, na kterém lze vytvářet software. Jeho součásti a jádro je založené

Více

DTP Základy programování Úvod do předmětu

DTP Základy programování Úvod do předmětu DTP Základy programování 01 - Úvod do předmětu Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní

Více

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9)

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9) Programování v C++ Úplnej úvod Co se naučíte? tak samozřejmě C++, s důrazem na: dynamické datové struktury Objektově Orientované Programování STL (standardní knihovna šablon) vytváření vlastních šablon

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Vstupní požadavky, doporučení a metodické pokyny

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

PHP tutoriál (základy PHP snadno a rychle)

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza. Sémantická analýza Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 19. listopadu 2009 Definice (Sémantická analýza) Vstup: konstrukce symbolů vytvořená

Více

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie Úvod z historie RNDr. Miroslav Benedikovič John Louis von Neumann r. 1946 nová koncepce počítače (společná paměť pro kód programu a zpracovávaná data) vytvořila podmínky pro vznik softvéru na přípravu

Více

Úvod do programovacího jazyka Python

Úvod do programovacího jazyka Python Úvod do programovacího jazyka Python Co je to Python? Python je objektově-orientovaný programovací jazyk. Tento programovací jazyk je velice výkonný, čitelný a dá se snadno naučit. Jeho použití je velice

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013 Předměty Algoritmizace a programování Seminář z programování Verze pro akademický rok 2012/2013 Verze pro akademický rok 2012/2013 1 Přednášky Jiřina Královcová MTI, přízemí budovy A Tel: 48 53 53 521

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata 1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata Studijní cíl Tento první blok celého kurzu zaměřen na zvládnutí základních pojmů z oblasti programování a

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: vzdělávací

Více

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Funkce, podmíněný příkaz if-else, příkaz cyklu for Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto

Více

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita.

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita. Lekce 1 Základní vlastnosti Pythonu, porovnání s ostatními jazyky, proč a k čemu lze používat Python. Stručné seznámení s vývojovým prostředím jazyka Python. C2184 do programování v Pythonu podzim 2014

Více

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ 2014 5.3-5.8 9/14

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ 2014 5.3-5.8 9/14 ZÁKLADY PROGRAMOVÁNÍ Mgr. Vladislav BEDNÁŘ 2014 5.3-5.8 9/14 Co je vhodné vědět, než si vybereme programovací jazyk a začneme programovat roboty. 1 / 12 0:40 UML unifikovaný modelovací jazyk Zkratka tohoto

Více

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9 Začínáme programovat v Ruby on Rails 9 O autorovi 9 Poděkování 9 Úvod 11 Komu je kniha určena 11 Jak je kniha uspořádána 11 Co ke knize potřebujete 12 Konvence 12 Zdrojový kód 13 Poznámka redakce českého

Více

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody Obsah 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody 3) 4) Mantichora Mantichora je moderní aplikace, který

Více

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita Aktivní webové stránky Úvod: - statické webové stránky: pevně vytvořený kód HTML uložený na serveru, ke kterému se přistupuje obvykle pomocí protokolu HTTP (HTTPS - zabezpečený). Je možno používat i různé

Více

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková Ruby on Rails Bc. Tomáš Juřík Bc. Bára Huňková Co nás dnes čeká? Ruby (programovací jazyk) Ruby on Rails (webový framework) Praktická ukázka Ruby (programovací jazyk) Ruby (programovací jazyk) Skriptovací

Více

Úvod do programovacího jazyka Python

Úvod do programovacího jazyka Python Úvod do programovacího jazyka Python Co je to Python? Python je objektově orientovaný programovací jazyk, který se může využít v mnoha oblastech vývoje softwaru. Nabízí významnou podporu k integraci s

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

11. Přehled prog. jazyků

11. Přehled prog. jazyků Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 11 1 Základy algoritmizace 11. Přehled prog. jazyků doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Více

Algoritmizace- úvod. Ing. Tomáš Otáhal

Algoritmizace- úvod. Ing. Tomáš Otáhal Algoritmizace- úvod Ing. Tomáš táhal Historie 9. století perský matematik a astronom Mohammed Al-Chorezím v latinském přepise příjmení= algoritmus Nejstarší algoritmus Euklides řecký matematik, 4. století

Více

Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Databázové aplikace pro internetové prostředí 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Projekt: Inovace výuky prostřednictvím ICT Registrační číslo: CZ.1.07/1.5.00/34.250

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 25. Otázka : Komponentní technologie - základní pojmy a principy, metody specifikace komponent. Obsah : 1. Základní pojmy 1.1 Komponenta Komponenta

Více

Funkcionální programování. Kristýna Kaslová

Funkcionální programování. Kristýna Kaslová Funkcionální programování Kristýna Kaslová Historie Alonzo Church (30. léta) Netypovaný lambda kalkul Základ prvních funkcionálních jazyků Jeho konstrukce i v mnoha současných programovacích jazycích (Python)

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup

Více

Program a životní cyklus programu

Program a životní cyklus programu Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy

Více

VISUAL BASIC. Přehled témat

VISUAL BASIC. Přehled témat VISUAL BASIC Přehled témat 1 ÚVOD DO PROGRAMOVÁNÍ Co je to program? Kuchařský předpis, scénář k filmu,... Program posloupnost instrukcí Běh programu: postupné plnění instrukcí zpracovávání vstupních dat

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Visual Studio Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 19,2 Číslo: V/5 Programování

Více

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě PHP PHP původně znamenalo Personal Home Page a vzniklo v roce 1996, od té doby prošlo velkými změnami a nyní tato zkratka znamená Hypertext Preprocessor. PHP je skriptovací programovací jazyk, určený především

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Software602 Form Designer

Software602 Form Designer Software602 Form Designer Javascriptový vyhodnocovací mechanismus výrazů Aktualizováno: 17. 3. 2017 Software602 a.s. Hornokrčská 15 140 00 Praha 4 tel: 222 011 602 web: www.602.cz e-mail: info@602.cz ID

Více

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19 Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář

Více

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina 5a. Makra Visual Basic pro Microsoft Escel Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty Zde bude stránka o cyklických odkazech a iteracích.

Více

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. PHP - úvod Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. Klíčové pojmy: PHP, webový prohlížeč, HTTP, FTP Základní pojmy služba WWW = 1990 první prototyp serveru, od roku 1994

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody 4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty

Více

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost Programování Algoritmus návod na vykonání činnosti, který nás od (měnitelných) vstupních dat přivede v konečném čase k výsledku přesně definovaná konečná posloupnost činností vedoucích k výsledku (postup,

Více

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U P R O G R A M O V É V Y B A V E N Í Studijní obor: 18-20-M/01 Informační technologie Školní

Více

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová Programové konvence, dokumentace a ladění 2. přednáška Alena Buchalcevová Proč dodržovat programové konvence? velkou část životního cyklu softwaru tvoří údržba údržbu provádí většinou někdo jiný než autor

Více

Implementace LMS MOODLE. na Windows 2003 Server a IIS 6.0

Implementace LMS MOODLE. na Windows 2003 Server a IIS 6.0 Implementace LMS MOODLE na Windows 2003 Server a IIS 6.0 Obsah 1 ÚVOD... 3 1.1 Instalace PHP... 3 1.1.1 Nastavení práv k adresáři PHP... 3 1.1.2 Úprava souboru php.ini... 4 1.1.3 Proměnné prostředí...

Více

Vzdálená správa v cloudu až pro 250 počítačů

Vzdálená správa v cloudu až pro 250 počítačů Vzdálená správa v cloudu až pro 250 počítačů S pomocí ESET Cloud Administratoru můžete řídit zabezpečení vaší podnikové sítě bez nutnosti nákupu, instalace nebo údržby dalšího hardwaru. Řešení je poskytováno

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 1. Úvod. Algoritmus 1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá

Více

Tabulkový procesor. Základní rysy

Tabulkový procesor. Základní rysy Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních

Více

Profilová část maturitní zkoušky 2017/2018

Profilová část maturitní zkoušky 2017/2018 Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2017/2018 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA

Více

S2. Vytvoření Windows balíku pro vývoj na STM32 architektuře

S2. Vytvoření Windows balíku pro vývoj na STM32 architektuře Projekt BROB - 2014 S2. Vytvoření Windows balíku pro vývoj na STM32 architektuře Autor práce: Jakub Žďárský, UAMT VUT FEKT Vedoucí práce: Ing. František Burian 1 Obsah Obsah... 2 Zadání... 3 Úvod... 3

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Rozklad na prvočinitele. 3. prosince 2010

Rozklad na prvočinitele. 3. prosince 2010 Rozklad na prvočinitele Ondřej Slavíček 3. prosince 2010 1 Obsah 1 Příručka k programu 3 1.1 funkce main()............................. 3 1.2 funkce hlavnifunkce()........................ 3 1.3 funkce

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího

Více

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13 Obsah Úvodem 9 1. Úvod do Ajaxu 11 Jak Ajax funguje? 13 Popis 13 Ukázky 13 Jaké jsou možnosti tvorby interaktivních webových aplikací? 15 Co je třeba znát? 16 Jak fungují technologie Ajaxu 16 Jak funguje

Více

Lekce 01 Úvod do algoritmizace

Lekce 01 Úvod do algoritmizace Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů Lekce 01 Úvod do algoritmizace Tento projekt CZ.1.07/1.3.12/04.0006 je spolufinancován Evropským sociálním

Více

PSK3-9. Základy skriptování. Hlavička

PSK3-9. Základy skriptování. Hlavička PSK3-9 Název školy: Autor: Anotace: Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3 Ing. Marek Nožka Základy skriptování v unixovém shellu Vzdělávací oblast: Informační a komunikační technologie

Více

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika Vyšší odborná škola ekonomická a zdravotnická a Střední škola, Boskovice INOVACE PŘEDMĚTŮ ICT MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika Zpracoval: Jaroslav Kotlán srpen 2009s Úvod Modul Programování

Více

ČÁST 1. Základy 32bitového programování ve Windows

ČÁST 1. Základy 32bitového programování ve Windows Obsah Úvod 13 ČÁST 1 Základy 32bitového programování ve Windows Kapitola 1 Nástroje pro programování ve Windows 19 První program v Assembleru a jeho kompilace 19 Objektové soubory 23 Direktiva INVOKE 25

Více

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE profesionální verze 1 Obsah Požadavky... 3 Instalace... 3 Proměnná CLASSPATH... 3 Zpřístupnění licenčního klíče... 3 Ověřování komponent OKS. 3 Spouštíme aplikaci

Více

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Základní informace Přednášky: doc. Ing. Jan Janoušek, Ph.D.

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Základní pojmy objektově orientovaného programování Objekt vychází z reálného světa. Má dva charakteristické rysy. Všechny objekty mají stav Všechny objekty

Více

První kapitola úvod do problematiky

První kapitola úvod do problematiky První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru

Více

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list

Více

Střední odborná škola a Střední odborné učiliště, Hořovice

Střední odborná škola a Střední odborné učiliště, Hořovice Kód DUM : VY_32_INOVACE_LIN.1.02 Název materiálu: Anotace Autor Jazyk Očekávaný výstup 02- Zásady psaní a řetězení příkazů, jednoduchý skript DUM naučí žáky zásady práce s příkazy shellu BASH, zásady psaní

Více

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ. PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ. 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Dva základní

Více

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework úvod, historie, základy.net framework, programovací jazyky, vývojové prostředky Úvod strana 2 Cíl předmětu Seznámit se s vývojem aplikací

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

ANOTACE vytvořených/inovovaných materiálů

ANOTACE vytvořených/inovovaných materiálů ANOTACE vytvořených/inovovaných materiálů Číslo projektu Číslo a název šablony klíčové aktivity Tematická oblast Formát Druh učebního materiálu Druh interaktivity CZ.1.07/1.5.00/34.0722 III/2 Inovace a

Více

Úvod do programování

Úvod do programování Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25 Programování v C# Úvodní slovo 1 / 25 Obsah přednášky Seznámení s předmětem Co je.net Vlastnosti.NET 2 / 25 Kdo je kdo Petr Vaněček vanecek@pf.jcu.cz J 502 Václav Novák vacnovak@pf.jcu.cz?? Při komunikaci

Více