Hlavní navigace

Programovací jazyk TCL

Pavel Tišnovský

V tomto článku bude stručně popsán interpretovaný programovací jazyk Tcl spolu se svojí nadstavbou ve formě knihovny Tk. Tcl/Tk je velmi jednoduše využitelný nástroj pro tvorbu prototypových aplikací s grafickým uživatelským rozhraním, je však využit i v mnoha rozsáhlých projektech, v nichž se většinou používá jako zabudovaný skriptovací jazyk, kterým je celá aplikace nebo její část řízena. Mezi přednosti Tcl/Tk patří snadnost programování a návrhu GUI, přenositelnost na různé platformy a rozšiřitelnost o další funkce.

Obsah

1. Úvodní informace o jazyku Tcl
2. Vlastnosti jazyka Tcl
3. Přednosti Tcl
4. Zápory Tcl
5. Rozšíření Tcl/Tk
6. Rozšíření v [incr Tcl]
7. Základy programování – syntaxe příkazů
8. Odkazy a dostupná literatura na Internetu
9. Obsah dalšího pokračování tohoto seriálu

1. Úvodní informace o jazyku Tcl

Tcl [1] je, jak již bylo zmíněno v perexu tohoto článku, interpretovaný programovací jazyk, který je specializovaný na snadnou a rychlou tvorbu prototypových aplikací, návrh grafických uživatelských rozhraní (zde se používá jeho nadstavba resp. knihovna nazvaná Tk) a také pro zabudování do dalších aplikací, které tak získávají možnosti jednoduchého a přitom mocného skriptování. Kromě toho lze velmi snadno volat z programu napsaného v Tcl další aplikace či utility napsané v jiných programovacích jazycích, a tak de factoTcl rozšiřovat o další funkce a příkazy.

Tcl sice ideově vychází (podobně jako další programovací jazyk s podobnými vlastnostmi – Logo [2]) z programovacího jazyka Lisp [3], ale zavádí některé pro uživatele zjednodušující syntaktická pravidla, takže zdrojový kód v

Tcl je, na rozdíl od Lispu a Perlu, snáze čitelný a pochopitelný. Vzhledem k tomu, že Tcl je zkratka, měla by se správně psát velkými písmeny, tj. jako TCL, nikdo to však ve skutečnosti nedělá, podobně jako u Perlu. Dobu své největší slávy má Tcl, jak se zdá, za sebou (na úkor Perlu, Pythonu,

Ruby a dalších skriptovacích jazyků), to však v žádném případě neznamená, že by šlo o jazyk špatný či méně použitelný.

2. Vlastnosti jazyka Tcl

Tcl, neboli plným názvem Tool Command Language, je interpretovaný programovací jazyk vyvinutý Johnem Ousterhoutem [4] v osmdesátých letech minulého století [5], který se, podobně jako jeho ideový předchůdceLisp, snaží z faktu, že je interpretovaný, vytěžit maximum. Příkladem může být skutečnost, že samotný jazyk neobsahuje žádné příkazy pro tvorbu smyček, podmínek ani matematických či logických výrazů – tyto elementy, jež nám na první pohled mohou připadat jako neoddělitelná součást jakéhokoli rozumně použitelného programovacího jazyka, jsou v Tcl řešeny pomocí funkcí, které jako své parametry mohou získávat programový kód (ten například tvoří tělo smyčky či výraz představující podmínku). I z tohoto důvodu bude vlastní popis jazyka velmi stručný, protože obsahuje pouze několik poměrně jednoduchých pravidel pro psaní programů (na druhou stranu to však poněkud mate začátečníky, kteří se kvůli neexistenci speciálních syntaktických pravidel pro výrazy a řídicí příkazy špatně orientují v jinak výborné dokumentaci).

Podobně jako u mnoha dalších interpretovaných jazyků [6] se i zde setkáme s velmi jednoduchou syntaxí, která však může být v některých případech nepohodlná, například při zápisu matematických výrazů, vyhodnocování proměnných nebo zakazování či naopak přikazování textových substitucí. Velmi zajímavé je právě pojetí funkcí a proměnných, protože v Tcl je prakticky vše při běhu programu považováno za řetězce. Dokonce i pole jsou řešena jako asociativní pole, tj. místo číselných indexů se používají řetězce, na které se případné číselné hodnoty převádějí (čísla jsou z uživatelského pohledu také ukládána v řetězci). Za řetězce je dokonce považován i vlastní zápis programu, takže program je možné dynamicky, tj. přímo za běhu, měnit – tímto pojetím se Tcl opět přibližuje Lispu. Z toho, že jsou všechny proměnné považovány za řetězce znaků, vyplývá, že se jedná o beztypový jazyk, tj. u proměnných, parametrů ani návratových hodnot funkcí není zapotřebí specifikovat, jakého jsou typu. Současně však z beztypovosti (resp. z automatického převodu řetězců na čísla při některých operacích) vyplývají některé zápory, zejména při zpracovávání matematických výrazů, kdy může v některých případech docházet ke špatným konverzím.

I když se jedná o interpretovaný jazyk, je k dispozici překladač, který však samozřejmě nedokáže (kvůli dynamické změně programů v době jejich běhu) provést překlad přímo do spustitelného tvaru. Ve skutečnosti se nejprve provádí překlad do bytekódu, který je rychleji zpracovatelný než původní zdrojový soubor. Překlad do strojového kódu se provádí až ve chvíli spuštění či změny programu (takzvaný překlad just-in-time).

3. Přednosti Tcl

Mezi velké přednosti jazyka Tcl patří jednoduchost tvorby aplikací, snadné ladění a návaznost na další programovací jazyky, například C, C++ a Javu. Při použitíTcl lze poměrně jednoduchým a efektivním způsobem spojit výhody obou skupin programovacích jazyků: rychlost C-čka a dynamičnost Tcl. Aplikaci lze v principu vytvořit dvěma způsoby:

  1. Řídicí část programu může být napsána v Tcl, přičemž se některé složitější nebo časově náročnější funkce vytvoří v některém jiném (nejčastěji kompilovaném) programovacím jazyce. Tyto funkce se přeloží do spustitelného tvaru tak, aby své parametry získávaly z příkazové řádky. Takové funkce lze z Tcl volat přímo, tj. bez jakýchkoli omezení, protože všechny hodnoty jsou chápány jako řetězce, které lze předávat jako parametry přes příkazovou řádku. Nevýhodou může být pomalejší inicializace těchto funkcí, například při opakovaném volání z programové smyčky.
  2. Řídicí část programu může být napsána v jiném programovacím jazyce, přičemž se Tcl používá pro skriptování a/nebo práci s grafickým uživatelským rozhraním. Tento přístup se více blíží klasickým desktopovým aplikacím, návaznost na Tcl (včetně předávání parametrů) je však nepatrně složitější.

Další velkou předností Tcl i knihovny Tkje portabilita. Jak celé vývojové prostředí (o něm bude řeč dále), tak i jednotlivé knihovny a napsané programy lze velmi jednoduše portovat na různé operační systémy. K dispozici jsou již přeložené binární soubory interpreteru pro různé unixové systémy, samozřejmě pro Linux, Apple Macintosh a v neposlední řadě i pro Microsoft Windows [7]. S portací souvisí i snadná dostupnost interpreteru (je součástí mnoha linuxových distribucí, pro Microsoft Windows je připraven instalační program) a licenční podmínky, které upravují možnosti šíření programů spolu s podpůrnými knihovnami.

Mezi další přednost patří podpora řetězců v kódování Unicode, což umožňuje použít Tcl i jako skriptovací jazyk pro zpracování textových souborů, vytváření dynamických HTML stránek apod. Dřívější verze Tcl (<8.1) podporovaly pouze ASCII řetězce, což situaci zhoršovalo, zejména v evropském regionu plném nabodeníček (čeština na tom však není zdaleka nejhůře, zajímavé z dnešního pohledu je, že na začátku minulého století se některé země češtinou inspirovaly a nabodeníčka také zavedly :-).

4. Zápory Tcl

Mezi největší zápory Tcl patří samozřejmě nižší rychlost provádění skriptů, zejména při porovnání s kompilovanými jazyky. Pokud se však Tcl používá pro tvorbu grafického uživatelského rozhraní či práci s prototypy, nebývá rychlost tím hlavním omezujícím faktorem – v případě problémů je vždy možné kritické části kódu přepsat do C-čka.

Dalším záporem je nepřítomnost plného režimu WISIWYG při návrhu grafického uživatelského rozhraní. Standardně je k dispozici grafický shell Wish, ve kterém lze interaktivně navrhovat jednotlivá okna a dialogy, vše však probíhá „pouze“ na základě textového vstupu.

K dalším záporům patří některá omezení jazyka, zejména zde chybí možnost psaní čistě objektově orientovaných programů. Ve skutečnosti lze OOP používat (a to jak ve formě rozšíření pomocí C-čkových funkcí, tak i rozšíření na bázi Tcl), ale návrh jazyka s OOP primárně nepočítal.

Mnoho lidí při výběru skriptovacího jazyka porovnává TclPerlem. Jedno z porovnání je umístěno na [8], další potom na [9]. Z tohoto porovnání vyplývá, že program napsaný v Tcl je sice čitelnější, obsahuje však menší podporu pro regulární výrazy (zde je Perlpravděpodobně nepřekonatelný) a starší verze jsou při nasazení pomalejší než perlovské skripty. Na druhou stranu se v Tcl obecně píše čitelnější kód a také možnosti zabudování do dalších aplikací má Tcl na mnohem vyšší úrovni, stejně jako podporu Unicode (programovací jazyky jsou však jako auta: neexistuje jeden ideální výrobek, pro každou činnost je zapotřebí zvolit něco odlišného).

5. Rozšíření Tcl/Tk

Spojením Tcl/Tk se označuje skriptovací jazykTcl spolu se svou knihovnou Tk. Tato knihovna, kterou také vytvořil John Ousterhout, slouží pro práci s grafickým uživatelským rozhraním, umožňuje vytvářet okna a dialogy (modální okna) spolu s umísťováním jednotlivých ovládacích i grafických prvků (widgets) do oken nebo do neviditelných kontejnerů, které slouží ke sloučení několika prvků do skupiny. Knihovnou Tk se budu v dalších pokračováních tohoto seriálu zabývat podrobněji, protože se jedná o – podle mého názoru – dodnes nejlepší prostředí pro rychlý návrh grafického uživatelského rozhraní. Samozřejmostí je přenositelnost celé knihovny na různé platformy (grafické uživatelské rozhraní se potom přizpůsobí dané platformě – týká se to například stylů oken, způsobu zaměřování widgetů apod.). Obliba Tk je tak velká, že bylo použito i v dalších interpretovaných programovacích jazycích pro tvorbu grafického uživatelského rozhraní – v ostatních programovacích jazycích však nevynikne snadnost používání této knihovny.

6. Rozšíření v [incr Tcl]

V rozšíření nazvaném [incr Tcl] se nachází několik skupin rozšíření. Pravděpodobně nejvýznamnější je rozšíření, pomocí kterého lze vytvářet objektově orientované programy. K dispozici jsou příkazy jako class, is, local, scope a body, pomocí nichž lze s objekty pracovat: vytvářet je, rušit, měnit, porovnávat apod. Za zmínku stojí fakt, že pro objektové rozšíření není zapotřebí měnit vlastní interpreter (zde opět můžeme spatřit značnou podobnost s Lispem).

7. Základy programování – syntaxe příkazů

Způsobem zápisu programů v Tcl se budu zabývat v dalším pokračování tohoto seriálu, zde si pouze uvedeme syntaxi jednotlivých příkazů. V Tcl jsou příkazy od sebe odděleny buď koncem řádku (CR, CR-LF, LF apod.), nebo středníkem. Slova jsou přitom považována za řetězce, přičemž se nemusí používat uvozovky (ty mají význam pouze při zápisu mezer do řetězce). Pokud je na řádku uveden pouze jeden příkaz, nemusí se za ním středník psát. Příkaz je složen z jednoho nebo více slov, která jsou od sebe oddělena takzvanými bílými znaky (mezery, tabelátory). První slovo je chápáno jako jméno příkazu (funkce, procedury), další slova jsou chápána jako parametry, které se, na rozdíl od Lispu, nevyhodnocují (vyhodnocení se musí vynutit pomocí dalších jazykových konstrukcí, které budou popsány příště). Abychom si dnes uvedli nějaký program v Tcl, naprogramujeme známý „Hello world“, který může vypadat následovně:

puts "Hello world"

Pro spuštění tohoto programu lze použít buď Wish, nebo tclsh.

8. Odkazy a dostupná literatura na Internetu

  1. Stránka na Wikipedii o Tcl (v angličtině)
  2. Stránka na Wikipedii o programovacím jazyku LOGO (v angličtině)
  3. Stránka na Wikipedii o Lispu (v angličtině)
  4. Práce Davida Kolovratníka o Tcl/Tk (1. část, 2. část) (v češtině)
  5. History of Tcl and Tk (v angličtině)
  6. History of Scripting (v angličtině)
  7. ActiveState – Dynamic Tools for Dynamic Languages (v angličtině)
  8. Why Tcl is better than Perl (v angličtině)
  9. Perl Resources and Reviews (Diving for Perl) (v angličtině)
  10. Školička Honzy Hubičky o Tcl (v češtině)
  11. Porovnání Tcl s dalšími skriptovacími jazyky (v angličtině)

9. Obsah dalšího pokračování tohoto seriálu

V dalším pokračování tohoto seriálu bude popsána syntaxe příkazů jazyka Tcl, způsob provádění substitucí příkazů i proměnných a práce s jednoduchými proměnnými i složitějšími datovými typy (asociativními poli a seznamy).

Našli jste v článku chybu?

19. 7. 2005 7:55

Petr Mach (neregistrovaný)
Jsem rád, že se tu oběvuje článek o jazyku TCL, byl to zajímavý jazyk, i když je dnes už překonaný. Bude poučné si o něm něco přečíst. Nezkušené zájemce o programování ale chci upozornit, že dnes tu jsou modernější jazyky, které jsou užitečnější a které si za svých předchůdců, jako např. TCL/TK vzali to nejlepší a řadu dalších dobrých věcí přidali.

Co se týče TCL, tak většina uvedených vlastností se shoduje s vlastnostmi jazyka Python. Až na pár výjimek, jako je ta podivuhodná syntaxe, která ma…

6. 3. 2008 9:17

Jistě, příkazem tk appname, například tk appname "MOJE APLIKACE".
DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách