Tcl (programmeertaal)

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Tcl
Tcl.svg
Paradigma multi-paradigma
Verschenen in 1988
Ontworpen door John Ousterhout
Ontwikkeld door John Ousterhout
Huidige versie 8.6.0 (21 december 2012)
Typesysteem dynamisch
Implementaties ActiveTcl
Dialecten Hecl Jim Jacl Picol
Invloed op Windows PowerShell
Licentie (en) Tcl/Tk-licentie
Website (en) Officiële website
Portaal  Portaalicoon   Informatica

Tcl (afkorting van tool command language) is een flexibele scripttaal, eind jaren tachtig ontwikkeld door John Ousterhout. Deze scripttaal die nog steeds verder ontwikkeld wordt, is bedoeld om zelfstandig gebruikt te worden en wordt ook gebruikt om als scripttaal in andere programma's in te bouwen. Tcl wordt meestal uitgesproken als 'tikkel' en heel vaak wordt met Tcl de Tk-toolkit gebruikt, waarmee dan een grafische gebruikersinterface wordt gemaakt (men spreekt dan over Tcl/Tk). Tcl is beschikbaar voor Unix/Linux, Windows en Mac OS X.

Grammatica[bewerken]

Tcl heeft een verrassend eenvoudige grammatica:

  • Een zin bestaat uit woorden, gescheiden door spaties
  • Een tekst bestaat uit zinnen, gescheiden door return-tekens
  • Een commando is een zin, waarvan het eerste woord het commando aangeeft en de volgende woorden de parameters.
  • Een script is een tekst, bestaande uit commandozinnen
  • Indien in een woord blokhaken ( [ en ] ) voorkomen, dan wordt de tekst daartussen als commando opgevat en uitgevoerd. Het resultaat van het commando wordt in plaats van de blokhaken ingevoegd.
  • Indien in een woord een dollarteken gevolgd door een woord staat (bijvoorbeeld $woord), dan wordt de waarde van de variabele met die naam opgezocht en in plaats ervan ingevoegd.
  • Tekst tussen aanhalingstekens wordt als geheel woord gezien, ook al zitten er spaties of return-tekens tussen
  • Tekst tussen accolades wordt letterlijk genomen; binnen accolades hebben dollartekens, aanhalingstekens en blokhaken geen betekenis. Het is mogelijk accolades te nesten, in dat geval behoren de geneste accolades gewoon tot de letterlijke tekst.

De belangrijkste commando's[bewerken]

set

Met dit commando wordt een variabele op een bepaalde waarde gezet. De eerste parameter is de variabelenaam, de tweede de gewenste waarde. Voorbeeld:

set a 0
set b $a
set c "Waarde van b is $b"

proc

Met dit commando wordt een procedure gedefinieerd. De eerste parameter is de naam van de procedure. De tweede parameter wordt gezien als een zin, waarin ieder woord de naam van een parameter is. De derde parameter wordt gezien als een script, welke de commando's waaruit de procedure bestaat bevat. Voorbeeld:

proc kwadraat {x} {
  return [expr {$x * $x}]
}

Als een procedure wordt beëindigd zonder return commando, dan wordt het resultaat van het laatste commando teruggegeven als het resultaat van de procedure. Men kan dus ook eenvoudigweg schrijven:

proc kwadraat x {expr {$x*$x}}

return

Dit commando onderbreekt de uitvoering van de huidige procedure. De eerste parameter is het resultaat van de procedure.

expr

Dit commando berekent een rekenkundige expressie. Alle parameters worden samengevoegd tot één woord en de rekenkundige expressie die zij vormen wordt berekend. Gewoonlijk verdient het de voorkeur om de expressie tussen accolades te plaatsen om dubbele evaluatie te voorkomen. Zonder accolades zou de expressie eerst door de shell en vervolgens door het expr commando worden geëvallueerd.

if

Dit commando wordt gebruikt om commando's voorwaardelijk te kunnen uitvoeren. De eerste parameter is de voorwaarde. Deze voorwaarde is een rekenkundige expressie. Het tweede woord is altijd gelijk aan "then". Het derde woord wordt gezien als een script dat uitgevoerd moet worden als het resultaat van de voorwaarde ongelijk is aan "0". Het vierde woord is altijd gelijk aan "else". Het vijfde woord wordt gezien als een script dat uitgevoerd moet worden als het resultaat van de voorwaarde gelijk is aan 0. Voorbeeld:

if {$x == 5} then {
  set y 200
} else {
  set y 0
}

Natuurlijk mogen het woord "else" en het daaropvolgende script ook worden weggelaten. Ook het woord "then" is optioneel en wordt normaal gesproken niet vermeld. Voorbeeld:

if {$y > 200} {set y 200}

while

Dit commando wordt gebruikt om een lus te maken. De eerste parameter wordt gezien als een rekenkundige expressie. De tweede parameter wordt gezien als een script dat uitgevoerd moet worden zolang de rekenkundige expressie ongelijk is aan "10". Voorbeeld:

set x 0
while {$x != 10} {
  set x [expr {$x + 1}]
}

Meer commando's worden beschreven in de Tcl handleiding.

Toepassingen[bewerken]

Doordat in Tcl alles om woorden en zinnen draait is de taal erg geschikt voor het bewerken van teksten. Tcl blijkt ook een uitstekende vervanger van Unix sh-scripts; de taal blijkt krachtiger, presteert beter en is bovenal makkelijker te programmeren dan de standaard Unix shell.

Tcl is ook beschikbaar voor Windows en kan op dezelfde manier een welkome vervanging voor MS-Dos batch-script vormen. Om de scripts ook te laten werken zonder dat Tcl geïnstalleerd moet zijn is de compiler uit Tclpro beschikbaar.

Een bijzondere toepassing van Tcl vinden we in het genereren van webpagina's. Tclhttpd is een webserver die volledig geschreven is in Tcl.

Een andere webserver waarin Tcl centraal staat is AOLserver. In AOLserver kan men, in typische ASP of PHP stijl HTML code mengen met Tcl code. Doordat Tcl zo goed met teksten overweg kan ontstaat een krachtige combinatie. Dit aangevuld met een goede integratie met databases (waarbij de tekst-omgang van Tcl weer goed van pas komt om SQL queries op te bouwen), enkele innovatieve ideeën en een krachtige API om met de webserver te communiceren geeft een meesterlijk geheel.

Prestaties[bewerken]

Op het eerste gezicht lijkt het dat de Tcl-aanpak erg traag moet zijn omdat alles met strings werkt. Dit valt mee; Tcl is namelijk lui in het converteren naar strings, dit gebeurt alleen als dit echt nodig is. Bijvoorbeeld:

set i 0
set i [expr {$i+4}]
set i [expr {$i+4}]
set t "i is gelijk aan $i"

In het eerste commando wordt i gelijk gezet aan "0". Omdat "0" een tekst is wordt deze als tekst in het geheugen opgeslagen.

In het tweede commando wordt i als getal gebruikt. De tekstversie wordt naar een integer geconverteerd, uit het geheugen verwijderd. De integer-versie wordt vervolgens gebruikt in de berekening.

Als vervolgens het derde commando uitgevoerd wordt, is i nog steeds in het geheugen opgeslagen als integer, en kan de berekening vlot zonder conversies uitgevoerd worden.

In het vierde commando is i echter weer als string nodig. De integer wordt in een tekstrepresentatie omgezet en gebruikt om de waarde van t te berekenen.

Bovenstaand schema zorgt ervoor dat conversies geen groot snelheidsprobleem meer vormen. Om de prestaties verder te verhogen beschikt Tcl over een compiler. Deze compiler compileert code in procedures automatisch naar een tussencode als deze de eerste keer worden uitgevoerd. De procedure kan dan bij een volgende aanroep veel sneller worden uitgevoerd dan de originele code in tekstvorm.

Externe links[bewerken]