A Tcl (Tool Command Language) nyelvet Jonh K. Ousterhout alkotta meg. A Tcl egy egyszerű interpretált nyelv, amely kevés, de sokoldalú elemre épít. A LISP, a C és a unix C-shell egyes elemeit egyesíti.
Magasszintűsége folytán gyors és kényelmes programfejlesztést tesz lehetővé. Mindez nem kell, hogy a hatékonyság rovására legyen, mert a Tcl szoros szimbiózisban él a C-vel. Lehetőségünk van a Tcl parancskészletét C-ben írt parancsokkal kiterjeszteni, és fordítva, Tcl programok beágyazhatók C kódba. Sőt, ha egy alkalmazás alapvető funkcionalitását C nyelven, magasabb szintű részét és felhasználói felületét pedig Tcl-ben írjuk meg, a Tcl-t mint makrónyelvet adhatjuk a felhasználó kezébe, nagyfokú rugalmasságot biztosítva ezzel.
A Tcl legfontosabb kiterjesztése a Tk toolkit, amellyel a Tcl alkalmassá válik X Windows felhasználói felületek építésére. Jelen dokumentumban nem terjed ki sem a Tk-ra, sem a Tcl és a C kapcsolatára.
A Tcl egy fejlődő nyelv, újabb és újabb változatai jelennek meg. Itt a Tcl 7.x-es változatát vettem alapul. Az interpereter számos operációs rendszer alatt elérhető (unixok, Linux, MacOS, Win32). Létezik Java alapú implementációja (Jacl).
tcl8.0 | A 8.0-s változatban az interpretert felváltotta egy on-the-fly compiler - amely a scripteket bájtkóddá fordítja -, illetve egy a bájtkódot futtatni képes interpreter. A továbbiakban tcl8.0-val jelezzük, ha a 8.0-s változatban bevezetett új nyelvi elemről van szó. |
Amit a nyelv nem támogat:
A Tcl szintaxisa és szemantikája két szintből tevődik össze. Az elsődleges szint kevés, de nagyon általános szintaktikus és szemantikus szabályt rögzít. A változóktól eltekintve mindössze két nyelvi elem adott: parancsok és helyettesítések. A Tcl interpreter parancsok sorozatát hajtja végre. Az egyes parancsok végrehajtása előtt helyettesítéseket végez a parancson, például helyettesíti a változóhivatkozásokat a változók értékével.
Az elsődleges szintet a reá predefinit parancsok formájában épülő másodlagos szint egészíti ki egy imperatív programozási nyelvvé. Ezek a parancsok nemcsak szemantikus bővítést, hanem szintaktikai specializációt is jelentenek az argumentumokra tett megkötésekkel.
A kétszintűség az adattípusoknál is jelen van: a Tcl egyetlen valódi adattípusa a string, a további adattípusokat - mint a számok és a listák - stringekkel reprezentálja. Ennek megfelelően a parancsok argumentumai és visszatérési értékei is stringek. A Tcl tömb nem illeszkedik be a sorba, nem stringen alapul. A tömb ebben a nyelvben inkább indexelhető változó, mintsem típus.
Mivel a stringek tartalmazhatnak scripteket - ahogyan az irodalom a Tcl programokat nevezi -, bőséges tér kínálkozik a metaprogramozáshoz. Sőt, a metaprogramozást nem is kerülhetjük meg, mert a Tcl nem elsődleges szinten fogalmazza meg a vezérlőszerkezeteket vagy az eljárásokat, hanem másodlagos nyelvi elemként, scripttel paraméterezett parancsként valósítja meg őket.