Brent Welch vermaakt zich met het sleutelen aan zijn website
www.scriptics.com
waarin onder andere een database is te vinden met referenties -voorzien van
commentaar- naar Tcl gerelateerde URLs (het: "Tcl Resource Center") en de
e-commerce infrastructuur voor het product Tclpro
. Hij heeft tevens
een aantal grote applicaties gemaakt met behulp van Tcl/Tk, waaronder de webserver
TclHttpd
, waarop www.scriptics.com draait, de mail gebruikersinterface
Exmh
en de HTML-editor webtk
. Hij is de auteur
van "Practical Programming in Tcl and Tk".
Welch behaalde een ingenieurstitel in vliegtuigtechniek aan de universiteit van
Boulder, Colorado in 1982. Hij werd doctorandus in de computerwetenschappen aan de
universiteit van Berkeley, Californië in 1986 en zijn doctoraal in
computerwetenschappen haalde hij in 1990, ook aan de universiteit van Berkeley.
In het verleden was Welch werkzaam als onderzoeker aan gedistribueerde systemen
bij Xerox PARC en later als lid van het Tcl/Tk-team bij Sun Microsystems
Laboratories.
Hij is lid van ACM en de IEEE Computer Society. Homepage: www.beedub.com
In vergelijking met andere script talen heeft Tcl een eenvoudige syntaxis.
cmd arg arg arg
$foo
foo
.
[clock seconds]
clock seconds
, wat de huidige tijd in seconden geeft.
"meerdere woorden"
{meerdere woorden}
\
Hieronder een Tcl commando dat de huidige tijd laat zien. Het maakt gebruik van
drie Tcl commando's: set, clock
en puts
. Het
set
commando wijst waarden toe aan variabelen. Het clock
commando kan omgaan met tijdsgegevens en puts
kan waardes afdrukken.
set seconden [clock seconds] puts "Het is [clock format $seconden]"
Merk op dat het dollarteken niet wordt gebruikt bij het toekennen aan een variabele.
De variabele seconden
is niet nodig in dit voorbeeld. Het afdrukken
kan met één commando:
puts "Het is [clock format [clock seconds]]"
De Tcl syntaxis is erop gericht de parser in drie stappen te laten evalueren: groeperen van argumenten, substitueren van resultaten en commando's aanroepen.
puts
commando.
$foo
met de
waarde van foo
en vervangt geneste commando's (binnen de vierkante
haken) met het resultaat ervan. Belangrijk is hier dat substituties worden gedaan
ná het groeperen. Hierdoor wordt vermeden dat ongebruikelijke waarden de structuur
in een commando compliceren.
In dit voorbeeld worden accolades gebruikt voor het groeperen van argumenten zonder dat hierin substitutie plaatsvindt. Het is de implementatie van hetset i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }
while
commando die weet dat het eerste argument een expressie is en
het tweede nog meer Tcl commando's. De accolades groeperen dus twee argumenten:
de logische expressie die de lus stuurt en de commando's binnen de lus.
Verder zien we twee rekenkundige expressies: de vergelijking en de vermenigvuldiging.
Het while
commando interpreteert het eerste argument automatisch als
zijnde een expressie. In andere gevallen moet men de expressie expliciet aangeven
middels het expr
commando om een rekenkundige evaluatie te forceren.
expr
aanroept voor het afhandelen van rekenkundige
expressies, puts
voor het afhandelen van uitvoerfuncties en
set
om waarden aan variabelen toe te kennen. Deze Tcl commando's zijn
geïmplementeerd door C-functies die zichzelf aanmelden bij Tcl. Deze functies
accepteren de argumenten als strings en retourneren een nieuwe
string als resultaat. Het is heel eenvoudig om dit soort C functies te
maken. De functie kan van alles doen. Van het benaderen van databases tot het
creëren van een grafische gebruikersinterface. De taal Tcl weet niet echt wat
het commando doet. Het groepeert slechts argumenten, substitueert resultaten en
roept commando's aan.
proc fac {x} { if {$x < 0} { error "Ongeldig argument $x: moet een positief geheel getal zijn" } elseif {$x <= 1} { return 1 } else { return [expr $x * [fac [expr $x-1]]] } }