# Scripttaal

Een scripttaal is een programmeertaal die geschikt is voor het schrijven van scripts, kleine programma's om veel voorkomende taken (bijvoorbeeld systeembeheertaken) pragmatisch te automatiseren, of om een langdurige maar eenmalige taak te verrichten. Veel applicaties hebben een scripttaal; ook een besturingssysteem wordt meestal geleverd met een of meer scripttalen, terwijl er nog veel meer te installeren zijn.
Scripttalen zijn high-level-talen en werden omwille van snelheid en gemak bij het ontwikkelen – de compileerslag wordt overgeslagen – aanvankelijk vaak geïmplementeerd door middel van een interpreter. Tegenwoordig worden scripttalen meestal geïmplementeerd met een compiler om de werking te versnellen. Een interpreter moet namelijk met het verloop van het script herhaaldelijk de broncode interpreteren; het is zinvol dit te voorkomen door tussentijdse opslag van de executiecode. Kenmerkend bij het gebruik van een interpreter is dat een programmeerfout pas laat aan het licht komt als de onderhavige broncode moet worden uitgevoerd en de gebruiker met een voor hem soms onbegrijpelijke foutmelding wordt geconfronteerd.

## Geschiedenis

De eerste scripttalen, zoals JCL, stammen uit de jaren 60: ze lieten het toe om een reeks commando's (een batch) op ponskaart te zetten voor offline verwerking (meestal 's nachts). Bij latere, interactieve besturingssystemen (met een commandoregel) werden regelmatig uitgevoerde commandoreeksen opgeslagen in een bestand om net als een programma te worden uitgevoerd. Al gauw bleek men behoefte te hebben aan andere constructies dan sequentiële verwerking en voegde men constructies toe aan de commandotaal zoals conditionele uitvoering (if-then-else), lussen (while, for) en variabelen. Vroege voorbeelden hiervan zijn de shells van het besturingssysteem Unix (vanaf begin jaren 70) en de taal SNOBOL. Later (eind jaren 70) werd AWK ontworpen. Ook Rexx is begin jaren 80 als scripttaal ontworpen.
Vanaf eind jaren 80 werd een scala aan scripttalen ontwikkeld, zoals Perl, Python, Tcl en Ruby. Sommige van deze talen bleken ook buiten hun oorspronkelijke toepassingsdomein succesvol te zijn.
In de jaren 90 werden verschillende scripttalen voor het web ontwikkeld, bijvoorbeeld JavaScript, dat meestal in de browser draait, en talen zoals PHP en ColdFusion Markup Language die uitsluitend op de server draaien. Ze zorgen allemaal voor dynamiek en interactie op websites.

## Eigenschappen

Scripttalen hebben vaak een aantal eigenschappen met elkaar gemeen:

### Gecompileerd of geïnterpreteerd

    Hoewel de meeste scripttalen gecompileerd worden (naar doelcode) is het vaak mogelijk om ze volledig met een interpreter regel-voor-regel uit te voeren. Bij talen zoals Perl die gebruikmaken van just-in-time-compilatie of andere voorzieningen waarvoor het nodig is eerst het hele programma te verwerken, is dit echter niet mogelijk.

### Het mixen van compiletime en runtime

    Scripttalen die geheel of gedeeltelijk gecompileerd worden bieden over het algemeen de mogelijkheid om tijdens het uitvoeren van een programma (runtime) code te compileren en deze vervolgens uit te voeren. Dit gebeurt meestal door het gebruik van een eval-functie. Sommige talen (zoals Perl) bieden ook de mogelijkheid om tijdens het compileren (compiletime) code uit te voeren. Deze code wordt dan eerst uitgevoerd voordat de rest van het programma gecompileerd wordt. Hierdoor kan het gedrag van de compiler, en de manier waarop de rest van het programma wordt gecompileerd, beïnvloed worden.

### Geen declaraties en eenvoudige regels voor variabelenbereik

    In veel scripttalen zijn variabeledeclaraties niet verplicht of zelfs niet mogelijk. Verder hebben in sommige talen (zoals Perl) alle variabelen standaard een globaal bereik en moeten lokale variabelen expliciet als zodanig gespecificeerd worden. In andere talen (zoals PHP en TCL) zijn variabelen juist altijd lokaal tenzij ze expliciet als globaal gemarkeerd worden.

### Dynamische typering

    Scripttalen zijn meestal dynamisch getypeerd. Soms (bijvoorbeeld bij PHP en Python) wordt het type datatype van een variabele of functie pas gecontroleerd op het moment dat deze gebruikt wordt. In andere talen (zoals Rexx en Perl) hangt het van de context af als welk type een variabele geïnterpreteerd wordt: dezelfde variabele kan in het ene geval als string en in een ander geval als integer behandeld worden.

### Toegang tot andere programma's en het besturingssysteem

    Hoewel het in alle programmeertalen mogelijk is om het besturingssysteem aan te spreken of andere programma's te starten, is dit in scripttalen vaak makkelijker. Deze mogelijkheden zijn vaak ingebouwd in de taal zelf in plaats van dat er aparte library's voor nodig zijn.

### Tekstmanipulatie

    Scripttalen hebben vaak uitgebreide mogelijkheden voor het verwerken en bewerken van tekst. In het bijzonder is het gebruik van reguliere expressies in de taal ingebouwd. Zo heeft Perl een aantal speciale operatoren voor reguliere expressies en heeft JavaScript, dat in het algemeen maar weinig ingebouwde functionaliteit heeft, een aantal ingebouwde functies voor reguliere expressies.

### High-level-datatypen

    Scripttalen hebben vaak ingebouwde mogelijkheden voor high-level-datatypen. Zo hebben veel scripttalen associatieve arrays in plaats van (PHP), of naast (Perl), gewone arrays. Strings zijn primitieve datatypen met speciale operatoren in plaats van arrays van karakters.
* Scripting languages, hoofdstuk 13, pp. 649-726, in Programming Language Pragmatics, 3e editie, door Michael L. Scott, Morgan Kaufmann, 2009, ISBN 978-0-12-374514-9.
* ↑ De scripttaal JavaScript moet niet verward worden met Java, dat wel een programmeertaal, maar geen scripttaal is