Tcl (programmeertaal): verschil tussen versies

Uit Wikipedia, de vrije encyclopedie
Verwijderde inhoud Toegevoegde inhoud
herschreven
Richardw (overleg | bijdragen)
'we'; externe link naar voetnoot; hoofdstuk "Toepassingen" klinkt m.i. nog wat te juicherig (erg geschikt, uitstekende/welkome vervanging en zo)
Regel 22: Regel 22:
== Grammatica ==
== Grammatica ==
Tcl heeft een eenvoudige [[grammatica]]:
Tcl heeft een eenvoudige [[grammatica]]:
* Een zin bestaat uit woorden, gescheiden door spaties
* Een zin bestaat uit woorden, gescheiden door spaties.
* Een tekst bestaat uit zinnen, gescheiden door return-tekens
* 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 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
* 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 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.
* 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 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.
* 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.


Regel 87: Regel 87:
}
}
</pre>
</pre>
Meer commando's worden beschreven in de [http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm Tcl handleiding].
Meer commando's worden beschreven in de documentatie.<ref>{{en}}[http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm Tcl commands]</ref>


== Toepassingen ==
== Toepassingen ==
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-shells.
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-shells.


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.
Tcl is ook beschikbaar voor Windows en kan op dezelfde manier een welkome vervanging voor MS-Dos batch-scripts 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 bijzondere toepassing van Tcl is 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 veel en uitgebreide tekstfuncties bevat ontstaat er een krachtige combinatie. Tcl integreert daarnaast met databases (waarbij de tekstomgang van Tcl weer goed van pas komt om [[SQL]]-queries op te bouwen) en beschikt over een API om met webservers te communiceren.
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 veel en uitgebreide tekstfuncties bevat ontstaat er een krachtige combinatie. Tcl integreert daarnaast met databases (waarbij de tekstomgang van Tcl weer goed van pas komt om [[SQL]]-queries op te bouwen) en beschikt over een API om met webservers te communiceren.
Regel 122: Regel 122:
* {{en}}[http://wiki.tcl.tk De Tcler's Wiki]
* {{en}}[http://wiki.tcl.tk De Tcler's Wiki]
* {{nl}}{{en}}[http://wiki.tcl.tk/6093 Tcl-grammatica]
* {{nl}}{{en}}[http://wiki.tcl.tk/6093 Tcl-grammatica]

{{Appendix}}


{{Commonscat|Tcl programming language family}}
{{Commonscat|Tcl programming language family}}

Versie van 17 dec 2014 17:15

Tcl
Tcl
Paradigma multi-paradigma
Verschenen 1988
Ontworpen door John Ousterhout
Ontwikkeld door John Ousterhout
Huidige versie 8.6.3 (12 november 2014)
Typesysteem dynamisch
Implementaties ActiveTcl, Androwish
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 scripttaal die eind jaren tachtig werd ontwikkeld door John Ousterhout. Deze scripttaal, die 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, OS X en Android.

Grammatica

Tcl heeft een 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

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 documentatie.[1]

Toepassingen

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-shells.

Tcl is ook beschikbaar voor Windows en kan op dezelfde manier een welkome vervanging voor MS-Dos batch-scripts 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 is 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 veel en uitgebreide tekstfuncties bevat ontstaat er een krachtige combinatie. Tcl integreert daarnaast met databases (waarbij de tekstomgang van Tcl weer goed van pas komt om SQL-queries op te bouwen) en beschikt over een API om met webservers te communiceren.

Prestaties

Doordat Tcl veelvoudig gebruikmaakt van strings (tekst) zou het logisch zijn dat Tcl traag is. Dit is niet het geval, omdat Tcl lui is in het converteren naar strings: dat gebeurt enkel 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

Zie de categorie Tcl programming language family van Wikimedia Commons voor mediabestanden over dit onderwerp.